난이도: Lv.2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/12981
알고리즘
이 문제에서는 검색이 빨라야할 것 같아서 해시 구조를 사용했다. 끝말잇기의 성공 조건은 두가지다.
1. 앞 단어의 마지막 문자와 말할 단어의 첫 문자가 일치해야한다.
2. 동일한 단어를 사용할 수 없다.
성공하면 해시맵에 (단어, 단어를 말한 사람)을 저장한다.
아무도 틀리지 않았을 경우 [0, 0]을 반환하고, 누군가 틀렸을 경우 틀린 사람의 번호와 몇 번째 차례에서 틀렸는지를 answer 배열에 담아 반환한다.
코드
function solution(n, words) {
var answer = [];
const hashMap = new Map();
hashMap.set(words[0], 1);
for (let i = 1; i < words.length; i++) {
if (words[i - 1].slice(-1) === words[i][0] && !hashMap.has(words[i])) {
hashMap.set(words[i], i % n + 1);
if (i === words.length - 1) { return [0, 0]; }
} else {
answer.push(i % n + 1);
answer.push(Math.trunc(i / n) + 1);
break;
}
}
return answer;
}
주저리
1트에는 앞 단어 마지막 문자로 시작하는지 검사안해서 틀렸다. 2트에는 아무도 안틀릴 경우 생각 안해서 틀렸다. 나는 무지렁이
'코딩테스트' 카테고리의 다른 글
[JS] 구명보트 (2) | 2023.11.29 |
---|---|
[JS] 점프와 순간이동 (1) | 2023.11.29 |
[JS] 카펫 (0) | 2023.11.16 |
[JS] 짝지어 제거하기 (0) | 2023.11.15 |
[JS] 피보나치 수 (0) | 2023.11.13 |