백준-Node.js-1193

송철진·2023년 2월 3일
0

백준-Node.js

목록 보기
4/71

풀이

const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim()

const solution = input => {
  const sum = n => n*(n+1)/2  
  let i = 1;
  
  while(sum(i) < input){
    i++
  }
  
  let a = input - sum(i-1)
  
  return (i+1) % 2 === 1 ? [a, i+1-a].join("/") : [i+1-a, a].join("/")    
}
input분자분모분자+분모
1112
2123
3213
4314
5224
6134
7145
8235
9325
10415

while문으로 구한 i
등차수열의 합sum(i)가 input값보다 작은, 최대값을 만족하는 분수의 분자+분모

예를 들어, input값이 8일 때
조건을 만족하는 등차수열의 합은 sum(3) = sum(i-1) = 6 이다
👉 6번째 분수의 분자+분모 = i = 4 라는 의미!

input값이 8이므로 input - sum(i-1) = a = 8 - 6 = 2 만큼 다음번 분수를 구해줘야 한다
다음번 분수의 분자+분모는; i+1 = 5 다
분자+분모가 홀수이면 0 / i+1에 대해 +a / -a
분자+분모가 짝수이면 i+1 / 0에 대해 -a / +a를 하는 규칙이 있다.

i+1 = 5는 홀수 이므로 0+2 / 5-2 = 2/3 을 반환한다


공차가 1인 등차수열의 합의 마지막 항, input, 분자+분모 의 관계에 일정한 규칙이 보여서 하나의 변수 i로 구현할 수 있을 거 같아 고민하다보니 시간이 오래 걸렸다.

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글