문제
풀이
const readFileSyncAddress = '/dev/stdin';
const fs = require('fs');
let [X] = fs
.readFileSync(readFileSyncAddress)
.toString()
.trim()
.split(' ')
.map((v) => +v);
const solution = function (n) {
let i = 1; // 현재 범위를 계산할 피연산자
let range = 0; // 현재 범위
let strNum = 0; // 분모 or 분자의 시작지점
// n이 범위에 도달할 때까지 while문 실행
while (range < n) {
range += i++;
strNum = i - 1;
}
// 범위에 도달한 분자/분모에서 빼거나 더해줄 값
// n에서 범위의 첫번째 순서에 해당하는 숫자를 빼면 연산값이 나온다.
let PM = n - (range - strNum + 1);
//짝수 1/s ~ s/1
if (strNum % 2 === 0) {
return `${1 + PM}/${strNum - PM}`;
}
//홀수 s/1 ~ 1/s
else {
return `${strNum - PM}/${1 + PM}`;
}
};
console.log(solution(X));
- 숫자가 위치하는 범위를 파악한다.
- 숫자가 해당 범위중 어디에 위치하는지 파악한다.
- 시작하는 분자/분모의 순서가 홀수/짝수에 따라 달라진다.
- 시작지점에서 더하고 뺄 값을 계산한다.
- 결과에 반영하여 리턴한다.
'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글
[알고리즘]백준 10250번: ACM 호텔 W_node.js (0) | 2022.06.10 |
---|---|
[알고리즘]백준 2869번: 달팽이는 올라가고 싶다 W_node.js (0) | 2022.06.08 |
[알고리즘] 백준 2292번: 벌집 W_node.js (0) | 2022.06.02 |
[알고리즘] 백준 1712번: 손익분기점 W_node.js (0) | 2022.05.20 |
[알고리즘] 백준 1316번: 그룹 단어 체커 W_node.js (0) | 2022.05.11 |