백준 1193번 Node.js 문제풀이

Cho Dragoo·2021년 5월 29일
0
post-thumbnail

JavaScript 백준 온라인 알고리즘 공부

백준 1193번 번 Node.js 문제풀이

분수찾기
https://www.acmicpc.net/problem/1193



본인이 제출한 답안

const fs = require("fs");
const input = (
  process.platform === "linux" ? fs.readFileSync("/dev/stdin").toString() : `14`
).trim();

let N = Number(input);
let A = 0;
let B = 1;
let i = 0;

while (N > i) {
  A++;
  i++;

  if (N === i) {
    break;
  }

  while (A > 1) {
    A--;
    B++;
    i++;

    if (N === i) {
      break;
    }
  }

  if (N === i) {
    break;
  }

  B++;
  i++;

  if (N === i) {
    break;
  }

  while (B > 1) {
    B--;
    A++;
    i++;

    if (N === i) {
      break;
    }
  }

  if (N === i) {
    break;
  }
}

console.log(`${A}/${B}`);

풀이과정 소감

  • 생각보다 로직이 복잡하게 구현되었다. 문제를 분석하면 예로들어 숫자 A가 1까지 낮아졌을경우 B는 한번만 1를 더하고 수를 1까지 줄이고, A는 반대로 수를 늘인다. 이것을 반복하다가 반대로 B가 1까지 낮아졌을경우 A는 한번만 1를 더하고 수를 1까지 줄이고 B는 반대로 수를 늘인다. 이 전체로직을 A, B숫자가 연산하면서 1씩 대입한 i숫자가 입력숫자와 같아지면 모든 반복을 멈춘다. 그 이후에 반환된 A, B를 조건에 맞게 출력하면 끝이다.

  • 이 로직 설명은 복잡하지만 하고자하는 로직자체는 틀리지는 않았었다. 문제가 됬던 건 원하는 입력숫자가 도달했을 때 break문으로 빠져나와야 하는데 그렇게 했는데도 빠져 나오지 않는 현상에 풀이에 난항을 겪었다.
    각 반복문의 스코프에 console.log를 삽입하고 테스크케이스를 여러번 돌려본 결과 원인은 반복문안의 반복문의 break문의 실행은 해당하는 while문만 빠져나가고 부모 while문까지 빠져나가지 못했던 것이다.

  • 단번에 빠져나가 나가는 방법이 있으면 좋겠지만 일단 지금은 이 정도만 이해하고 또 해결해야 하는 건 함수를 이용해 반복되는 break문을 줄이려고 했지만 단순함수에 break문을 못쓰는 점, 더 연구해서 더 좋은 답안을 고쳐볼 필요가 있을 것 같다.

profile
어떤 문제든 파악 할 수 있으며 해결책을 찾을 수 있는 개발능력을 꿈꾸고 있습니다.

0개의 댓글