-
728x90
1. 문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12981
2. 제한 사항
- 끝말잇기에 참여하는 사람의 수 n은 2 이상 10 이하의 자연수입니다.
- words는 끝말잇기에 사용한 단어들이 순서대로 들어있는 배열이며, 길이는 n 이상 100 이하입니다.
- 단어의 길이는 2 이상 50 이하입니다.
- 모든 단어는 알파벳 소문자로만 이루어져 있습니다.
- 끝말잇기에 사용되는 단어의 뜻(의미)은 신경 쓰지 않으셔도 됩니다.
- 정답은 [ 번호, 차례 ] 형태로 return 해주세요.
- 만약 주어진 단어들로 탈락자가 생기지 않는다면, [0, 0]을 return 해주세요.
3. 입출력 예
n words result 3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0] 2 ["hello", "one", "even", "never", "now", "world", "draw"] [1,3] 4. 문제 풀이
주어진 words 배열을 반복문으로 검사해서 현재 단어의 끝 글자와 다음 단어의 시작 글자를 비교하기
이미 나온 단어 확인하는 방법 => 현재 단어를 배열에 저장해서 다음 단어가 포함되어있는지 확인
탈락자의 번호 계산하는 방법 => 현재 차례 i를 참여자 수 n으로 나눈 나머지에 1 더하기 (i가 6이고 n이 3일 때 6 % 3 = 0 ... 따라서 1)
몇번째 턴에 탈락하는지 계산하는 방법 => 현재 차례 i에 1을 더하고 참여자 수 n으로 나누기 (i가 6일 때 + 1 / n이 3일 때 = 7 / 3 ... 3)
function solution(n, words) { let arr = []; // 이미 사용한 단어 저장 let preArr = words[0] // 이전 단어 저장 arr.push(preArr) // 첫번 째 단어 arr 배열에 저장 for(let i = 1; i < words.length; i++) { let word = words[i] // 현재 단어 let last = preArr[preArr.length - 1] // 끝 글자 // 이미 나왔던 단어이거나, 끝단어가 다른경우 탈락 if(arr.includes(word) || last !== word[0]) { let num = (i % n) + 1; // 번호 계산 (배열 0부터 시작) let turn = Math.ceil((i + 1) / n) // 차례 계산 return [num, turn] } arr.push(word) // 현재 단어 배열에 추가 preArr = word // 현재 단어를 이전 단어로 저장 } // 탈락자가 없는 경우 return [0, 0]; }
'코딩테스트, 알고리즘' 카테고리의 다른 글
[백준] 1436번 영화감독 숌 (node.js) (0) 2023.10.23 [백준] 1316번 그룹 단어 체커 (node.js) (0) 2023.10.22 [프로그래머스] 올바른 괄호 (JS / Stack) (0) 2023.08.27 [프로그래머스] 이진 변환 반복하기 (JS) (0) 2023.08.26 [프로그래머스] 이상한 문자 만들기 (JS) (0) 2023.08.23 댓글