[프로그래머스][JS]영어 끝말잇기

Kyle·2020년 12월 22일
0

problem solving

목록 보기
16/36
post-custom-banner

문제

문제: https://programmers.co.kr/learn/courses/30/lessons/12981

영어로 하는 끝말잇기게임

틀린다면 -> [틀린사람,틀린사람이 말한 횟수]를 출력
정확한 끝말잇기 -> [0,0] 출력

해결방법

  • answer에 단어를 push 하면서 새로 들어온 단어를 비교한다.
  1. answer가 비어있으면 answer.push(word[i])
  2. 그렇지 않다면,
    2-1.answer의 마지막 단어 or 바로 직전의 단어 (word[i-1])의 끝의 알파벳과 현재 단어(word[i])의 앞 알파벳을 비교한다.
    2-2. 이전에 말한적이 있는지 answer.includes(word[i])로 비교한다.
    2-3. 위의 두개 중 하나라도 false면 정답을 출력한다.
  3. for문을 정상적으로 통과했으면 [0,0]을 반환한다.

code

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

    for(let i=0; i<words.length; i++){
        if(!answer.length) answer.push(words[i])
        else{
            if(checkChar(words[i-1],words[i])&&checkOverlap(answer,words[i])){
                answer.push(words[i])
            }else{
                const who = (i+1)%n === 0 ? n : (i+1)%n
                const turn = Math.ceil((i+1)/n)
                return([who,turn])
            }
        }
    }
    
    return [0,0];
}
function checkChar(str1,str2){
    return str1[str1.length-1]===str2[0]
}
function checkOverlap(arr,str){
    return !arr.includes(str)
}

update

시간이 지나면서 더 간결하게 해결

function solution(n, words) {
  const check = {};
  let person = 1;
  for (let i = 0; i < words.length; i++) {
    if ((i !== 0 && words[i - 1].slice(-1) !== words[i][0]) || check[words[i]]) {
      return [person, Math.ceil((i + 1) / n)];
    }
    person = person + 1 > n ? 1 : person + 1;
    check[words[i]] = true;
  }

  return [0, 0];
}
profile
Kyle 발전기
post-custom-banner

0개의 댓글