우선, 처음으로 등장한 단어가 아니면
앞뒤 단어가 끝말잇기가 되는지 확인할 필요가 없으므로, 이를 먼저 체크하였다.
이후, 직전 단어의 마지막 알파벳과 현재 단어의 첫번째 알파벳을 비교
하여, 틀리면 return하도록 하였다.
이때, return되는 배열은 [ 번호, 차례 ]
이다.
따라서 번호는 현재 index를 명수로 나눈 나머지에 1
를 더하고, 차례는 이를 명수로 나눈 값을 무조건 반올림
하여 나타낸다.
해당 사항이 없을 경우, [ 0, 0 ]
을 반환하면 된다.
최종 코드이다.👇
function solution(n, words) {
for (let index = 1; index < words.length; index += 1) {
// 처음으로 등장한 단어가 아니면
if (index !== words.indexOf(words[index]))
return [(index % n) + 1, Math.ceil((index + 1) / n)];
// 끝말잇기 비교
if (words[index - 1].lastIndexOf(words[index][0]) !== words[index-1].length-1)
return [(index % n) + 1, Math.ceil((index + 1) / n)];
}
return [0, 0];
}
우선, 끝말잇기를 비교하는 코드가 직관적이지 않는 부분을 수정하였고, return되는 값이 같으므로 이에 대한 함수를 따로 작성하였다.
최종 코드이다.👇
function getResult(index){
return [(index%n)+1, Math.ceil((index+1)/n)];
}
function solution(n, words) {
for (let index = 1; index < words.length; index += 1) {
// 처음으로 등장한 단어가 아니면
if (index !== words.indexOf(words[index]))
return getResult(index);
// 끝말잇기 비교
if (words[index-1][words[index - 1].length-1] !== words[index][0])
return getResult(index);
}
return [0, 0];
}