본문 바로가기
프로그래밍/백준 알고리즘

[백준 / node.js] 1193번: 분수찾기

by 정빈e 2021. 8. 18.
728x90

출처: 백준

 

1193번: 분수찾기

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

www.acmicpc.net

문제

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

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번째 분수를 구하는 프로그램을 작성하시오.

입력

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

출력

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

예제 입력 1

14

예제 출력 1

2/4

내 코드

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input;

rl.on("line", function (line) {
  input = Number(line);
  rl.close();
}).on("close", function () {
  let deno = 1;
  let mole = 1;
  let count1 = 0;
  let count2 = 0;
  let answer = [];
  while (count1 < input) {
    for (let k = 1; k <= deno; k++) {
      count1++;
      //console.log(`분모up: ${k}`);
      if (check(count1, k)) break;
    }
    for (let m = mole; m > 0; m--) {
      count2++;
      if (check(count2, m)) break;
    }
    deno++;
    mole++;

    for (let j = deno; j > 0; j--) {
      count1++;
      //console.log(`분모down: ${j}`);
      if (check(count1, j)) break;
    }
    for (let n = 1; n <= deno; n++) {
      count2++;
      if (check(count2, n)) break;
    }
    deno++;
    mole++;
  }

  function check(count, x) {
    if (count === input) {
      answer.push(x);
    }
  }
  console.log(`${answer[1]}/${answer[0]}`);

  process.exit();
});

결과

> 14
2/4

백준 단계별로 풀어보기에서 '기본 수학1' 로 넘어왔더니 난이도가 확 높아진 느낌이다.

아직 해결 못한 두 문제는 일단 넘어가고 나중에 다시 풀어봐야겠다.

 

이 문제도 푸는데 좀 오래걸렸다. 분모와 분자의 카운트를 따로 세어서 코드가 복잡해졌는데 그나마 함수를 사용해서 조금 낫다. 표에서 한 방향으로 카운트를 세는 것이 아니고 지그재그로 세야했기 때문에 좀 헷갈렸다.

 

분모의 경우 console.log를 한 부분을 보면 지그재그로 증가하는 모습을 볼 수 있다.

 

분모up: 1
분모down: 2
분모down: 1
분모up: 1
분모up: 2
분모up: 3
분모down: 4
분모down: 3
분모down: 2
분모down: 1

.

.

.

 

분자도 같은 형식으로 올라가지만 방향은 반대로 가도록 한다.

 

check 함수로 입력값과 count가 같아지면 answer배열에 해당 값을 push하고 반목문을 break한다.

분모의 카운트를 세는 count1 분자의 카운트를 세는 count2는 값이 같기 때문에 answer 배열에 해당 분자, 분모를 담게된다.

 

 

 

 

728x90

댓글