프로그래머스 모음사전 Kotlin

DoDoBest

·

2024. 4. 25. 13:59

https://school.programmers.co.kr/learn/courses/30/lessons/84512

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

로직

각 자릿수는 A E, I, O, U, 없음 총 6개가 가능합니다.
사전에서 문자열 사이의 공백을 허용하지 않으므로 A(없음)A와 같은 것은 불가능합니다.

경우의 수
5번째 자릿수까지 고정 시키고 가능한 경우의 수 = 1
4번째 자릿수 ~ = 1 + 5
3번째 자릿수 ~ = 1 + 5*1 + 5*5*1
2번째 자릿수 ~ = 1 + 5*1 + 5*5*1 + 5*5*5*1
1번째 자릿수 ~ = 1 + 5*1 + 5*5*1 + 5*5*5*1 + 5*5*5*5*1

EIO ->
(A)XXXX -> 781
E -> 1
E(A,E)XXX -> 2*(156) = 312
EI -> 1
EI(A,E,I)XX -> 3*31 = 93
EIO -> 1

AAAAE
A -> 1
AA -> 1
AAA -> 1
AAAA -> 1
AAAA(A) -> 1
AAAAE -> 1

 

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

        for (idx in word.indices) {
            answer += (nums[word[idx]]!!-1) * possibleTable[idx+1]!!
            answer += 1 // word에 해당하는 값도 포함해야 함 ex) AAAAE 라면 A, AA, AAA, AAAA, AAAAE를 포함해야 함
        }

        return answer
    }

    companion object {
        private val nums = mapOf(
            'A' to 1,
            'E' to 2,
            'I' to 3,
            'O' to 4,
            'U' to 5,
        )
        private val possibleTable = mapOf(
            1 to 781, // 1 + 5*1 + 5*5*1 + 5*5*5*1 + 5*5*5*5*1
            2 to 156, // 1 + 5*1 + 5*5*1 + 5*5*5*1
            3 to 31, // 1 + 5*1 + 5*5*1
            4 to 6, // 1 + 5*1
            5 to 1, // 1
        )
    }
}