백준 1193번 풀이 node

2022. 12. 24. 02:55에러&&공부노트

문제 : 

 

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

1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4
3/1 3/2 3/3
4/1 4/2
5/1

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

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

//예제 입력 1
1
//예제 출력 1
1/1

 

const fs = require('fs');
const input = fs.readFileSync(0).toString().trim();
const fn_result = (input) => {
 let line = top = bottom = maxNum = 0;
  let num = Number(input);
  while (num > maxNum) {
    line += 1;
    maxNum += line;
  }

  if (line % 2 == 0) {
    // 짝수
    top = num - (maxNum - line);
    bottom = maxNum - num + 1;
  } else {
    // 홀수
    top = maxNum - num + 1;
    bottom = num - (maxNum - line);
  }
  console.log(`${top}/${bottom}`);
};
fn_result(input);

 

중요 내용 :

표에 규칙은 라인 별로 1/1 > 1/2, 2/1 > 3/1, 2/2, 1/3 > 1/4, 2/3, 3/2, 4/1 ..의 규칙을 가지고 있으며

라인 별 개 수는 1 3 6 10 으로 파악된다. 코드에 몇 번 째 라인인지와 해당 라인의 최고 큰 수를 구해 계산식을 만들었다.

'에러&&공부노트' 카테고리의 다른 글

백준 1931번 풀이 node  (0) 2022.12.25
백준 2869번 풀이 node  (0) 2022.12.24
백준 2292번 풀이 node  (0) 2022.12.23
백준 1712번 풀이 node  (0) 2022.12.23
[Javascript] 백준 1260번 DFS와 BFS - node.js  (0) 2022.12.16