문제
문제 풀이
keymap 배열에서 입력된 값중 하나가 존재 할 때 가장 가까운 인덱스 값들을 더해서 결과 배열에 담아줘야하는 문제이다.
for문을 여러번 사용해야 하는 문제로 중간에 논리적 정리가 복잡해지면 이상한 값들을 볼 수 있는 문제이다.
나의 답안
public static 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++) {
char tc = targets[i].charAt(j);
int min = Integer.MAX_VALUE;
for (int k = 0; k < keymap.length; k++) {
for (int l = 0; l < keymap[k].length(); l++) {
if (!keymap[k].contains(String.valueOf(tc))) break;
if (keymap[k].charAt(l) == tc && min > l + 1) {
min = l + 1;
}
if (min == 1) break;
}
if (min == 1) break;
}
if (min == Integer.MAX_VALUE) {
answer[i] = -1;
break;
} else {
sum += min;
answer[i] = sum;
}
}
}
return answer;
}
다른 답안
입력된 값이 keymap에 존재 한다면 그 값을 가지고 있는 인덱스 넘버를 list에 담아 두었다가 나중에 제일 작은 값을 가진 리스트를 결과에 더해주고 배열에 담아주는 방식을 사용하였음.
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
for(int i = 0; i < targets.length; i++){ //타겟 중 1개
int result =0;
for(int j= 0; j < targets[i].length(); j++){ // 타켓의 문자
List<Integer> list = new ArrayList<>();
for(int k= 0; k < keymap.length; k++){ // keyMap 개수 비교
if(keymap[k].contains(String.valueOf(targets[i].charAt(j)))){
list.add(keymap[k].indexOf(String.valueOf(targets[i].charAt(j)))+1);
}
}
if(list.isEmpty()){
result = -1;
}
else {
result += Collections.min(list);
}
}
answer[i] += result;
}
return answer;
}
}
'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글
신고 결과 받기 (0) | 2023.03.29 |
---|---|
개인정보 수집 유효기간 (0) | 2023.03.29 |
둘만의 암호 (0) | 2023.03.27 |
성격 유형 검사하기 (0) | 2023.03.27 |
햄버거 만들기 (0) | 2023.03.27 |