-
[프로그래머스/Level 1] 대충 만든 자판알고리즘 문제풀이/프로그래머스 2024. 1. 4. 16:18
https://school.programmers.co.kr/learn/courses/30/lessons/160586
keymap의 각 알파벳 별 순서를 map에 저장한 후, targets의 문자열을 만들 수 있는 최소 클릭 수를 구하였다.
이때 주어진 keymap에서 특정 문자열을 만들 수 없는 경우 -1을 리턴해야 하는데, 다음 케이스를 조심해야 한다.
keymap : ["BC"]
targets : ["AC", "BC"]
return : [-1, 3]
=> "BC"는 만들 수 있으므로 -1로 리턴하면 안된다. 따라서 이를 구분하기 위해 flag 값을 추가
#include <string> #include <vector> #include <unordered_map> #include <iostream> #include <algorithm> using namespace std; vector<int> solution(vector<string> keymap, vector<string> targets) { vector<int> answer; int size = keymap.size(); unordered_map<char, int> m[size]; for (int i = 0; i < keymap.size(); i++) { for (int j = 0; j < keymap[i].size(); j++) { if (m[i][keymap[i][j]] != 0) continue; m[i][keymap[i][j]] = j + 1; } } for (int k = 0; k < targets.size(); k++) { int sum = 0; bool isPossible = true; for (int i = 0; i < targets[k].size(); i++) { char ch = targets[k][i]; int minCnt = 2147000000; for (int j = 0; j < size; j++) { if (m[j][ch] == 0) continue; minCnt = min(minCnt, m[j][ch]); } if (minCnt == 2147000000) { isPossible = false; break; } sum += minCnt; } if (isPossible) answer.push_back(sum); else answer.push_back(-1); } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 1] 카드 뭉치 (0) 2024.01.09 [프로그래머스/Level 1] 가장 많이 받은 선물 (1) 2024.01.07 [프로그래머스/Level 1] 바탕화면 정리 (0) 2024.01.02 [프로그래머스/Level 1] 공원 산책 (0) 2024.01.02 [프로그래머스/Level 1] 달리기 경주 (0) 2023.12.27