코딩테스트/프로그래머스

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

의현 2025. 4. 2. 17:26

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12981#

문제 풀이

set 자료구조와 Array.prototype.slice 메서드를 이용하여 문제를 해결

끝말잇기에 사용한 문자를 usedWords(set)로 관리하고 특정 단어의 포함관계를 .has()를 사용하여 판단

이전 문자의 마지막 값을 가져올려면 문자열.slice(-1)을 하면 마지막 값을 얻을 수 있음

function solution(n, words) {
    let usedWords = new Set([words[0]]);
    let round = 1;

    for (let i = 1; i < words.length; i++) {
        const isNewRound = i % n === 0;
        if (isNewRound) round++;

        const currentPlayer = (i % n) + 1;
        const previousWord = words[i - 1];
        const currentWord = words[i];

        if (
            usedWords.has(currentWord) || 
            previousWord.slice(-1) !== currentWord[0]
        ) {
            return [currentPlayer, round];
        }

        usedWords.add(currentWord);
    }

    return [0, 0];
}

결론

set 자료구조

  • .has() : set에 특정 값이 존재하는지 확인
  • .add() : set에 새로운 값 추가(중복 x)

slice(-1) : slice의 인수가 음수일 경우 배열의 마지막을 기준으로 검색하여 새로운 배열을 리턴

  • 'abc'.slice(-1) : abc의 뒤에서 1개를 검색하여 리턴, 즉 'c'값이 리턴됨