👨🏻‍💻iOS 공부/Swift_알고리즘 풀이

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

728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/12981?language=swift# 

 

코딩테스트 연습 - 영어 끝말잇기

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]

programmers.co.kr

 

끝말잇기의 규칙을 상기하며 풀이해보면 된다. 

 

1. 앞단어의 뒷글자로 시작되는 단어를 말할 것

2. 중복되는 단어를 말하지 말 것

 

두 가지 조건을 지키지 못한 경우 player의 번호와 몇 round인지 구해서 반환해주면 된다!

player의 번호를 구할 때는 %를 사용해서 나머지로 구할 수 있고, 몇 번째 판인지는 을 통해 알아낼 수 있다. 

 

import Foundation

func solution(_ n:Int, _ words:[String]) -> [Int] {
    // 첫 단어
    var unique = [words[0]]
    // 결과 
    var ans = [Int]()
    
    // 첫 번째부터 돌기 
    for i in 1..<words.count {
        // 중복된 단어가 아니고, 앞단어의 뒷글자 == 현재 단어 앞글자일 경우
        if !unique.contains(words[i]) && words[i-1].last! == words[i].first! {
            // 추가
            unique.append(words[i])
        } else {
            // 아닐 경우 번호, 차례 순서대로 저장
            ans.append(i%n + 1) 
            ans.append(i/n + 1)
            break
        }
    }
    // empty일 경우 [0,0]
    return ans == [] ? [0,0] : ans
}​

 

몫과 나머지를 적절하게 사용하여 풀이해주면 된다. 

Int형일 때는 소수점이 안나오기에 이 점을 고려하여 +1 하여 여러 케이스들을 고려해준다!

 

끄읕

728x90
반응형