오랜만에 코딩 테스트를 다시 하니까 막히는 것 투성이었습니다.
그래도 이번엔 나름 깔끔하게 푼 문제 같은데,
설명이라도 적어두면 나중에 까먹지 않을 것 같아서 해답과 설명을 적어보려고 합니다.
function solution(n, words) {
var answer = [0, 0]
const stack = [];
stack.push(words.shift())
while (words.length) {
let prev = stack[stack.length-1]
let now = words.shift()
if ( prev[prev.length-1] !== now[0] || stack.includes(now)) {
const num = (stack.length % n) + 1
const order = Math.floor(stack.length / n) + 1
answer = [ num, order ]
break;
}
stack.push(now)
}
return answer
}
words의 첫 번째 단어를 뽑아서 stack에 저장한다.
stack의 마지막 단어(prev)의 마지막 알파벳과 words의 첫번째 단어(now)의 첫번째 알파벳을 비교한다.
now가 stack에 존재하는지 찾는다.
2~3번을 모두 통과했다면 now를 stack에 넣어준다.
문제가 발생할 때 까지 2~4번을 반복한다.
만약 2~3번에서 틀린 사람이 있다면, stack의 길이를 n(사람 수)로 나눠서 틀린 사람의 번호와 순서를 찾아낸다.
words 의 길이가 0이 될 때 까지 틀린 사람이 없다면 [0, 0] 을 반환한다.
저는 이러한 과정으로 풀었습니다.
굉장히 짧고 간결하게 푸신 분들도 많지만...
그래도 생각한 대로 코드를 짜고, 문제를 통과해서 기분이 좋네요ㅎㅎ
정답에 대한 조언은 언제든 환영입니다!