문제 설명
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
나의 풀이
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
for (int i = 0; i < targets.length; i++) {
int sum = 0;
for (int j = 0; j < targets[i].length(); j++) {
int idx = -1;
char targetChar = targets[i].charAt(j);
for (int m = 0; m < keymap.length; m++) {
for (int n = 0; n < keymap[m].length(); n++) {
char keyChar = keymap[m].charAt(n);
if (keyChar == targetChar) {
if (idx == -1 || n < idx) {
idx = n;
}
}
}
}
if (idx == -1) {
sum = -1;
break;
}
sum += idx + 1;
}
answer[i] = sum;
}
return answer;
}
}
GPT 풀이
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
Map<Character, Integer> minClickMap = new HashMap<>();
// 1. 문자별 최소 클릭 수 기록
for (String key : keymap) {
for (int i = 0; i < key.length(); i++) {
char c = key.charAt(i);
int click = i + 1;
minClickMap.put(c, Math.min(minClickMap.getOrDefault(c, Integer.MAX_VALUE), click));
}
}
// 2. 각 target별 최소 클릭 수 합산
int[] answer = new int[targets.length];
for (int i = 0; i < targets.length; i++) {
int sum = 0;
for (char c : targets[i].toCharArray()) {
if (!minClickMap.containsKey(c)) {
sum = -1;
break;
}
sum += minClickMap.get(c);
}
answer[i] = sum;
}
return answer;
}
}
- Integer.MAX_VALUE을 해준 이유는 만약 처음 나오는 문자라면 무조건 click을 넣어야하기 때문에 Math.min에서 무조건 click이 리턴되게끔 Integer.MAX_VALUE를 해준것
'👨💻 Coding Test > Programers' 카테고리의 다른 글
[Programmers/Java/Lv.1/그리디] 73.덧칠하기 (0) | 2025.07.15 |
---|---|
[Programmers/Java/Lv.1/문자열] 71.카드 뭉치 (1) | 2025.07.10 |
[Programmers/Java/Lv.1/문자열] 70.둘만의 암호 (1) | 2025.07.07 |
[Programmers/Java/Lv.1/문자열] 69.개인정보 수집 유효기간 (0) | 2025.07.04 |
[Programmers/Java/Lv.1/문자열] 68.크기가 작은 부분 문자열 (0) | 2025.07.03 |