본문 바로가기
Swift랑 친해지기/programmers 풀기

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

by 데브킹덕 2022. 9. 28.

https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

내풀이방법

wordStack - words 배열의 요소를 차곡차곡 받을 문자열 배열

 

1. for in  반복문으로 words의 모든 요소에 접근할 수 있도록함

반복문이 돌때마다 접근하는 words요소를 담을 word  변수 생성 

 

2.  wordStack에 매번 반복문이 끝날때마다 word를 추가하도록함

wordStack.append(word)

3. wordStack이 .contains()메서드를 이용하여 word를 가지고 있을경우에 [i%n +1, i/n +1]를 리턴하도록함

 

i%n +1는 인덱스를 n으로 나눌경우 나머지가 n-1이기떄문에 +1을 해줌

i/n +1는 처음 시작할경우가 1이기때문에 인덱스를 n으로 나눈 몫에 +1을 해주어야함

 

4. 전에 단어의 마지막 알파벳과 현재 단어의 첫번쨰 알파벳을 비교해서 같을 경우를 따질때

wordStack의 갯수가 0개가 아니여야함 

if wordStack.count != 0{
}

word의 전에 단어인 wordStack[i-1]의 값을 가진 pastWord 변수를 생성

removeLast(),와 removeFirst() 메서드를 이용할 것임

 

 

removeLast로 tank라는 글자의 마지막 알파벳을 지우면 다음과 같지만

 

removeLast() 에 접근하면 k가 출력되는 것을 볼 수 있음 First도 마찬가지 개념임 

 

pastWord.removeLast() 마지막 문자와, word의 첫번째 문자가 같지 않으면 

마찬가지로 [i%n +1, i/n +1]를 리턴하도록함

 

 

5. if 조건문이 실행되지 않으면 탈락자가 생기지 않는다는 것과 마찬가지기 떄문에 return [0,0] 으로 반환하면 됨 

 

import Foundation

func solution(_ n:Int, _ words:[String]) -> [Int] {
    var wordStack: [String] = []
    for i in 0..<words.count{
        var word = words[i]
        
        if wordStack.contains(words[i]){
            return [i%n + 1, i/n + 1]
        }
        if wordStack.count != 0{
            var pastWord = wordStack[wordStack.count - 1]
            if pastWord.removeLast() != word.removeFirst(){
                return [i%n + 1, i/n + 1]
            }
        }
        wordStack.append(words[i])
        
    }
    return [0,0]
}

 

 

 

 

 

기본 3개의 예제는 통과하지만 나머지 문제들을 통과 못해서 리셋함 ..

첫번쨰 try한 코드 
import Foundation

func solution(_ n:Int, _ words:[String]) -> [Int] {
    var stackWords = [String]()
    var result = [Int]()
    
    
    for i in 0..<words.count - 1{
        let mapWords = words[i].map({String($0)})
        let NextmapWords = words[i+1].map({String($0)})
        
        
        if mapWords[mapWords.count-1] != NextmapWords[0]{
            if (i+2) % n == 0{
                result.append(n)
                result.append((i+2) / n)
            }else{
                result.append((i+2) % n)
                result.append((((i+2) / n) + 1))
            }
        }
        
    }
    
    for i in 0..<words.count{
        if stackWords.contains(words[i]){
            if (i+1) % n == 0{
                result.append(n)
                result.append((i+1) / n)
            }else{
                result.append((i+1) % n)
                result.append((((i+1) / n) + 1))
            }
            break
        }else{
            stackWords.append(words[i])
        }
    }
    
    if result.count == 0{
        return [0,0]
    }
    
    return result
}



solution(2,["hello", "one", "even", "never", "now", "world", "draw"])