오늘의 알고리즘 👍
📝 1. 영어 끝말잇기
- 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다.
- 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다.
- 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다.
- 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다.
- 이전에 등장했던 단어는 사용할 수 없습니다.
- 한 글자인 단어는 인정되지 않습니다.
▷ 입출력 예
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"])
▷ 해결 못함 ❌
▷ 수업 풀이
function solution(n, words) {
for (let i = 1; i < words.length; i++) {
let player = (i % n) + 1;
let turn = Math.floor(i / n) + 1;
let lastLetter = words[i - 1][words[i - 1].length - 1];
let firstLetter = words[i][0];
if (lastLetter !== firstLetter || words.indexOf(words[i]) !== i) {
return [player, turn];
}
}
return [0, 0];
}
▷ reduce 매서드 사용 풀이
function solution(n, words) {
let stop = false;
return words.slice(1).reduce(
(acc, cur, i) => {
let lastLetter = words[i].at(-1);
let firstLetter = cur[0];
const player = (++i % n) + 1;
const turn = Math.trunc(i / n) + 1;
if (!stop) {
if (lastLetter !== firstLetter || words.indexOf(cur) !== i) {
stop = true;
return [player, turn];
}
}
return acc;
},
[0, 0],
);
}
▷ some 매서드 사용 풀이
function solution(n, words) {
let player = 1;
let turn = 1;
const result = words.slice(1).some((cur, i) => {
let lastLetter = words[i].at(-1);
let firstLetter = cur[0];
player = (++i % n) + 1;
turn = Math.trunc(i / n) + 1;
return lastLetter !== firstLetter || words.indexOf(cur) !== i;
});
return !result ? [0, 0] : [player, turn];
}
출처: 프로그래머스
출처: 코드캠프