Moon_Dev_Blog :)

[프로그래머스] 가장 가까운 같은 글자 본문

IT/알고리즘풀이

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

돌베기 2025. 2. 24. 12:53

문제설명

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

  • b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
  • n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
  • a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.

따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2] 됩니다.

class Solution {
    fun solution(s: String): IntArray {
        var answer = mutableListOf<Int>()
        var temp = ""
        for(c in s.indices) {
            
            if(!temp.contains(s[c])) {
                temp += s[c]
                answer.add(-1)
            } else {  
                val findIndex = temp.toCharArray().lastIndexOf(s[c])
                temp += s[c]          
                answer.add(c-findIndex)
            }                       
        } 
        
        return answer.toIntArray()
    }
}

풀이설명

// 1. s의 길이만큼 반복을 진행한다.
// 2. temp에 문자 하나씩 담는다.
// 3. temp: s[c]가 존재하는지 체크 없다면, answer에 -1을 넣는다.
// 4. temp: s[c]가 존재하는지 체크 있다면, temp에서 c의 값이 중복일 수 있으니 가장 마지막에 있는 값의 lastIndex를 가져온다.
// 5. (c(현재 반복진행중인 인덱스) - findIndex 의 값이 가까운 같은 글자의 거리수이며, 해당 값을 answer에 담는다.

Comments