|
1 |
| -package Week2.공통.대충만든자판; |
2 |
| - |
3 | 1 | import java.util.*;
|
4 | 2 |
|
5 |
| -public class jiyoon { |
| 3 | +class Solution { |
6 | 4 | public int[] solution(String[] keymap, String[] targets) {
|
7 | 5 | int[] answer = new int[targets.length];
|
8 | 6 |
|
9 |
| - // 자판 정보를 담을 Map(Key : 자판, Value : 자판을 누르기 위해 눌러야 할 횟수) |
10 |
| - HashMap<Character, Integer> keyboard = new HashMap<>(); |
| 7 | + HashMap<Character, Integer> keyboard = new HashMap<>(); // 자판 정보를 담을 Map(Key : 자판, Value : 자판을 누르기 위해 눌러야 할 횟수) |
11 | 8 |
|
12 | 9 | for (int i = 0; i < keymap.length; i++) { // keyboard에 자판과 횟수 입력
|
13 | 10 | for (int j = 0; j < keymap[i].length(); j++) {
|
14 | 11 | char c = keymap[i].charAt(j);
|
15 |
| - int index = j + 1; |
16 | 12 |
|
17 |
| - if (keyboard.containsKey(c)) { |
18 |
| - keyboard.put(c, Math.min(index, keyboard.get(c))); |
19 |
| - } else { |
20 |
| - keyboard.put(c, index); |
| 13 | + if (!keyboard.containsKey(c)) { // keyboard에 c값 없으면 |
| 14 | + keyboard.put(c, j + 1); // keyboard에 문자 값과 문자의 위치(문자를 누르는 횟수) 저장 |
| 15 | + |
| 16 | + } else { // keyboard에 c값이 있다면 |
| 17 | + int now = keyboard.get(c); // 현재 keyboard에 저장된 c의 value값 |
| 18 | + |
| 19 | + if (now > j + 1) { // keyboard에 저장된 Value값보다 현재 값이 더 작으면 |
| 20 | + keyboard.replace(c, j + 1); // 현재 값으로 갱신 |
| 21 | + } |
21 | 22 | }
|
22 | 23 | }
|
23 | 24 | }
|
24 | 25 |
|
25 | 26 | for (int i = 0; i < targets.length; i++) {
|
26 |
| - String target = targets[i]; |
27 |
| - boolean check = false; |
| 27 | + char[] arr = targets[i].toCharArray(); // 목표 문자열로 char배열 생성 |
| 28 | + |
28 | 29 | int count = 0;
|
| 30 | + for (char c : arr) { |
| 31 | + if (keyboard.containsKey(c)) { // keyboard에 문자가 저장되어 있다면, |
| 32 | + count += keyboard.get(c); // Value값 더하기 |
29 | 33 |
|
30 |
| - for (char c : target.toCharArray()) { // 입력하려는 문자열로 char배열 생성 |
31 |
| - if (keyboard.containsKey(c)) { |
32 |
| - count += keyboard.get(c); |
33 |
| - } else { |
34 |
| - check = true; |
| 34 | + } else { // keyboard에 저장되지 않은 문자라면 |
| 35 | + count = -1; // 목표 문자열을 작성할 수 없으므로 -1 |
35 | 36 | break;
|
36 | 37 | }
|
37 | 38 | }
|
38 | 39 |
|
39 |
| - if (check) answer[i] = -1; // 목표 문자열 작성 불가능 |
40 |
| - else answer[i] = count; // 목표 문자열 작성 가능 |
| 40 | + answer[i] = count; |
41 | 41 | }
|
42 | 42 |
|
43 | 43 | return answer;
|
|
0 commit comments