0%

백준 1193 Node.js

문제 링크


풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const input = require('fs').readFileSync('예제.txt').toString()

// 입력 받은 값을 숫자로 받아와서 num에 저장한다
const num = Number(input)
let i = 0
let sum = 0

// 1. 해당 숫자가 몇 번째 라인에 있는지
while (sum < num) {
i++
sum += i
}
let a = Math.abs(sum - num)

// 2. 그 숫자는 해당 라인 몇 번째에 위치하는지
if (i % 2 === 0) {
console.log((i - a) + '/' + (1 + a))
} else {
console.log((1 + a) + '/' + (i - a))
}

해설

우선 문제 이해를 위해 이렇게 바꿔보자🧐
1193

  1. 주어진 숫자가 몇 번째 라인에 위치하는지 먼저 알아야 한다

    while 문의 조건을 sum < num 으로 설정 하고, sum 에는 1 + 2 + 3 + 4 이런식으로 값이 더해진다.

    9를 예로 들어보자, 1 + 2 + 3 + 4 = 10 이므로, 9 보다 값이 커지게 되므로, i = 4 가 된다

    while 문으로 94번째 라인에 위치한다는 것을 알 수 있다


  1. 해당 라인에서 몇번째에 위치하는가?

    짝수인 경우와 홀수인 경우로 나눌 수 있는데, 짝수인 경우 끝에 위치하는 분수의 형태는 i / 1,

    홀수인 경우 끝에 위치하는 분수의 형태는 1 / i 인 것을 확인 할 수 있다.

    각 라인의 마지막 숫자는 sum 이 되기 때문에(순차적으로 수가 더해지는 규칙이 있기 때문 1 + 2 + 3...)

    sum - num 의 절댓값을 변수 a 에 저장한 뒤, 이 값을

    짝수 일 때는 (i - a) / (1 + a)

    홀수 일 때는 (1 + a) / (i - a) 로 출력하면 된다
    😀