Level2️⃣ - 영어 끝말잇기
2024. 3. 28. 18:05ㆍ알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12981
해석
우선 실패 조건을 확인하자. 예외처리에 대해 꼼꼼하게 생각해야한다.
이전에 등장한 단어를 말하거나 한글자만 말하거나 앞사람의 마지막 글자로 시작하는 단어를 말하지 않았을 때 실패한다.
그렇기 때문에 등장한 단어들을 체크하는 해시맵을 만들어서 해시맵에 있는 단어를 또 말하는 경우 실패로 처리한다.
그리고 스택을 이용해서 단어들을 하나씩 담으면서 들어오는 단어가 스택에 맨 위에 있는 단어의 마지막 글자로 시작하는지 확인한다. 그리고 들어오는 단어가 한 글자인지도 확인한다.
코드
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 |