작성해야하는 코드의 구조를 다음과 같이 구상해보았다.
1. targets의 문자열을 하나씩 탐색한다.
2. targets의 문자열에 문자를 하나씩 탐색한다.
3. 그 문자를 keymap에 들어있는 문자열에서 몇번째에 존재하는지 각각 저장한다. 이때 존재하지 않으면 -1이 반환된다.
4. 위에서 저장한 순번들을 오름차순 정렬한다.
5. 만약 모든 값이 -1이라면 완성할 수 없는 목표이므로 -1을 저장.
5-1. 오름차순 정렬한 것 중 -1이 아닌 값들 중 가장 작은값을 더한다.
import java.util.Arrays;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
for(int i = 0 ; i < targets.length ; i++){
int count = 0;
for(int j = 0 ; j < targets[i].length() ; j++){
char t = targets[i].charAt(j); //현재 찾아야하는 문자
int[] keyCount = new int[keymap.length]; //키맵의 개수만큼 배열 생성
for(int k = 0 ; k < keyCount.length ; k++){ //각 매핑된 키에서 찾아야하는 문자의 순번을 담음
keyCount[k] = keymap[k].indexOf(t);
}
Arrays.sort(keyCount); //순번을 빠른순으로 정렬
//System.out.println( Arrays.toString(keyCount));
if(keyCount[keyCount.length - 1] == -1){ //맨 뒤의 값이 -1이면 모든값이 -1이기 때문에
count = -1; //문자열을 구성할 수 없으므로 -1 반환
break;
}else{
for(int key : keyCount){ //순번을 순서대로 탐색
if(key > -1){ //-1이 아닌 가장 작은 수를 만나면
count += key + 1; //count에 더하고
break; //for each 종료
}
}
}
//System.out.println("count : " + count);
}
answer[i] = count;
//System.out.println("-----------------------");
}
return answer;
}
}
'개?발 > 프로그래머스' 카테고리의 다른 글
문자열 내 p와 y의 개수 (0) | 2024.07.05 |
---|---|
두 정수 사이의 합 (0) | 2024.07.05 |
덧칠하기(java) (0) | 2024.05.27 |
데이터 분석(Java) (0) | 2024.05.27 |
이웃한 칸(java) (0) | 2024.05.21 |