https://school.programmers.co.kr/learn/courses/30/lessons/142086
풀이
더보기
생각하면 간단하다. 굳이 for문 이중으로 돌릴 필요 없이, 조건에서
'내 앞' 에 있던 값 중 가장 가까운 값을 찾아달라고 얘기 한다. 그래서 뒷 값 다 필요 없이 substring으로 현재 문자의 순서만큼 잘라버리고, 거기서 lastIndex로 가장 뒤쪽의 값의 인덱스를 찾는다.
만약 인덱스가 없다면 -1을 반환하고, 인덱스가 있다면 현재 위치와 비교해서 그 차이만큼 값을 넣으면 된다.
class Solution {
fun solution(s: String) : IntArray {
var answerList = mutableListOf<Int>()
for(i in s.indices) {
var stringS = s.substring(0, i)
var lastIndex = stringS.lastIndexOf(s[i])
answerList.add(if(lastIndex == -1){
-1
} else {
i - lastIndex
})
}
return answerList.toIntArray()
}
}
+) 이 부분 같은 경우는 인덱스가 확실히 정해져있는 문제이다. 따라서 배열을 써서 읽는 속도를 빠르게 하면 어떨까 생각..
class Solution {
fun solution(s: String) : IntArray {
var answerArray = IntArray(s.length)
for(i in s.indices) {
var stringS = s.substring(0, i)
var lastIndex = stringS.lastIndexOf(s[i])
answerArray[i] = if(lastIndex == -1){
-1
} else {
i - lastIndex
}
}
return answerArray
}
}
오, 확실히 개선된 속도가 보인다. 변환과정이 없어서 그런가 히트레이트가 높아서 그런가.
반응형
'스터디(programmers)' 카테고리의 다른 글
Java] 프로그래머스 lv.1, [1차] 비밀지도 (0) | 2023.03.08 |
---|---|
Kotlin] 프로그래머스 lv.1, 로또의 최고 순위와 최저 순위 (0) | 2023.03.01 |
Kotlin] 프로그래머스 lv.1, 명예의 전당 (1) (0) | 2023.02.15 |
Java] 프로그래머스 lv.1, 부족한 금액 계산하기 (0) | 2023.02.09 |
Kotlin] 프로그래머스 lv.1, 모의고사 (0) | 2023.02.08 |