문제 링크
https://www.acmicpc.net/problem/1193
군수열 문제이다.
인덱스(파란색 글씨)마다 배열되는 분수의 분자/분모 증가 방향이 달라지는데,
인덱스가 홀수라면 분자가 1씩 감소되고 분모는 1씩 증가하는 방향으로 전개되고
인덱스가 짝수라면 분자가 1씩 증가하고 분모는 1씩 감소하는 방향으로 전개된다.
답안1 ( 수정한 풀이 )
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "text.txt";
let num = parseInt(fs.readFileSync(filePath).toString().trim());
let i = 1
while(num > i) {
num -= i++
}
if (i % 2 === 0) console.log(`${num}/${i-num+1}`)
else console.log(`${i-num+1}/${num}`)
- i는 증가하는 수열을 나타내고, num에서 i를 빼는 것 자체가 나눗셈을 하는 행위가 된다.
- num이 i보다 작아졌을 때, 최종적으로 num은 i로 나눈 나머지값이 된다.
- 이것으로 원하는 값을 바로 도출할 수 있다.
답안2 ( 처음에 제출했던 풀이 )
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "text.txt";
const num = parseInt(fs.readFileSync(filePath).toString().trim());
function solution(num) {
let index = 1;
let mass = 1;
for (let i = 2; num > mass; i++) {
mass = mass + i;
index += 1;
}
let calc = mass - num;
if (index % 2 === 0) {
console.log(`${index - calc}/${1 + calc}`);
} else {
console.log(`${1 + calc}/${index - calc}`);
}
}
solution(num);
- 처음에 풀었던 방법이다.
- 접근방법은 비슷하지만 위의 답안보다 직관적이지 못했다.
- 증가하는 i에 따른 분수수열을 표현하기 위해 mass를 넣었었는데 위처럼 문제를 풀면 mass값 자체가 필요가 없다.
'코테 문제 풀이' 카테고리의 다른 글
[백준 4779] 칸토어 집합 (Node.js) - 분할정복 (0) | 2023.05.30 |
---|---|
[백준 18870] 좌표 압축 (Node.js) (0) | 2023.05.19 |
[백준 1065] 한수 (Node.js) (0) | 2023.01.31 |
[백준 4673] 셀프 넘버 (Node.js) (0) | 2023.01.30 |
[백준 3052] 나머지 (Node.js) (0) | 2023.01.27 |