(Swift) Programmers 영어 끝말잇기

SteadySlower·2022년 11월 16일
0

Coding Test

목록 보기
193/305

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

문제 풀이 아이디어

구현 문제입니다. 배열의 크기가 최대 100이므로 시간복잡도 걱정 없이 완전 탐색을 해도 관계 없습니다. 아래 3가지 케이스에 대해서 분기문으로 구현하면 됩니다.

  1. 앞에 이미 말한 단어를 말한 경우
  2. 앞에 말한 단어의 마지막 글자와 나중에 말한 단어의 첫 글자가 다른 경우
  3. 1, 2의 경우가 아닌 경우 (통과)

그리고 모든 단어를 순회해도 1, 2번 케이스가 걸리지 않으면 [0, 0]을 반환합니다.

마지막으로 틀린 사람은 n으로 나머지로, 틀린 순서는 n으로 나눈 몫으로 계산하면 됩니다.

코드

func solution(_ n:Int, _ words:[String]) -> [Int] {
    
    var set = Set<String>()
    
    for i in 0..<words.count {
		// 1. 앞에서 나온 단어 말한 경우
        if set.contains(words[i]) {
            return [i % n + 1, i / n + 1]
		// 2. 앞에 말한 단어의 마지막 글자와 나중에 말한 단어의 첫 글자가 다른 경우
        } else if i > 0 && words[i - 1].last! != words[i].first! {
            return [i % n + 1, i / n + 1]
		// 3. 1, 2의 경우가 아닌 경우
        } else {
            set.insert(words[i])
        }
    }
    
	// 모든 단어를 순회한 경우
    return [0, 0]
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글