코딩테스트

[JS] 유전법칙

미안하다 강림이 좀 늦었다 2024. 4. 4. 22:47

 

 

알고리즘

  1. 파라미터로 주어진 세대부터 2세대에 도달할 때까지 현재 인덱스가 1~4 중 어딘지 구해서 스택에 넣는다.
  2. 스택의 맨 위에 있는 인덱스는 2세대의 인덱스다. 1이면 RR, 2이면 Rr, 3이면 Rr, 4이면 rr이다. 1과 4인 경우는 자식 모드 부모와 동일하지만 2, 3인 경우에는 자식이 3종류가 나올 수 있으므로 다음 세대를 본다.
  3. 2에서 결정을 못하고 파라미터로 주어진 세대까지 내려오게되면 주어진 세대의 1~4 값을 가지는 인덱스가 정답이다.

 

 

코드

function solution(queries) {
    const answer = [];
    const generation2nd = ['', 'RR', 'Rr', 'Rr', 'rr'];

    for (let query of queries) {
        if (query[0] === 1) {
            answer.push('Rr');
            continue;
        }

        let generation = query[0] - 1;
        let branch = query[1];
        let lastPea = (query[1] + 3) % 4 + 1;
        const stack = [];

        while (generation > 1) {
            branch = Math.ceil(branch / 4);
            stack.push((branch + 3) % 4 + 1);
            generation--;
        }

        answer.push(generation2nd[lastPea]);
        while (stack.length) {
            const nthPea = stack.pop()
            if (nthPea === 1 || nthPea === 4) {
                answer.pop();
                answer.push(generation2nd[nthPea]);
                break;
            }
        }
    }

    return answer;
}

 

 

주저리

시험칠 때 테케 4개가 틀렸는데 시험 시간 1시간 동안 붙잡고 있었는데도 못 풀었다.

근데 시험시간에 했던 풀이는 틀린 게 맞다^^ 테케 6개 맞은 것도 기적이라고 할 수 있다........

다르게 풀어야 한다는 것을 깨닫고 푸는데 아무리 생각해도 이게 맞는데 테케 하나를 통과를 못하길래 한 네다섯 시간 머리 싸맸는데 1세대 예외처리에 continue를 적어야 하는데 break를 적은 것이었다. 이렇게 허무할 수가