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

Junyoung Park·2022년 8월 10일
0

코딩테스트

목록 보기
540/631
post-thumbnail

1. 문제 설명

모음사전

2. 문제 분석

중복을 허용하는 순열을 DFS로 돌려서 다섯 개의 알파벳으로 가능한 모든 단어를 카운트를 통해 순서를 체크, 딕셔너리에 모두 기록했다. 이를 통해 주어진 단어가 해당 사전에 몇 번째에 기록되어 있는지 바로 해쉬했다.

  • 사전 앞 부분에 나와 있는, 즉 DFS에서 조합되는 단어라 하더라도 모든 사전을 다 만든 뒤에야 비로소 해쉬 가능하다는 단점이 있기 때문에 리팩토리을 해보자면, DFS에서 들어오는 알파벳 파라미터로 만드는 단어가 주어진 단어와 같다면 그 순간에 곧바로 재귀 호출을 종료하고 그 순서 카운트를 리턴할 수 있을 것이다... 그런데 그렇다면 매해 재귀가 돌 때마다 현재 재귀문으로 들어온 단어와 구해야 하는 단어를 비교해야 하는 문제가 생긴다. 무엇이 더 나은 풀이일까?

3. 나의 풀이

import Foundation

var wordDict = [String:Int]()
var count = 0

func solution(_ word:String) -> Int {
    DFS(wordLetters: [])
    return wordDict[word]!
}

func DFS(wordLetters: [String]) {
    let word = wordLetters.joined()
    wordDict[word] = count
    
    if wordLetters.count == 5 {
        return
    } else {
        let letters = ["A", "E", "I", "O", "U"]
        for letter in letters {
            count += 1
            DFS(wordLetters: wordLetters + [letter])
        }
    }
}
profile
JUST DO IT

0개의 댓글