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

1 분 소요

문제 링크

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


풀이 과정

set.add(words[0]);

while (true) {
    if (idx >= words.length) break;

    if (words[idx - 1].charAt(words[idx - 1].length - 1) != words[idx].charAt(0) || set.has(words[idx])) {
        found = true;
        break;
    }

    set.add(words[idx]);
    idx++;
}

set 은 끝말잇기를 진행해가면서 등장한 단어들을 보관합니다. 중복을 허용하지 않아야 하므로, Set 을 사용했습니다.

  • 앞 사람이 말한 단어의 마지막 문자로 시작하지 않거나, 이미 말한 단어이면 탈락자를 체크합니다.
  • 정상적인 단어를 댔으면, set 에 해당 단어를 추가해주고, 인덱스를 증가시켜 다음 번 단어를 확인합니다.


if (found) answer.push((idx % n) + 1, parseInt(idx / n) + 1);
else answer.push(0, 0);

위에서 탈락자를 체크해뒀다면, 인덱스로부터 가장 먼저 탈락하는 사람의 번호그 사람이 자신의 몇 번째 차례에 탈락하는지를 구합니다.

탈락자가 발생하지 않는다면, 반환한 배열을 [0, 0] 으로 만들어줍니다.


코드

function solution(n, words) {
    let answer = [];
    let idx = 1;
    let found = false;
    let set = new Set();

    set.add(words[0]);

    while (true) {
        if (idx >= words.length) break;

        if (words[idx - 1].charAt(words[idx - 1].length - 1) != words[idx].charAt(0) || set.has(words[idx])) {
            found = true;
            break;
        }

        set.add(words[idx]);
        idx++;
    }

    if (found) answer.push((idx % n) + 1, parseInt(idx / n) + 1);
    else answer.push(0, 0);

    return answer;
}

solution(3, ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]);
// solution(5, ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"]);
// solution(2, ["hello", "one", "even", "never", "now", "world", "draw"]);

카테고리:

업데이트:

댓글남기기