반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
푸는데 시간이 많이 걸렸다.. Out of Index 에러로 인해..
처음 나온 Char에 대해서는 무조건 -1을 반영하고,
이후 중복으로 나온 Char에 대해서는 중복으로 나온 인덱스에서 그전에 나온 같은 Char에 대한 인덱스 값을 차감해 주면 된다.
withIndex()가 존재한다는 것을 제대로 인지 못하고 있었다.
fun mostNearWord(s: String): IntArray {
// val answer = IntArray(s.length)
//
// for (i in s.indices) {
// if (i != 0) {
// val idx: Int = s.substring(0, i)
// .lastIndexOf(s.charAt(i))
// if (idx != -1) {
// answer[i] = i - idx
// } else {
// answer[i] = idx
// }
// } else {
// answer[i] = -1
// }
// }
// return answer
// val res = mutableListOf<Int>()
// repeat(s.length) {
// res.add(0)
// }
// //맨 처음 글자는 무조건 최초 글자이므로 -1
// res[0] = -1
// for (i in 1..s.length) {
// //인덱스를 순회하며 i-1을 기준으로 값이 중복되는지 여부를 확인
// val tmp = s.lastIndexOf(s.substring(i, i + 1), i - 1)
// if (tmp != -1) {
// //기존 위치의 인덱에서 존재하는 중복 인덱스 위치를 차감
// res[i] = i - tmp
// } else {
// res[i] = tmp
// }
// }
// return res.toIntArray()
val charMap = mutableMapOf<Char, Int>()
return s.withIndex().map { (i, char) ->
val check = charMap[char]
charMap[char] = i
if (check == null) -1 else i - check
}.toIntArray()
}
반응형