Silver Library (Archived)
백준 1065 한수 - JS 본문
반응형
한수 문제.
입력: 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력: 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
이 문제를 풀려면 등차수열에 대한 이해가 필요합니다.
"수학에서, 등차수열(等差數列, 문화어: 같은차수렬, 영어: arithmetic progression, AP 또는 arithmetic sequence)은 연속하는 두 항의 차이가 모두 일정한 수열을 뜻한다. ... 예를 들어, 앞의 수열의 공차는 2이다." - wikipedia
우선 fs module. 그런데 이렇게 하면 VSCode 상으로는 되지만, 백준에서는 틀렸다고 합니다.
// Initializing
function hanSoo(N) {
const numArr = [];
let hanSoo, digitCount;
let temp = 0;
// for 반복문 / 1부터 N 으로 들어오는 값의 바로 전까지.(즉 100들어오면 -1인셈.) 더하기.
for (let i = 1; i <= N; i++) {
// 만약 100 보다 작다면, 그게 한수(hanSoo) 의 i 에 해당된다
if (i < 100) {
hanSoo = i;
// 만약 한수가 1000보다 작다면, digitCount 는 0이되고, temp 는 1이 된다.
} else if (i < 1000) {
digitCount = 0;
temp = 1;
// temp 가 0 보다 크면; numArr 는 digitCount 를 참고하는데, 여기서 temp 의 나머지 10을 구하고, temp 는 이 나머지 10 값을 string 에서 정수로 변환한다.
// 그 후, digitCount 는 덧셈으로 반복문이 작동. (temp 가 0보다 크다는 조건하에)
while (temp > 0) {
numArr[digitCount] = temp % 10;
temp = parseInt(temp / 10);
digitCount++;
}
// 아래는 문제에서 제시한 한수가 작동하도록 구성하는 로직이다.
if (numArr[0] - numArr[1] === numArr[1] - numArr[2]) {
hanSoo++;
}
// 그 이외의 경우, break
} else {
break;
}
}
// 최종적으로 hanSoo 를 return.
return hanSoo;
}
// 이제 예제 출력이 나오도록, 예제 입력값인 110 을 입력해보자.
console.log(hanSoo(110));
100 미만의 수는 한수.
for 반복문 내부에서, 100 미만의 값은 한수로서 count 처리.
1000 미만의 경우, 각 자릿수를 분리하여 Array 에 포함.
이 분리한 각 자릿수를, 순서대로 빼낸다. 등차수열을 확인하기 위해.
- 만약 이 값이 한수라면, 한수로서 count. 한수가 아니라면, 등차수열이므로 else {break}; 처리 해서 목표대로 처리.
그래서, 찾아본 결과.
let readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function(line) {
let n = Number(line);
function x(n) {
let count = 0;
for(let i = 1; i <=n; i++) {
if(i < 100) {
count++;
} else {
i = String(i);
if(i[0]-i[1] === i[1]-i[2]) {
count++;
}
}
}
return count;
}
console.log(x(n));
}).on('close', function() {
process.exit();
});
개인적으로는, fs 에서 구성한 방식이 더 편안합니다.
당연하지만 이걸 한번에 이해하는 건 어려우니, 이 점은 주의해야합니다.
'CS Library > JavaScript - Data Structure' 카테고리의 다른 글
연결 리스트와 이진 트리 (0) | 2021.09.07 |
---|---|
다시봐도 헷깔리는 While 문 (0) | 2021.08.25 |
BJ 2562 - JS (0) | 2021.08.06 |
Note of readline module - Node.js (0) | 2021.07.24 |
JS, for 문 - 10950 번, A+B - 3, .on method (0) | 2021.07.20 |