728x90
문제
주어진 targets의 각 요소를 최소한의 count로 완성할 수 있도록 keymap에서 count하기
keymap : 임의의 대문자로 이루어진 문자열로 된 String[ ]
targets : 임의의 대문자로 이루어진 문자열로 된 String[ ]
만약, 불가능한 target이면, -1로 출력
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/160586
원리
단순 반복문으로 해결
풀이방법
1번째 반복문 : targets 중 검사할 타겟지정. 반복 종료 시, 각 i번째 타겟을 완성할 수 있는 count를 answer의 i번째에 넣음
2번째 반목문 : 1번째 반복문에서 지정한 타겟의 길이만큼 검사. 각 j번째 문자의 최소 count를 최종 count에 더함
: 만약 일치하는 문자열이 없는 경우, 처음 할당할 최대값이 그대로이므로, 최종 count를 -1로 바꾸고 break
3번째 반복문 : keymap에서 key를 순차적으로 뽑아봄
4번째 반복문 : key의 길이만큼 돌면서 일치하는 문자가 있으면 count에 l을 할당. 단, 기존 count보다 작을 경우만 할당
나의 코드
public static int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
for (int i = 0; i < targets.length; i++) {
String target = targets[i];
int targetCount = 0;
for(int j = 0; j < target.length(); j++) {
int count = Integer.MAX_VALUE;
for(int k = 0; k < keymap.length; k++) {
String key = keymap[k];
for(int l = 0; l < key.length(); l++) {
if(target.charAt(j)==key.charAt(l) && l <= count)count = l;
}
}
if(count==Integer.MAX_VALUE) {
targetCount = -1;
break;
}
else targetCount += count+1;
}
answer[i] = targetCount;
}
return answer;
}
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > JAVA' 카테고리의 다른 글
| [백준] no1389: 케빈 베이컨의 6단계 법칙 (0) | 2023.03.18 |
|---|---|
| [Programmers] no161990: 바탕화면 정리 (0) | 2023.03.13 |
| [백준] no11659: 구간 합 구하기 4 (0) | 2023.03.09 |
| [백준] no2667: 단지번호붙이기 (0) | 2023.03.08 |
| [백준] no1260: DFS와 BFS (0) | 2023.03.07 |