백준 1193번 분수찾기 - Node.js

프동프동·2022년 5월 30일
0

알고리즘 - Node.js

목록 보기
20/116
post-thumbnail

분수찾기

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

출력

첫째 줄에 분수를 출력한다.

예시 입력 1

1

예시 출력 1

1/1

예시 입력 2

2

예시 출력 2

1/2

예시 입력 3

3

예시 출력 3

2/1

해결 방법

  1. 아래 형태로 정리해야 조금 보임
    1/1 => 1
    1/2 2/1 => 2
    3/1 2/2 1/3 => 3
    1/4 2/3 3/2 4/1 => 4

  2. 10의 위치를 찾으려면 10이 위치한 줄 부터 찾아야함
    n(n+1)/2를 통해 위치 인덱스 기억

  3. 해당 줄에서 몇번째에 위치해 있는지 찾아내야함

  4. 홀수 줄과 짝수 줄의 순서가 서로 다름

let fs = require('fs');
// const input = fs.readFileSync('./temp.txt').toString().split('\n');
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let number = Number(input[0]);
let index = 0;

let sum = 0;
while (true) {
  index++;
  sum = (index * (index + 1)) / 2;      // 2
  if (number <= sum) {
    break;
  }
}
let position = number - ((index - 1) * index) / 2;    // 3
if (index % 2 === 0) {
  console.log(`${position}/${index - position + 1}`);  // 4
} else {
  console.log(`${index - position + 1}/${position}`); // 4
}
profile
좋은 개발자가 되고싶은

0개의 댓글