프로그래머스 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
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[Swift] 프로그래머스 LV2. 땅따먹기 (0) | 2022.04.01 |
---|---|
[Swift] 프로그래머스 LV2. JadenCase 문자열 만들기 (0) | 2022.04.01 |
[Swift] 프로그래머스 LV2. 튜플 (0) | 2022.04.01 |
[Swift] 프로그래머스 LV. 2 N개의 최소공배수 (0) | 2022.04.01 |
[Swift] 프로그래머스 LV2. 삼각 달팽이 (0) | 2022.04.01 |