문제설명
총 n명의 사람이 영어 끝말잇기를 하고 있다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어을 말하고 마지막 사람이 단어를 말한 다음에는 다시 1번부터 반복하는 식으로 진행된다.
앞사람이 단어를 말하면 그 다음 순서의 사람은 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야하며 이전에 등장했던 던어는 사용할 수 없고 한 글자인 단어도 인정되지 않는다.
게임을 진행하고 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 며 번째 차례에 탈락하는지를 구하면 되는 문제이다.
더보기
※제한사항
- n은 2 이상 10 이하의 자연수이다.
- 배열로 주어진 words는 n 이상 100 이하이다.
- 단어의 길이는 2 이상 50 이하이다.
- 모든 단어는 알파벳 소문자로만 이루어져 있다.
- 정답은 [ 번호, 차례 ] 형태로 리턴
- 탈락자가 없다면 [ 0 , 0] 리턴
풀이
단순 반복으로 간단하게 해결할 수 있다. word의 길이만큼 반복문을 돌리면서 js의 charAt과 indexOf를 활용하여 앞사람이 말한 마지막 글자와 다음 사람이 말한 앞 글자를 비교하고 단어가 앞서 나왔던 단어인지 확인해주는 과정을 가지고 이에 해당된다면 [(i%n)+1, Math.floor(i/n)+1] 이런 식으로 해당 사람의 순서를 구해준 값을 반환해주면 된다. 이에 해당되지 않는 경우 [0,0]를 리턴하게 해주면 문제가 해결된다.
아래 코드는 풀이에 사용한 코드이다.
function solution(n, words) {
// words의 있는 값을 확인하기위해 words.length만큼 반복
for(let i=1; i<words.length; i++){
// 전 사람의 마지막 글자와 이번 차례 사람의 첫글자 비교
if(words[i-1].charAt(words[i-1].length-1) !== words[i].charAt(0)){
return [(i%n)+1, Math.floor(i/n)+1]
}
// words의 인덱스를 찾아 현제 i값과 다르면 이전에 나왔던 글자이므로 탈락자 반환
if(words.indexOf(words[i]) !== i) {
return [(i%n)+1, Math.floor(i/n)+1]
}
}
// 탈락자가 없으면 [0,0] 반환
return [0,0];
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.02 연습문제 예상 대진표 (JavaScript) (0) | 2024.04.23 |
---|---|
[프로그래머스] Lv.02 연습문제 오픈채팅방 (JavaScript) (0) | 2024.04.20 |
[프로그래머스] Lv.02 연습문제 하노이의 탑 (JavaScript) (0) | 2024.04.15 |
[프로그래머스] Lv01 연습문제 약수의 개수와 덧셈 (JavaScript) (0) | 2024.04.14 |
[프로그래머스] Lv.01 연습문제 최소직사각형 (JavaScript) (0) | 2024.04.12 |