Algorithm

[Programmers] LV2 영어끝말잇기

반응형

문제설명

영어단어를 통한 끝말잇기를 진행하는 중입니다.

사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요.

탈락조건

  1. 이미 나온 단어를 또 다시 이야기한 경우
  2. 이전 단어의 끝자리 알파벳과 지금 말한 단어의 첫번째 알파벳이 일치하지 않은 경우

풀이

  1. 주어진 words의 각 단어를 순회한다.
  2. 이 때 틀린사람의 번호와 그 사람이 몇번째 기회에서 틀렸는지 구하기 위해 index를 활용한다.
  3. 조건문을 통해 이전단어가 존재하면서 이전 단어의 마지막 알파벳과 현재단어의 첫번째 알파벳이 같지 않을 때와
  4. 이미 나온 언어들이 들어가있는 speachedWords가 현재단어를 포함하고 있다면
  5. userNum, userTurn을 구해 배열에 담아 return 한다.
  6. 모든 조건을 다 통과하여 탈락자가 발생하지 않는다면 [0, 0]을 return 받는다.

새롭게 시도한 부분

entries를 이용하여 index를 key값으로 가지는 객체를 return 받는다는 개념을 이용하여
틀린사람의 번호와 몇번째 기회인지를 구하는데 사용해보았음

아쉬운 부분

조건문에 !!currentWord를 통해서 currentWord가 비어있는지를 확인을 해야한다는 부분이
처음에 실행할 때만 유의미한 코드라고 생각함

코드

function solution(n, words) {
  const speachedWords = [];
  let currentWord = '';

  for(let [index, word] of words.entries()) {
      if ((!!currentWord && currentWord.substr(-1) !== word.substr(0, 1)) || speachedWords.includes(word)) {
          const userNum = (index + 1) % n || n;
          const userTurn = Math.ceil((index + 1) / n);

          return [userNum, userTurn]
      }
      speachedWords.push(word)
      currentWord = word;
  }
  return [0, 0];
}

console.log(solution(3, ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]))
반응형