[알고리즘] Swift -프로그래머스 연습문제 #120956(옹알이(1))

2023. 4. 4. 21:59ALGORITHM/Swift

728x90
반응형

문제링크

 

 

 

분석

최대 한 번씩 사용해서 조합한 발음밖에 하지 못한다.

문자열 배열이 주어질 때 조카가 발음할 수 있는 단어의 개수를 구하는 문제

 

풀이 과정

각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장한다.

문자열 배열에 4가지 단어만의 조합으로 있어야 발음할 수 있는 단어로 취급한다.

let word = ["aya", "ye", "woo", "ma"]

for k in 0..<word.count {
    if babble.hasPrefix(word[k]) {
    
    ...
    }
}

반복문을 통해서 처음에 4가지 단어로 시작하는 지를 확인한다.

만약에 aaya의 경우는 aya을 포함하고있지만 시작하고 있지 않기 때문에 다음으로 넘어간다.

그리고 aya의 경우 aya로 시작하고 끝이 난다. 이 단어는 4가지 단어의 조합에 속하게 된다.

하지만 ayaye의 경우 aya로 시작하지만 ye라는 단어가 4가지 단어에 속하는 지 확인해야한다.

let nextString = babble.components(separatedBy: word[k])[1]
if nextString == "" {
    //문자열 더이상 보지않아도 된다.
    result += 1
    break
} else {
    //잘라진 문자열이 남아있어서 이제 더 봐야한다.
    dfs(babble: nextString)
}

nextString을 통해서 시작하고 다음 문자열을 확인한다.

"" 비어있는 문자열이라면 aya 경우처럼 뒤에 아무것도 속하지 않는 경우를 말한다. 이럴 경우에는 단어의 조합으로 이루어진 경우이기 때문에 개수를 세어준다.

만약 비어있지 않은 문자열이라면 재귀를 통해서 반복을 다시 해준다.

 

 

풀이

import Foundation

let word = ["aya", "ye", "woo", "ma"]
var result = 0

func checkWord(babble: String) {
    for k in 0..<word.count {
        if babble.hasPrefix(word[k]) {
            let nextString = babble.components(separatedBy: word[k])[1]
            if nextString == "" {
                //문자열 더이상 보지않아도 된다.
                result += 1
                break
            } else {
                //잘라진 문자열이 남아있어서 이제 더 봐야한다.
                checkWord(babble: nextString)
            }
        }
    }
}

func solution(_ babbling:[String]) -> Int {
    for i in 0..<babbling.count {
        checkWord(babble: babbling[i])
    }
    return result
}

 

결과

print(solution(["aya", "yee", "u", "maa", "wyeoo"]        ))

 

 


📂  정리

단어의 접두사 구하는 문제 같은 ?

 

문자열을 나누는 방법에 대해서 다시 공부할 수 있게 되었다.

 

 

 

 

 

 

728x90
반응형