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]을 반환한다.
리뷰
중복 체크하는 부분이 좀 헷갈렸다.