코딩테스트 풀이/JAVA
[프로그래머스/Lv.1] 대충 만든 자판
무지맘
2023. 2. 23. 21:52
1. Input
1) String[] keymap
- 자판의 키가 담긴 배열로, keymap[i]에는 해당 키를 n번 눌렀을 때 입력되는 문자들이 담겨있다.
// 예를 들어 keymap[0] = "ABACD" 인 경우 키를 한 번 누르면 A, 두 번 누르면 B, 세 번 누르면 A 가 된다.
2) String[] targets
- keymap을 이용해 입력할 문자열이 담겨있다.
2. Output
1) targets[i]를 작성하려할 때 눌러야 하는 최소 횟수를 담은 int[]
2) targets[i]를 작성할 수 없다면 -1를 저장
3. Constraint
1) 1 ≤ keymap의 길이 ≤ 100
2) 1 ≤ keymap의 원소의 길이 ≤ 100
3) keymap의 원소의 길이는 서로 다를 수 있다.
4) 1 ≤ targets의 길이 ≤ 100
5) 1 ≤ targets의 원소의 길이 ≤ 100
6) keymap, targets의 원소는 알파벳 대문자로만 이루어져 있다.
4. Example
Input: keymap=["ABACD", "BCEFD"], targets=["ABCD","AABB"] -> Output: [9,4]
설명:
- "ABCD"의 경우: 키1 1회(A) -> 키2 1회(B) -> 키2 2회(C) -> 키1 5회(D)로 총 9번
- "AABB"의 경우: 키1 1회(A) -> 키1 1회(A) -> 키2 1회(B) -> 키2 1회(B)로 총 4번
5. Code
1) 첫 코드(2023/02/23)
import java.util.*;
int[] answer = new int[targets.length];
HashMap<Character,Integer> m = new HashMap<Character,Integer>();
for(String s : keymap){
for(int i=0 ; i<s.length() ; i++){
if(m.containsKey(s.charAt(i)))
m.put(s.charAt(i),Math.min(m.get(s.charAt(i)),i+1));
else
m.put(s.charAt(i),i+1);
}
}
for(int i=0 ; i<targets.length ; i++){
for(int j=0 ; j<targets[i].length() ; j++){
if(m.containsKey(targets[i].charAt(j)))
answer[i]+=m.get(targets[i].charAt(j));
else{
answer[i] = -1; break;
}
}
}
return answer;