[알고리즘] 프로그래머스 - 영어끝말잇기

do_large·2020년 10월 15일
0

알고리즘

목록 보기
6/50
post-thumbnail

문제설명

문제내용
1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다.
사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때,
가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요.

제한사항
1. 끝말잇기에 참여하는 사람의 수 n은 2 이상 10 이하의 자연수입니다.
2. words는 끝말잇기에 사용한 단어들이 순서대로 들어있는 배열이며, 길이는 n 이상 100 이하입니다.
3. 단어의 길이는 2 이상 50 이하입니다.
4. 모든 단어는 알파벳 소문자로만 이루어져 있습니다.
5. 정답은 [ 번호, 차례 ] 형태로 return 해주세요.
6. 만약 주어진 단어들로 탈락자가 생기지 않는다면, [0, 0]을 return 해주세요.


function solution(n, words) {
    var answer = []; // return할 값을 넣을 배열
    var countRound=1, now=1; // 몇회 순서가 반복되었는지, 지금 몇번째 단어를 말하고 있는지
    var wrong=false; // 앞의 단어의 끝글자로시작하는단어를 말하지 않거나, 반복되는 단어를 말하면 true로 바꿈
    var alreadyUsed = []; // 앞의 순서에서 말한단어를 담을 배열

    alreadyUsed.push(words[0]);
    
    for(let i = 1; i < words.length;i++){
        now++;
        
      //이미 사용된단어를 말하거나, 앞단어와 이어지지않은 단어를 말하면 종료
        if(alreadyUsed.includes(words[i]) || words[i-1].charAt(words[i-1].length-1)!==words[i].charAt(0)){
            wrong=true;
            break;
        }
        
        alreadyUsed.push(words[i]);
        if(now % n === 0){
            //한바퀴 돌았음
            countRound++;
        }
    }
    
    if(wrong){
      // 누군가 실수했을때
        answer[0] = now%n === 0 ? n : parseInt(now%n);
        answer[1] = countRound;
    }else{
      // 참가자모두 실수하지않고 끝말잇기가 끝났을때
        answer[0] = 0;
        answer[1] = 0;
    }
    
    return answer;
}

0개의 댓글