알고리즘

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

Thor_yeom 2023. 7. 23. 17:11

영어 끝말잇기를 풀던 중 삽질한 경험을 풀고자 한다.

 

처음 풀었던 내용 

import Foundation


func solution(_ n:Int, _ words:[String]) -> [Int] {
   
    var wordDB: [String] = []
    
    for i in 0..<words.count {
        
        var word = words[i]
        
        if word.count < 1 {
            print("단어가 1개 이하",i)
            return [i%n + 1, i/n + 1]
        }
        
        if wordDB.contains(words[i]) {
            print("포함되어 있을때",i)
           return [i%n + 1, i/n + 1]
        }
        
        if wordDB.count != 0 {
            var lastWord = wordDB[wordDB.count - 1]
            if lastWord.removeLast() != word.removeFirst(){
                return [i%n + 1, i/n + 1]
            }
        }
        
        wordDB.append(word)
    }
    
   
    return [0,0]
}


let result = solution(2, ["hello", "one", "even", "never", "now", "world", "draw"])
print(result)

 

그렇지만 마지막 부분에서 테스트 오류가 생겼다...

분명 코드 실행 할때는 통과 했었는데...

 

어떤 부분에서 오류가 생기는 걸까 생각하다

하나씩 담기는 배열부분에서 아무래도 오류가 생기는거 같다는 느낌이 들었다.

 

그래서 print로 찍어보니

wordDB.append(word)
print("wordDB",wordDB)


// wordDB ["hello", "ne", "ven", "ever"]

 

에엥?? 이게 뭐지...ㅋㅋㅋㅋㅋㅋ

word가 변해서 담기는데... 어디서 부터 변하는 것일까? 해서 

무작정 print를 찍어봤다.

import Foundation


func solution(_ n:Int, _ words:[String]) -> [Int] {
   
    var wordDB: [String] = []
    
    for i in 0..<words.count {
        
        var word = words[i]
        
        print("word1",word)
        
        if word.count < 1 {
            print("단어가 1개 이하",i)
            return [i%n + 1, i/n + 1]
        }
        
        if wordDB.contains(words[i]) {
            print("포함되어 있을때",i)
           return [i%n + 1, i/n + 1]
        }
        
        if wordDB.count != 0 {
            print("word2",word)
            var lastWord = wordDB[wordDB.count - 1]
            print("word3",word)
            if lastWord.removeLast() != word.removeFirst(){
                print("word4",word)
                return [i%n + 1, i/n + 1]
            }
            // 이 시점에서 조건문을 타서 word는 변한다.
            print("word5",word)
        }
        
        wordDB.append(word)
        print("wordDB",wordDB)
    }
    
   
    return [0,0]
}


let result = solution(2, ["hello", "one", "even", "never", "now", "world", "draw"])
print(result)

 
/*
word1 hello
wordDB ["hello"]
word1 one
word2 one
word3 one
word5 ne
wordDB ["hello", "ne"]
word1 even
word2 even
word3 even
word5 ven
wordDB ["hello", "ne", "ven"]
word1 never
word2 never
word3 never
word5 ever
wordDB ["hello", "ne", "ven", "ever"]
word1 now
word2 now
word3 now
word4 ow
[1, 3]
*/

 

 

...  이부분을 타면서 word가 변하는 것이었다...

아니 이걸 왜 생각 못 했을까... ㅠ

if wordDB.count != 0 { ~ }

 

 

해결방법은 너무 easy 했다...

 

바로... wordDB에 담길때 words[i]로 바꿔주면 끝..!

 wordDB.append(words[i])

 

 

완성 코드

import Foundation


func solution(_ n:Int, _ words:[String]) -> [Int] {
   
    var wordDB: [String] = []
    
    for i in 0..<words.count {
        
        var word = words[i]
        
        if word.count < 1 {
            print("단어가 1개 이하",i)
            return [i%n + 1, i/n + 1]
        }
        
        if wordDB.contains(words[i]) {
            print("포함되어 있을때",i)
           return [i%n + 1, i/n + 1]
        }
        
        if wordDB.count != 0 {
            var lastWord = wordDB[wordDB.count - 1]
            if lastWord.removeLast() != word.removeFirst(){
                return [i%n + 1, i/n + 1]
            }
            // 이 시점에서 조건문을 타서 word는 변한다.
        }
        
        wordDB.append(words[i])

    }
    
   
    return [0,0]
}