문제 조건
- keymap[i]는 i + 1번 눌렀을 때 바뀌는 문자이다.
- answer는 targets[i] 문자열을 만들기 위해 키를 눌러야하는 최소 횟수들을 더한 것이다.
- targets[i] 문자열을 작성할 수 없을 때는 -1을 리턴한다.
문제 풀이
- 각 문자마다 최소 횟수들을 저장하기 위해 char을 key, int를 value로 가지는 m을 선언한다.
- map에 각 keymap[i][j]의 j + 1 중 최솟값을 저장한다.
- m에 targets[i][j]가 있다면 count에 targets[i][j]를 더하고 아니라면 count = -1을 한 후 answer에 담는다.
- targets의 모든 원소에 해당 작업이 수행된 후 answer 리턴
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(vector<string> keymap, vector<string> targets) {
vector<int> answer;
map<char, int> m;
for(int i = 0; i < keymap.size(); i++) {
for(int j = 0; j < keymap[i].size(); j++) {
if(m.find(keymap[i][j]) != m.end()) {
if(m[keymap[i][j]] < j + 1)
continue;
else
m[keymap[i][j]] = j + 1;
}
else {
m[keymap[i][j]] = j + 1;
}
}
}
for(int i = 0; i < targets.size(); i++) {
int count = 0;
for(int j = 0; j < targets[i].size(); j++) {
if(m.find(targets[i][j]) != m.end())
count += m[targets[i][j]];
else {
count = -1;
break;
}
}
answer.push_back(count);
}
return answer;
}
'프로그래머스 > 1레벨' 카테고리의 다른 글
[프로그래머스/C++] 덧칠하기 (0) | 2023.06.29 |
---|---|
[프로그래머스/C++] 추억 점수 (0) | 2023.06.29 |
카드 뭉치/C++ (0) | 2023.02.28 |
개인정보 수집 유효기간/C++ (0) | 2023.02.06 |
둘만의 암호/C++ (0) | 2023.02.03 |