TIL/kotlin 알고리즘

kotlin 프로그래머스 lv2 모음사전

crablo 2024. 3. 19. 09:48
728x90

해당 문제를 풀기위해 단어조합을 먼저 그려보았다.

다는 아니지만 나열해보면 아래와같다.

['A', 'AA', 'AAA', 'AAAA', 'AAAAA', 'AAAAE', 'AAAAI', 'AAAAO', 'AAAAU', 'AAAE', 'AAAEA', 'AAAEE', 'AAAEI', 
'AAAEO', 'AAAEU', 'AAAI', 'AAAIA', 'AAAIE', 'AAAII', 'AAAIO', 'AAAIU', 'AAAO', 'AAAOA', 'AAAOE', 'AAAOI', 
'AAAOO', 'AAAOU', 'AAAU', 'AAAUA', 'AAAUE', 'AAAUI', 'AAAUO', 'AAAUU', 'AAE', 'AAEA', 'AAEAA', 'AAEAE', 
'AAEAI', 'AAEAO', 'AAEAU', 'AAEE', 'AAEEA', 'AAEEE', 'AAEEI', 'AAEEO', 'AAEEU', 'AAEI', 'AAEIA', 'AAEIE', 'AAEII', 'AAEIO', 'AAEIU'...]

단어 조합이 너무 많이 나와서 쓰다가 말았다.

여기서 시간을 많이 잡은것 같다.

그래서 다른 블로그 글을 참조하게 되었는데, 단어의 패턴이 있다고 했다.

먼저 단어가 5자리일때, 

'AAAAA', 'AAAAE', 'AAAAI', 'AAAAO', 'AAAAU'  =>이렇게 순서가 1씩 커지고,

4자리일때

 'AAAA'  ..  'AAAE'  .. 'AAAI' ..  =>6씩 커진다

3자리일때

'AAA' ..  ' 'AAE' .. 31씩 커진다.(5*6+1)

각 자리마다 증가 패턴이 존재했고, 

그 다음은 31*5+1씩 증가한다.

https://jason-api.tistory.com/102

 

프로그래머스 모음사전 코틀린 위클리 챌린지 5주차

https://programmers.co.kr/learn/courses/30/lessons/84512 코딩테스트 연습 - 5주차 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서

jason-api.tistory.com

 

5를 곱하고 1을 더하는 이유는 5는 모음의 갯수이고 마지막 1을 더하는 이유는 해당 자리에 공백이 오는 경우 공백이 오는 경우가 딱 한 번이라서 더하는거라고 한다.

그래서 해당 패턴을 이용해서

각 자리수를 A = 0 /E = 1/ I =2 / O = 3/U =4

라고하면 각 자리수 별로 곱해서 더하면 정답이 나온다고한다.

나는 아래와 같이 코드를 작성했다.

class Solution {
    fun solution(word: String): Int {
        var answer = 0
        

       
        val array = intArrayOf(781, 156, 31, 6, 1) 
        
        
        val number = mapOf('A' to 0, 'E' to 1, 'I' to 2, 'O' to 3, 'U' to 4)

        for (i in word.indices) {//word = "AAAAE"
            answer += number[word[i]]!! * array[i] + 1
        }
        
        return answer
    }
}

728x90