Programmers

[프로그래머스][JS] 영어 끝말잇기 ✅

winter17 2023. 9. 5. 11:52

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

 

프로그래머스

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

programmers.co.kr

풀이 과정

function solution(n, words) {
    var answer = [0, 0];
    let turn = 1
    for (let i = 1; i < words.length; i++){
        // player변수는 현재 차례인 플레이어를 나타낸다. 
        // i는 몇 번째 단어인지 나타내는 인덱스, i % n는 각 플레이어에게 할당할 번호
        let player = i % n + 1 

        if (words[i - 1].slice(-1) !== words[i][0]){ // 끝말잇기 실패
            return answer = [player, turn]
        }
        if (words.findIndex(item => words[i] === item) !== i){ // 중복 체크
            // findIndex를 이용하여 현재 단어가 배열 words에서 이전에 등장한 경우를 찾고
            // 동일한 단어를 찾은 경우, 현재 단어의 인덱스와 i가 같지 않은 경우를 한 번 더 체크하여 반환
            return answer = [player, turn]
        }
        if (player === n){ // 다음 차례로 넘겨준다
            turn++
        }
    }
    return answer;
}
 
 
n = 3
words = ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]
 
i = 1, player = 2, turn = 1
i = 2, player = 3, turn = 1
i = 3, player = 1, turn = 1
i = 4, player = 2, turn = 2
i = 5, player = 3, turn = 2
i = 6, player = 1, turn = 2
i = 7, player = 2, turn = 3
i = 8, player = 3, turn = 3
i = 9, player = 1, turn = 3
i = 9일 때 tank인데 두 번째 if문에서 tank의 인덱스를 찾으면 8이고 i는 9인데 tank가 현재 차례에서 나온 것이 아니라 이전 차례에서 나온 것이기 때문에 [3, 3]을 반환한다.

 


리뷰

중복 체크하는 부분이 좀 헷갈렸다.