[프로그래머스] Lv 2: 영어 끝말잇기 (Java Script)

파이·2022년 2월 27일
0

오랜만에 코딩 테스트를 다시 하니까 막히는 것 투성이었습니다.
그래도 이번엔 나름 깔끔하게 푼 문제 같은데,
설명이라도 적어두면 나중에 까먹지 않을 것 같아서 해답과 설명을 적어보려고 합니다.



정답 코드

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를 while 반복문을 돌리면서 이전 단어와 현재 단어를 검사 해, 중복값이나 끝말잇기가 틀린 값을 찾는다.

  1. words의 첫 번째 단어를 뽑아서 stack에 저장한다.

  2. stack의 마지막 단어(prev)의 마지막 알파벳과 words의 첫번째 단어(now)의 첫번째 알파벳을 비교한다.

  3. now가 stack에 존재하는지 찾는다.

  4. 2~3번을 모두 통과했다면 now를 stack에 넣어준다.

  5. 문제가 발생할 때 까지 2~4번을 반복한다.

  6. 만약 2~3번에서 틀린 사람이 있다면, stack의 길이를 n(사람 수)로 나눠서 틀린 사람의 번호와 순서를 찾아낸다.

  7. words 의 길이가 0이 될 때 까지 틀린 사람이 없다면 [0, 0] 을 반환한다.



저는 이러한 과정으로 풀었습니다.
굉장히 짧고 간결하게 푸신 분들도 많지만...
그래도 생각한 대로 코드를 짜고, 문제를 통과해서 기분이 좋네요ㅎㅎ

정답에 대한 조언은 언제든 환영입니다!

profile
기록

0개의 댓글