티스토리 뷰

728x90

문제 링크

https://www.acmicpc.net/problem/21873

 

21873번: 개구리 징검다리 건너기

첫 번째 줄에 개구리들을 움직여야 하는 횟수 $M$을 출력한다. 단, $M$은 $1\,500\,000$을 넘어서는 안된다. 두 번째 줄부터 $M$개의 줄에 걸쳐서 움직인 개구리의 정보를 순서대로 출력한다. $p$번째

www.acmicpc.net

 

풀이

그림으로 그려보다 화가나서 웹으로 간단한 시뮬레이터를 만들어 규칙을 찾았습니다.

사람은 시각에 예민한 동물입니다..

 

 

1
1 2
1 2 3
...
1 2 3 ... n
1 2 3 ... n
1 2 3 ... n
2 3 ... n
3 ... n
...
n

이런 식으로 한 줄마다 이동해야 하는 개구리의 색이 바뀌게 됩니다.

 

정답 코드

const fs = require('fs');
const stdin = fs.readFileSync('/dev/stdin').toString().split('\n');
const input = (() => {
    let line = 0;
    return () => stdin[line++];
})();

const main = function () {
    const n = +input();
    let cur = 1, ans = '', cnt = 0;
    for (let i = 1; i < n; i++) {
        for (let j = 1; j <= i; j++) {
            ans += `${cur} ${j}\n`;
            cnt++;
        }
        cur = 3 - cur;
    }

    for (let k = 0; k < 3; k++) {
        for (let i = 1; i < n + 1; i++) {
            ans += `${cur} ${i}\n`;
            cnt++;
        }
        cur = 3 - cur;
    }
    for (let i = 1; i < n; i++) {
        for (let j = i + 1; j < n + 1; j++) {
            ans += `${cur} ${j}\n`;
            cnt++;
        }
        cur = 3 - cur;
    }
    ans = cnt + '\n' + ans;
    console.log(ans);
};

main();
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함