본문 바로가기
Algorithm

SwiftUI: 영어 끝말잇기

by songmoro 2024. 3. 18.
728x90

프로그래머스 영어 끝말잇기

 

주어진 인원 수와 배열을 통해 끝말잇기의 결과를 반환하는 문제

 

현재 턴을 계속 계산하면서, 스택과 Set을 통해 이번 턴의 통과 여부를 결정하도록 구현

 

func solution(_ n:Int, _ words:[String]) -> [Int] {
    var turn = [0, 0]
    var words = words
    var stack = [Character]()
    var duplication = Set<String>()
    
    while !words.isEmpty {
        let word = words.removeFirst()
        
        turn[0] = turn[0].quotientAndRemainder(dividingBy: n).remainder + 1
        turn[1] += turn[0] == 1 ? 1 : 0
        
        if stack.last == word.first || stack.isEmpty, duplication.insert(word).inserted {
            stack.append(word.last!)
        }
        else {
            return turn
        }
    }
    
    return [0, 0]
}

// i
// 0 1 2 3 4 5 6 7 8

// turn 0
// 1 2 3 1 2 3 1 2 3

// turn 1
// 1 1 1 2 2 2 3 3 3

//    n    words    result
//    3    ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]    [3,3]
//    5    ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"]    [0,0]
//    2    ["hello", "one", "even", "never", "now", "world", "draw"]    [1,3]
728x90

'Algorithm' 카테고리의 다른 글

SwiftUI: 연속 부분 수열 합의 개수  (0) 2024.03.18
SwiftUI: 귤 고르기  (0) 2024.03.18
SwiftUI: 영어 끝말잇기  (0) 2024.03.18
SwiftUI: 카펫  (0) 2024.03.17
SwiftUI: 짝지어 제거하기  (0) 2024.03.16