TIL/kotlin 알고리즘

kotlin 프로그래머스 lv1 둘만의 암호

crablo 2024. 2. 19. 15:23
728x90

 

문제를 보고서 skip문자열을 따로 처리하려고해서 시간이 오래걸렸다.

  val charMap = ('a'..'z')
        .filter { it !in skip }
        .associateWith { char ->
            val newIndex = (char - 'a' + index) % 26
            ('a'.toInt() + if (newIndex < 0) newIndex + 26 else newIndex).toChar()
        }

 

이렇게 코드를 작성했었는데 생각해보니 a = h로 나타나지질 않았다.

그 원인이 생각해보니.. 이미 skip문자열에서 걸러진 알파벳 길이 26까지를 포함해서

나누다보니 계속해서 원하지 않는 결과가 나왔던것이다.

그래서 아예 처음부터 skip안에있는 문자열을 제거 후 새로운 변수 newAlphabet 에 담아 주었다.

val newAlphabet = ('a'..'z')
        .filter { it !in skip }

그 후 현재 인덱스를 찾아낸후 주어진 index를 더해서 새로운 인덱스 변수에 담아줬다.

 val result = StringBuilder()
    
   for(char in s){
       if(char in newAlphabet){
           val currendIdx = newAlphabet.indexOf(char)
           val newIdx = (currendIdx + index) % newAlphabet.size
           result.append(newAlphabet[newIdx])
       }else{
           result.append(char)
       }
   }

 

다행히도 결과는 정상적으로 나왔다.

 

728x90