[JS][Lv.2][영어 끝말잇기]

비슈·2023년 7월 1일
0

코딩테스트준비[JS]

목록 보기
6/11

영어 끝말잇기
문제 설명
1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다.

  1. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다.
  2. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다.
  3. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다.
  4. 이전에 등장했던 단어는 사용할 수 없습니다.
  5. 한 글자인 단어는 인정되지 않습니다.

문제 설명이 번잡한데, 요약하자면...

  1. 사람수 와 끝말잇기 나온 단어들이 배열로 주어짐
  2. 틀린사람있으면 그사람이 몇번째 사람인지 , 몇번째 차례에 틀렸는지 출력 ( 중복 or 끝말잇기실패)
  3. 잘 끝났으면 0,0 출력

그래서 핵심은 틀린게 [몇번째 사람인지, 몇번째 차례인지]를 알려면

index % n +1 이 걸린사람
index / n +1 이 차례 번호
해당 사실을 조금 고민하니까 알 수 있었다.

처음엔 중복되었을 때 처리를 못해줘서 고군분투하다가 풀이를 참고하여 다음과 같은 답변을 낼 수 있었다.

        let current = words[i]; //현재 단어
        if(words.indexOf(current) !== i ){
            return [i%n +1 ,  Math.floor(i/n)+1];
        }

indexOf를 사용하여 지금 인덱스가 출력되지않는다면 이전에 다른 사람이 이미 말했던 것이므로 바로 답을 출력해주었다.

function solution(n, words) {
    var answer = [0,0];
    
    for(let i = 1 ; i<words.length; i++){
        let current = words[i]; //현재 단어
        if(words.indexOf(current) !== i ){
            return [i%n +1 ,  Math.floor(i/n)+1];
        }
        let beforeLetter = words[i-1].slice(-1);
        let currentLetter = words[i].charAt(0);
        
        if(beforeLetter !== currentLetter){
            return [i%n +1 ,  Math.floor(i/n)+1];
        }
    }
    return answer;
}
profile
개발자 준비하기

0개의 댓글