알고리즘 문제 풀이

[Swift] 프로그래머스 LV2. 모음사전

lgvv 2022. 4. 1. 23:49

프로그래머스 LV2. 모음사전

 

✅ 이 문제를 푸는데 고등학교 시절에 확률과 통계 배웠던 기억이 팍팍 났음.

근데 뭔가 바로 안풀렸는데, 이걸 또 종이에 손으로 하다 보니까 패턴을 금방 발견할 수 있었음.

 

🟠 패턴

1. A

2. AA

3. AAA

4. AAAA

5. AAAAA

6. AAAAE

7. AAAAI

8. AAAAO

9. AAAAU

10. AAAE

 

_ _ _ _ _ 이렇게 다섯자리가 있다고 가정하면 맨 끝자리의 변화는 1씩 카운트 된다.

그렇다면 4번째 자리는 어떻게 일반화 할까?

5번째 자리에 올 수 있는 경우의 수가 5가지이므로 거기에 +1을 하면 된다. 따라서

문자의 index * 6이다.

그럼 3번째 자리는? 4,5 번 자리에 각각 5, 5개씩 올 수 있으므로 25개, 4번자리를 스킵하고 5번자리만 있을 수 있으므로 5가지 + 1

따라서 index * 31이다.

 

이걸 코드로 구현하면

아래와 같이 표현 가능하다.

   func solution(_ word:String) -> Int {
        let vowel = ["A", "E", "I", "O", "U"]
        let value = [781, 156, 31, 6, 1]
        var sum = 0
        
        for item in word.enumerated() {
            let index = vowel.firstIndex(of: "\(item.element)").map { Int($0) }
            let count = (index! * value[item.offset]) + 1
            sum += count
        }
//        print(sum)
        return sum
    }