fun solution(keymap: Array<String>, targets: Array<String>): IntArray {
var minPushs = IntArray(26)
for(minPushsIndex in 0..minPushs.size-1) {
minPushs[minPushsIndex] = Integer.MAX_VALUE
}
for (keySequence in keymap) {
for(keySequenceIndex in 0..keySequence.length-1) {
val currentAlphabet = keySequence[keySequenceIndex]
val minPushsIndex = currentAlphabet.code - 65
minPushs[minPushsIndex] = minPushs[minPushsIndex].coerceAtMost(keySequenceIndex + 1)
}
}
var answer = IntArray(targets.size)
for(targetIndex in 0..targets.size-1) {
val currentTarget = targets[targetIndex]
for(currentTargetIndex in 0..currentTarget.length-1) {
val minPush = minPushs[currentTarget[currentTargetIndex].code - 65]
if(minPush == Integer.MAX_VALUE) {
answer[targetIndex] = -1
break
}
answer[targetIndex] += minPush
}
}
return answer
}
풀이 과정
1. keyMap에서 모든 알파벳에 대해 최소 클릭 횟수를 찾아 배열에 넣는다.
- 0~25( A~Z ) 인덱스를 가지는 배열(minPushs)을 만들어서 아스키코드로 인덱스에 접근해 최솟값을 계속해서 갱신한다.
- keyMap을 다 탐색한 후에도 처음 초기화했던 Integer.MAX_VALUE 값으로 유지되고 있으면 해당 알파벳은 입력이 불가한 것이다.
2. targets에 있는 문자열을 이미 구한 최소 클릭횟수 배열에서 알파벳을 아스키코드로 접근해 최소 클릭횟수를 찾는다.
- Integer.MAX_VALUE를 가지는 알파벳이 하나라도 있으면 입력이 불가하므로 더이상 탐색하지 않는다.
포인트
- 아스키코드 값으로 인덱스에 접근하는 배열을 만드는 것
'TLI > 코드카타' 카테고리의 다른 글
2024.05.31 TIL 코트카타 68번(햄버거 만들기) (0) | 2024.05.31 |
---|---|
2024.05.30 TIL 코트카타 67번(둘만의 암호) (0) | 2024.05.30 |
2024.05.28 TIL 코트카타 65번(문자열나누기) (0) | 2024.05.28 |
2024.05.28 TIL 코트카타 62번(옹알이(2)) (0) | 2024.05.28 |
2024.05.27 내일배움캠프 Android 4기를 시작하며 (0) | 2024.05.27 |