• [백준_1193] 분수찾기 ( by Node Js, Javscript)

    2021. 3. 11.

    by. KimBangg

    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}`);
    }
    

    댓글