

우선, 처음으로 등장한 단어가 아니면 앞뒤 단어가 끝말잇기가 되는지 확인할 필요가 없으므로, 이를 먼저 체크하였다.
이후, 직전 단어의 마지막 알파벳과 현재 단어의 첫번째 알파벳을 비교하여, 틀리면 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];
}