코딩 테스트/프로그래머스

옹알이 (2) (in Swift) | 프로그래머스 코딩테스트

Dev.Andy 2024. 3. 13. 23:51

목차

     

    머리말

    익숙하지만 못 보던 옹알이 문제가 두 번째가 나왔다. 정답률도 생각보다 낮아서 의아했다.

    링크

    코딩 테스트 연습 - 옹알이 (2)

     

    본문

    풀이

    아이디어

    - 문제를 보고 스택을 활용하면 좋을 것 같다는 예상이 들었다.

    - 주어진 단어의 맨오른쪽부터 왼쪽으로 차례로 스택 (타입은 문자열) 으로 담아서 매번 해당 스택이 말할 수 있는 단어인지를 판단했다.

    (+) 자료구조 스택

    스택(Stack)에 관한 블로그는 이곳에 있다. 궁금하다면 여기를 참고하자.

    코드

    import Foundation
    
    struct Nephew {
        
        let words = ["aya", "ye", "woo", "ma"]
        
        func isWordSpeakble(_ word: String) -> Int {
            
            var word = word.map { String($0) }
            var stack = ""
            var temp = ""
            
            let wordIndex = word.count - 1
            let minStackCount = 2
            
            for i in 0...wordIndex {
                let j = wordIndex - i
                
                stack = word[j] + stack
                
                guard stack.count >= minStackCount else { continue }
                guard temp != stack else { break }
                
                for word in words {
                    if word == stack {
                        temp = word
                        stack = ""
                    }
                }
            }
            
            return stack == "" ? 1 : 0
        }
    }
    
    func solution(_ babbling: [String]) -> Int {
        
        let nephew = Nephew()
        var result = 0
        
        for word in babbling {
            result += nephew.isWordSpeakble(word)
        }
        
        return result
    }