[프로그래머스] 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"]);
댓글남기기