-
1. 문제
최근 js로 언어를 변경 및 알고리즘을 다시 시작하며 "기본 구현"부터 다시 공부를 시작하였다 :)
2. 접근법
본 문제를 품에 있어서 가장 중요한 포인트는 제대로 된 이해가 선행이 되어야 한다는 것이였다.
처음에는 지그재그로 이동한다는 것이 무슨 소리인지 예시를 통해 이해가 한번에 가지 않아서 시간을 좀 잡아 먹었는데 다음과 같이 이동한다는 것 이였다.
2-1 지그재그로 이동
2-2 X 번째에 있는 숫자를 어떻게 찾는데?
" 자 그렇다면 지그재그로 이동한다는 가정하에 특정한 값에 해당하는 숫자를 어떻게 찾을 수 있을까? "
지그재그로 그려진 그림을 45도 정도로 기울여서 보면 놀랍게도 층이 나누어 지는 것을 다음과 같이 볼 수 있다.
여기까지 왔다면 피라미드 사이의 규칙을 볼 수 있는데 그것은 바로!
홀수 층에는 홀수 개의 분수들이 존재한다는 것과 분자는 1 -> N / 분모는 N -> 1 로 변화한다는 것이다.반대로 짝수 층에는 짝수 개의 분수들이 존재하며, 분자는 N -> 1 / 분모는 1 -> N 로 변화한다.
이를 통해, 다음과 같은 코드를 작성 할 수 있었다.
3. 코드
const fs = require("fs"); // 찾아야 하는 분자 자리인 X를 입력받는다. let X = Number(fs.readFileSync("/dev/stdin").toString().trim()); // 층계를 대신 할 변수인 counter를 선언한다. let counter = 1; // counter가 X보다 커진다는 것은 X가 위치하는 층계에 도착한다는 것을 의미 while (X > counter) { X = X - counter; // 층계를 높이면서 X에서 빼줌으로써 어디에 있는지 찾는다. counter += 1; } if (counter % 2 === 0) { console.log(`${X}/${counter - X + 1}`); } else { console.log(`${counter - X + 1}/${X}`); }
'PS > 백준' 카테고리의 다른 글
[백준] 1260 DFS와 BFS (0) 2021.03.23 [완전탐색(BruteForce)] 백준 1018 체스판 칠하기 ( by node js ) (0) 2021.03.16 [백준_7576] 토마토 by python ( BFS ) (2) 2021.01.17 [백준_1012] 유기농배추 by python ( DFS ) (0) 2021.01.16 [백준_2644] 촌수계산 by python ( BFS ) (0) 2021.01.16 댓글