코린이의 소소한 공부노트

[프로그래머스/Lv.1] 대충 만든 자판 본문

코딩테스트 풀이/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;