프로그래머스
[프로그래머스][Kotlin]대충 만든 자판
끝까지 처음처럼
2023. 2. 26. 00:33
728x90
해당 문제는 코드를 2개를 작성하여 풀어 보았습니다.
처음 코드를 작성하였을 때는 value 값에 정상적인 값이 나올 수 없는 값을 설정하여 구분하였고,
두번째는 map에 문자별로 가장 가까운 값을 저장하여 구하는 방식으로 코드를 작성하였습니다.
그리고 작성하면서 첫번째 코드의 경우 머리속에서 정리가 좀 어려웠던 반면, 두번째 코드는 작성하면서 머리속에서 첫번째 코드와 비교 했을때 헷갈리지 않았었습니다.
그리고 두번째의 코드의 경우 추후 비슷한 문제에서 keymap, targets 의 자료의 양이 늘어나더라도 반복문 자체만 따졌을경우 첫번째 코드는 통과하지 못할 확률이 높지만 두번째 코드는 통과 할 확률이 매우 높습니다.
제가 첫번째 코드를 하기처럼 작성했던 까닭은 자료의 양을 생각했을때 3중 for문을 돌려도 시간초과가 나지 않을 양이였기에 그냥 생각나는 대로 작성을 해봤었습니다.
하기는 제가 작성한 코드와 코드 별 실행시간 입니다.
첫번재 코드(value 값에 정상적인 값이 나올 수 없는 값을 설정하여 구분)
import java.lang.Math.min
class Solution {
fun solution(keymap: Array<String>, targets: Array<String>): IntArray {
var answer = IntArray(targets.size){0}
for(i in 0 .. targets.size-1){
var arr = targets[i].toCharArray()
var count = 0
for(j in 0 .. arr.size-1){ // targets 내 값 조회
var idx = 101
var inchk = false
for(k in 0 .. keymap.size-1){
if(keymap[k].contains(arr[j])){
idx = min(idx,keymap[k].indexOf(arr[j])+1)
inchk = true
}
}
if(inchk){
count += idx
} else {
count += 100000
}
}
if(count >= 100000){
answer[i] = -1
} else {
answer[i] = count
}
}
return answer
}
}
실행결과
테스트 1 〉 | 통과 (12.13ms, 60.8MB) |
테스트 2 〉 | 통과 (7.80ms, 62.5MB) |
테스트 3 〉 | 통과 (10.76ms, 60.9MB) |
테스트 4 〉 | 통과 (8.27ms, 60.9MB) |
테스트 5 〉 | 통과 (9.06ms, 61.3MB) |
테스트 6 〉 | 통과 (8.48ms, 62MB) |
테스트 7 〉 | 통과 (10.39ms, 60.7MB) |
테스트 8 〉 | 통과 (7.79ms, 60.7MB) |
테스트 9 〉 | 통과 (9.02ms, 60.7MB) |
테스트 10 〉 | 통과 (10.84ms, 60.1MB) |
테스트 11 〉 | 통과 (7.58ms, 60.9MB) |
테스트 12 〉 | 통과 (7.99ms, 62.1MB) |
테스트 13 〉 | 통과 (7.58ms, 63.4MB) |
테스트 14 〉 | 통과 (28.37ms, 61.2MB) |
테스트 15 〉 | 통과 (40.38ms, 60.9MB) |
테스트 16 〉 | 통과 (31.37ms, 61.5MB) |
테스트 17 〉 | 통과 (32.76ms, 61.2MB) |
테스트 18 〉 | 통과 (28.05ms, 62.3MB) |
테스트 19 〉 | 통과 (32.20ms, 62.2MB) |
테스트 20 〉 | 통과 (24.51ms, 61.8MB) |
테스트 21 〉 | 통과 (40.66ms, 60.8MB) |
테스트 22 〉 | 통과 (30.43ms, 61.8MB) |
테스트 23 〉 | 통과 (29.37ms, 61MB) |
두번째 코드(map에 문자별로 가장 가까운 값을 저장하여 구하는 방식)
import java.lang.Math.min
class Solution {
fun solution(keymap: Array<String>, targets: Array<String>): IntArray {
var answer = IntArray(targets.size){-1}
var map = mutableMapOf<Char,Int>()
keymap.forEach {
val arr = it.toCharArray()
arr.forEach {
if(map.containsKey(it)){
map[it] = min(map[it]!!,arr.indexOf(it)+1)
} else {
map[it]= arr.indexOf(it)+1
}
}
}
for(i in 0 .. targets.size-1){
val arr = targets[i].toCharArray()
var count = 0
var flag = true
for(j in 0 .. arr.size-1){
if(map.containsKey(arr[j])){
count += map[arr[j]]!!
} else {
flag = false
break
}
}
if(flag) answer[i] = count
}
return answer
}
}
실행결과
테스트 1 〉 | 통과 (16.70ms, 62.7MB) |
테스트 2 〉 | 통과 (14.85ms, 63MB) |
테스트 3 〉 | 통과 (24.36ms, 62.7MB) |
테스트 4 〉 | 통과 (14.13ms, 63.1MB) |
테스트 5 〉 | 통과 (16.17ms, 63.2MB) |
테스트 6 〉 | 통과 (14.32ms, 63.1MB) |
테스트 7 〉 | 통과 (14.11ms, 63.6MB) |
테스트 8 〉 | 통과 (14.48ms, 62.9MB) |
테스트 9 〉 | 통과 (14.20ms, 63MB) |
테스트 10 〉 | 통과 (14.16ms, 62.7MB) |
테스트 11 〉 | 통과 (21.09ms, 63.3MB) |
테스트 12 〉 | 통과 (19.83ms, 63.3MB) |
테스트 13 〉 | 통과 (14.99ms, 61.7MB) |
테스트 14 〉 | 통과 (23.15ms, 63.1MB) |
테스트 15 〉 | 통과 (23.99ms, 64MB) |
테스트 16 〉 | 통과 (20.02ms, 64.5MB) |
테스트 17 〉 | 통과 (21.15ms, 63.4MB) |
테스트 18 〉 | 통과 (22.00ms, 64MB) |
테스트 19 〉 | 통과 (18.02ms, 64.7MB) |
테스트 20 〉 | 통과 (18.43ms, 63.4MB) |
테스트 21 〉 | 통과 (15.95ms, 63.8MB) |
테스트 22 〉 | 통과 (18.11ms, 63.6MB) |
테스트 23 〉 | 통과 (16.34ms, 64.7MB) |