반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "프로그래머스(Lv.2) - 영어 끝말잇기" 문제를 풀었습니다.
Github
문제 링크
풀이
이번 문제는 문자열 문제입니다.
매번 String을 Array로 바꿔서 사용하다보니 index로 참조하는 게 낯설더라고요.
그래서 이번에는 index도 사용해서 해보았습니다.
종료 조건은 두 가지 입니다.
1. 기존에 이미 단어인가
2. 앞 단어의 끝 글자와 현재 단어 첫 글자가 다른가
종료 조건이 명확하므로 문제는 쉽게 해결됩니다.
1번 조건은 Directory를 이용해 해결했습니다.
Array의 contains()가 O(n)의 시간복잡도를 가지는데
반면 Directory를 이용하면 O(1)의 시간복잡도로 체크할 수 있기 때문입니다.
물론 이 문제에서는 큰 상관 없지만요!
2번 조건은 startIndex와 endIndex를 이용했습니다.
주의해야 할 점은 endIndex가 문자열의 끝 단어가 아닌 \0을 가리킨다는 것입니다.
string.index(before: string.endIndex)
따라서 위 코드처럼 사용해야 합니다.
사실 이 문제에서는 first와 last를 사용하면 간편하게 해결할 수 있습니다.
전 굳이 index를 써서 풀어본거에요.
감사합니다!
전체 코드
import Foundation
func solution(_ n:Int, _ words:[String]) -> [Int] {
var answers: [String: Int] = [:]
var count = 0, person = 0
answers.updateValue(1, forKey: words[0])
for i in 1..<words.count {
// let startIndex = words[i].startIndex
// let endIndex = words[i-1].index(before: words[i-1].endIndex)
if answers[words[i]] == 1 || (words[i-1].last! != words[i].first!) {
return [i%n + 1, i/n + 1]
}
answers.updateValue(1, forKey: words[i])
}
return [0, 0]
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형