Algorithm Problem Solving/Programmers

[프로그래머스] Summer/Winter Coding(~2018) 영어 끝말잇기 with Swift

코코자장자장 2022. 2. 4. 18:11

안녕하세요. 오늘은 프로그래머스 영어 끝말잇기 문제를 풀어보겠습니다.

 

 

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

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

 

영어 끝말잇기 문제는 딕셔너리의 활용으로 간단하게 문제를 해결할 수 있습니다.

 

빈 딕셔너리와 이전 단어를 저장할 수 있는 String을 이용해 봅시다!

for word in words {
    count += 1
    
    if dictionary[word] != nil {
        isFail = true
        break
    }
    dictionary[word] = true
    
    if lastWord == nil {
        lastWord = word
        continue
    }
    
    if lastWord!.last != word.first {
        print(lastWord!.last)
        print(word.first)
        isFail = true
        break
    }
    
    lastWord = word
}

 

dictionary가 비어있지 않으면 중복이고 앞뒤가 다르면 끝말잇기에 실패하므로 해당경우에 break를 걸어줍니다.

 

위의 두 경우가 아니라면 0, 0을 return 해줍니다.

 

fail일 경우에는 번호와 차례를 각각 return 해주면 문제가 해결됩니다.

import Foundation

func solution(_ n:Int, _ words:[String]) -> [Int] {
    var lastWord:String?
    var count = 0
    var isFail = false
    var dictionary:[String:Bool] = [String:Bool]()
	for word in words {
        count += 1
        
        if dictionary[word] != nil {
            isFail = true
            break
        }
        dictionary[word] = true
        
        if lastWord == nil {
            lastWord = word
            continue
        }
        
        if lastWord!.last != word.first {
            print(lastWord!.last)
            print(word.first)
            isFail = true
            break
        }
        
        lastWord = word
	}
    
    if isFail == false {
        return [0,0]
    }
    else {
        return [((count - 1) % n) + 1, ((count - 1) / n) + 1]
    }
    return []
}

 

오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요.

 

좋은 하루 되세요!