Coding Test

[프로그래머스] 가장 가까운 같은 글자 (Kotlin)

SeungYong.Lee 2023. 4. 10. 21:39
반응형

문제 링크

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()
}

 

반응형