Level2️⃣ - 영어 끝말잇기

2024. 3. 28. 18:05알고리즘/프로그래머스

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

 

프로그래머스

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

programmers.co.kr

해석

우선 실패 조건을 확인하자. 예외처리에 대해 꼼꼼하게 생각해야한다.

이전에 등장한 단어를 말하거나 한글자만 말하거나 앞사람의 마지막 글자로 시작하는 단어를 말하지 않았을 때 실패한다.

그렇기 때문에 등장한 단어들을 체크하는 해시맵을 만들어서 해시맵에 있는 단어를 또 말하는 경우 실패로 처리한다.

그리고 스택을 이용해서 단어들을 하나씩 담으면서 들어오는 단어가 스택에 맨 위에 있는 단어의 마지막 글자로 시작하는지 확인한다. 그리고 들어오는 단어가 한 글자인지도 확인한다.

 

코드

function solution(n, words) {
    let check = new Map();
    let stack = [];
    for(let i = 0; i<words.length; i++){
        if(check.has(words[i])) return [(i%n)+1, Math.floor(i/n)+1];
        else check.set(words[i], 1);
        if(words[i].length===1) return [(i%n)+1, Math.floor(i/n)+1];
        if(stack.length){
            let item = stack[stack.length - 1];
            if(item[item.length - 1] !== words[i][0]) return [(i%n)+1, Math.floor(i/n)+1];
            stack.push(words[i]);
        }
        else stack.push(words[i]);
    }
    return [0, 0];
}

해석한대로 구현하면 된다.

다만 실패한 사람과 몇번째에서 실패했는지를 구할 때는 인덱스를 기준으로 구하기 때문에 마지막에 1을 더해줘야한다.

'알고리즘 > 프로그래머스' 카테고리의 다른 글

Level2️⃣ - 멀리 뛰기  (1) 2024.04.01
Level2️⃣ - 점프와 순간이동  (0) 2024.03.28
Level 1 - 바탕화면 정리  (0) 2024.03.27
Level2️⃣ - 피보나치 수  (0) 2024.03.27
Level2️⃣ - 숫자의 표현  (0) 2024.03.27