Problem
Solution
휴대폰 자판을 List에 저장하고 주어진 특정 문자열을 입력하여 키를 최소 몇 번 누르는지를 구하면 되는 문제이다.
1. List를 생성하고 keymap을 문자들을 List에 주소에 넣어주면서 중간에 키를 누르는 최솟값을 값으로 넣어준다.
2. 키보드 값을 List에 다 넣었으므로 targets에 있는 특정 문자열과 비교하여 키를 누르는 값을 구한다.
3. 만약 특정 문자열이 키보드 값 List에 없을 경우 answer에 -1을 넣어주고 break 해준다. (굳이 불필요한 뒷 작업을 할 필요 없도록)
4. 키를 누르는 최솟값을 answer에 저장하여 마지막에 answer을 출력해 준다.
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
int[] list = new int[26];;
for(int i = 0; i < keymap.length; i++) {
String keymapStr = keymap[i];
int count = 1;
for(int j = 0; j < keymap[i].length(); j++) {
int temp = keymapStr.charAt(j) - 'A';
if(list[temp] == 0 || list[temp] >= count) {
list[temp] = count;
}
count++;
}
}
for(int i = 0; i < targets.length; i++) {
String targetsStr = targets[i];
int num = 0;
for(int k = 0; k < targetsStr.length(); k++) {
int temp = targetsStr.charAt(k) - 'A';
if(num != -1 && list[temp] != 0) {
num += list[temp];
} else {
num = -1;
break;
}
}
answer[i] = num;
}
return answer;
}
}
마치며
for문을 사용해서 하는 간단한 풀이 방법이다. 만약 더 좋은 다른 방법이 있거나 틀린 부분이 있으면 편하게 댓글 남겨주시면 감사합니다 ~
반응형
'백준 Algorithm' 카테고리의 다른 글
[프로그래머스] 다음 큰 숫자 Java 풀이 (0) | 2023.04.05 |
---|---|
[프로그래머스] 문자열 나누기 Java 풀이 (0) | 2023.03.15 |
[프로그래머스] 둘만의 암호 Java 풀이 (0) | 2023.03.09 |
[LeetCode - Data Structure II] 15. 3Sum (0) | 2022.11.10 |
[LeetCode - Data Structure II] 169. Majority Element (0) | 2022.11.08 |