Deff_Dev
[프로그래머스] 대충 만든 자판 C++ 본문
문제
이 문제는 누를 때마다 순서대로 문자가 변환되는 keymap을 이용해 targets 문자열을 작성할 때 키보드를 눌러야 하는 촤소 횟수를 구하는 문제이다.
맵을 사용하여 keymap에 할당된 문자 별 눌러야 하는 최소 횟수를 저장하고, targets 벡터에 저장된 문자 별 맵에 저장된 횟수를 더해 answer 벡터에 저장하는 방식으로 문제를 해결했다.
만약 맵에 저장된 횟수가 0이라면 해당 문자는 키보드 자판에 할당되어 있지 않으므로 answer 벡터에 -1을 저장한다.
풀이
#include <string>
#include <vector>
#include<map>
// https://school.programmers.co.kr/learn/courses/30/lessons/160586
using namespace std;
// 문자 별 키보드 입력 횟수 저장 맵
map <char,int> keys;
vector<int> solution(vector<string> keymap, vector<string> targets) {
vector<int> answer;
// 문자 별 키보드 입력 횟수가 가장 적은 횟수를 맵에 저장
for(int i = 0; i< keymap.size(); i++){
for(int j = 0; j< keymap[i].length(); j++){
if(keys[keymap[i][j]] == 0 || keys[keymap[i][j]] > j + 1){
keys[keymap[i][j]] = j + 1;
}
}
}
// 타겟 문자 별 키보드 입력 횟수 계산
for(int i = 0; i<targets.size(); i++){
int result = 0;
for(int j = 0;j< targets[i].length(); j++){
// 맵에 저장된 문자 별 입력 횟수가 0일때는 키보드 자판에 없는 문자이므로 -1
if(keys[targets[i][j]] == 0){
result = -1;
break;
}
result += keys[targets[i][j]];
}
answer.push_back(result);
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 카드 뭉치 (C++) (0) | 2024.03.10 |
---|---|
[프로그래머스] 둘만의 암호 (C++) (0) | 2024.03.09 |
[프로그래머스] 덧칠하기 (C++) (0) | 2024.03.07 |
[프로그래머스] 추억 점수 (C++) (0) | 2024.03.06 |
[프로그래머스] 개인정보 수집 유효기간 (C++) (0) | 2024.03.05 |