-
https://school.programmers.co.kr/learn/courses/30/lessons/160586?language=cpp
아이디어
알파벳에 따른 최소 입력 키 횟수를 저장해두고 targets에 있는 알파벳에 따라 입력하는 키의 횟수를 더하면 된다.
HashMap 사용
C++
#include <string> #include <vector> #include <unordered_map> using namespace std; vector<int> solution(vector<string> keymap, vector<string> targets) { vector<int> answer; unordered_map<char,int> key; for(auto iter : keymap){ for(int i=0;i<iter.size();i++){ if(key.find(iter[i]) == key.end()){ key[iter[i]] = i+1; continue; } if(key[iter[i]] > i+1) key[iter[i]] = i+1; } } for(auto iter : targets){ int keyCnt = 0; for(int i=0;i<iter.size();i++){ if(key.find(iter[i]) == key.end()){ keyCnt = -1; break; } keyCnt += key[iter[i]]; } answer.push_back(keyCnt); } return answer; }
JAVA
import java.util.*; class Solution { public int[] solution(String[] keymap, String[] targets) { int[] answer = new int[targets.length]; HashMap<Character,Integer> map = new HashMap<>(); for (String key : keymap) { for (int i = 0; i < key.length(); i++) { char ch = key.charAt(i); if (!map.containsKey(ch)){ map.put(ch,i+1); continue; } if(map.get(ch)>i){ map.replace(ch,i+1); } } } for(int i=0; i< targets.length;i++){ int sum = 0; for(int j=0; j<targets[i].length();j++){ char ch = targets[i].charAt(j); if(!map.containsKey(ch)){ sum = -1; break; } sum+=map.get(ch); } answer[i] = sum; } return answer; } }
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Programers 덧칠하기/ C++ (0) 2023.03.04 Programers 바탕화면 정리/ C++ (0) 2023.03.04 Programers 연속 펄스 부분 수열의 합/ C++ (0) 2023.03.04 Programers 카드 뭉치 / C++, Java (0) 2023.02.19 Programers 미로 탈출/ C++ (0) 2023.02.19 댓글