STUDY/Algorithm

[프로그래머스_자바스크립트] Lv.2 영어 끝말잇기

ez1n 2023. 1. 13. 10:30

 

<Javascript_ 영어 끝말잇기>

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


 

<STUDY>

 

 

📢 문제 📢

 

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

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

사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때,

가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요.

 

제한 사항

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

 

❗ 아이디어

 

  •  앞에서 이야기한 단어들을 배열에 넣어두고 중복이 있는지 찾는다.

 


 

<전체 코드>

 

 

function solution(n, words) {
  let answer = [];
  let arr = [];

  arr.push(words[0]);
  for (let i = 1; i < words.length; i++) {
    const word = words[i];
    const str = arr[arr.length - 1];
    if (arr.includes(word) || str[str.length - 1] !== word[0]) return [i % n + 1, parseInt(i / n) + 1];
    arr.push(word);
  }

  return [0, 0];
}

 


 

<코드 설명>

 

for (let i = 1; i < words.length; i++) {
    const word = words[i];
    const str = arr[arr.length - 1];
    if (arr.includes(word) || str[str.length - 1] !== word[0]) return [i % n + 1, parseInt(i / n) + 1];
    arr.push(word);
  }

 

  • word : 현재 단어
  • str : 이전 단어
  • 현재 단어가 중복이거나 현재 단어의 첫 문자와 이전 단어의 끝 문자가 다른 경우 번호와 차례를  출력한다.

 


 

다른 분들의 풀이를 보던 중 reduce()를 이용한 풀이를 보았다.

 

function solution(n, words) {
  let answer = 0;
  words.reduce((prev, now, idx) => {
    answer = answer || ((words.slice(0, idx).indexOf(now) !== -1 || prev !== now[0]) ? idx : answer);
    return now[now.length-1];
  }, "")
    
  return answer ? [answer%n+1, Math.floor(answer/n)+1] : [0,0];
}

 

더 공부해야겠다..

 

 


 

🔆프로그래머스 Lv2. 영어 끝말잇기🔆

 

👉ez1n github 구경하기👈

 

 

ez1n - Overview

Front-End Developer. ez1n has 16 repositories available. Follow their code on GitHub.

github.com