TLI/코드카타
2024.05.29 TIL 코트카타 66번(대충만든자판)
jaeseonyoo
2024. 5. 29. 21:00
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를 가지는 알파벳이 하나라도 있으면 입력이 불가하므로 더이상 탐색하지 않는다.
포인트
- 아스키코드 값으로 인덱스에 접근하는 배열을 만드는 것