문제: https://school.programmers.co.kr/learn/courses/30/lessons/160586
1. 코드
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
for(int i = 0; i < targets.length; i++) {
for(char c : targets[i].toCharArray()) {
int press = Integer.MAX_VALUE;
for(String k : keymap) {
for(int j = 0; j < k.length(); j++) {
if(c == k.charAt(j)) {
press = Math.min(press, j);
break;
}
}
}
if(press == Integer.MAX_VALUE) {
answer[i] = -1;
break;
}
else answer[i] += press + 1;
}
}
return answer;
}
}
2. 설명
for(char c : targets[i].toCharArray()) {
int press = Integer.MAX_VALUE;
for(String k : keymap) {
for(int j = 0; j < k.length(); j++) {
if(c == k.charAt(j)) {
press = Math.min(press, j);
break;
}
}
}
반복문을 통해서 targets의 문자와 keymap의 문자를 비교하는데 press의 초기값은 가장 큰 수를 저장하며 Math.min() 메서드를 통해서 가장 적은 수를 press를 저장하면 해당 키를 최소로 누르는 수를 저장하게 됩니다.
if(press == Integer.MAX_VALUE) {
answer[i] = -1;
break;
}
else answer[i] += press + 1;
}
만약 press의 값이 처음 선언했을 때와 동일하다면 targets의 문자가 keymap에 존재하지 않다는 것을 의미하기에 answer에 -1을 저장한 뒤 반복문을 빠져나옵니다. 왜냐하면 이미 targets에 해당 문자가 1개라도 존재하지 않으면 -1을 반환하기 때문입니다.
만약 아니라면 answer에 press에서 1만큼 증가된 값을 합해주며 반복문을 계속 진행합니다.
3. 정리
- keymap에 존재하지 않는 문자를 가지고 있는 문자열은 -1을 반환한다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 155652번: 둘만의 암호 [Java] (0) | 2023.08.11 |
---|---|
프로그래머스 - 64061번: 크레인 인형뽑기 게임 [Java] (0) | 2023.08.10 |
프로그래머스 - 140108번: 문자열 나누기 [Java] (0) | 2023.08.08 |
프로그래머스 - 42576번: 완주하지 못한 선수 (0) | 2023.08.07 |
프로그래머스 - 42862번: 체육복 [Java] (0) | 2023.08.06 |