[프로그래머스 레벨투] 영어 끝말잇기 🇬🇧

9rganizedChaos·2021년 10월 16일
0
post-thumbnail

🔽 문제 링크

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

✍🏼 나의 수도 코드

  1) 탈락자의 인덱스를 알아낸다.
  2) 반복문을 통해 단어를 검토하면서, 끝말과 잇지 않은 경우, 같은 단어를 말한 경우를 찾아낸다.
  3) 해당 인덱스를 참가자 수로 나눈 나머지와, 나눈 몫을 올림한 값을 배열에 담아 리턴한다.

👨🏻‍💻 나의 문제 풀이

function solution(n, words) {
    let gameOverIndex = 0;
    let wordStack = [words[0]];
    for(let i = 1; i < words.length; i++){
        let lastWord = wordStack[wordStack.length - 1];
        let nextWord = words[i];
        if(lastWord[lastWord.length - 1] !== nextWord[0]){
            gameOverIndex = i + 1;
            break;
        }
        if(wordStack.includes(nextWord)){
            gameOverIndex = i + 1;
            break;
        }
        wordStack.push(nextWord);
    }
    if(gameOverIndex === 0) return [0, 0];
    return [gameOverIndex % n === 0 ? n : gameOverIndex % n, Math.ceil(gameOverIndex / n)];
}

👩🏻‍💻 다른 사람의 코드

function solution(n, words) {
    let answer = 0;
    words.reduce((prev, now, idx) => {
      // 접근로직은 나와 같은 방식!
      // 이 부분에서 탈락자를 골라내고 있다!
      // 대신 리듀스로 단어의 마지막 글자만 prev에 저장해두고 now의 첫글자와 비교!
        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];
}
profile
부정확한 정보나 잘못된 정보는 댓글로 알려주시면 빠르게 수정토록 하겠습니다, 감사합니다!

0개의 댓글