프로그래머스/1레벨
대충 만든 자판/C++
Koalitsiya
2023. 2. 28. 14:15
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 조건
- 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;
}