Notice
Recent Posts
Recent Comments
Link
Silver Library (Archived)
readline module - 2 본문
반응형
이는 2588 문제 풀이 중, on('close') 부분의 활용 예시로 보여집니다.
기존 문제가 line 위주로 전개해서, 그 내부에서 구성 후 마지막에 close 부분에서 최종적으로 process.exit() 으로 연결 되었던 패턴이라면, 이번 문제는 on('close') 에서 구성을 할 수 있다는 점이 다릅니다.
문제.
(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input.push(line);
}).on('close', function () {
let num1 = Number(input[0]);
let num2 = Number(input[1]);
let hundredSeatsNum2 = Math.floor(num2 / 100);
let tenSeatsNum2 = Math.floor(num2 / 10) - (hundredSeatsNum2 * 10);
let oneSeatsNum2 = num2 % 10;
console.log(num1 * oneSeatsNum2);
console.log(num1 * tenSeatsNum2);
console.log(num1 * hundredSeatsNum2);
console.log(num1 * num2);
process.exit();
});
그럼, 이게 무슨 의미일까요.
-몫을 구할 때는 소수점이 나오기 때문에, Math.floor(버림) 을 이용.
-100의 자리는 100으로 나눈 몫을 구한다.
-10의 자리는 100으로 나눈 나머지를 10으로 나눈 몫으로 구한다.
-1의 자리는 10으로 나눈 나머지를 구한다.
그 후, console.log 을 통해 출력이 되도록 구성.
num1 에서 입력 받은 값과 * 1의 자리 의 값.
num1 에서 입력 받은 값과 * 10자리의 값.
num1 에서 입력 받은 값과 * 100자리의 값.
num1 과 num2 에서 받은 값끼리 곱셈.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
let count = 0;
rl.on('line', function (line) {
count++;
if(count <= 2) {
input.push(Number(line));
}else {
rl.close();
}
});
rl.on('close', function () {
let A = input[0];
let B = input[1];
let firstNum = B % 10;
let secondNum = (B % 100 - B % 10) / 10;
let thirdNum = (B - B % 100) / 100;
let result1 = firstNum * A;
let result2 = secondNum * A;
let result3 = thirdNum * A;
let result4 = result3 * 100 + result2 * 10 + result1;
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
});
B의 각 자릿수를 구한 뒤에 전부 A와 곱하는 것이 핵심.
나머지 연산을 통해 해당 자릿수를 구하기 위한 값만 걸러내었고, 적절하게 자릿수에 맞춰서 1, 10, 100으로 나누어서 firstNum, secondNum, thirdNum 변수에 대입하였다.
그리고 세 변수를 각각 A와 곱하여 그 값을 result1, result2, result3에 대입한다.
마지막으로 출력할 최종 값을 자릿수에 따라 100, 10, 1을 곱하고 result4에 대입한 후 모두 출력.
참고로 최종값은 A * B 연산만 해주어도 정답으로 채점된다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
const Num1 = input[0];
const Num2 = input[1];
const oneNum = Num2 % 10;
const tenNum = Math.floor((Num2 % 100) / 10);
const hundredNum = Math.floor(Num2 / 100);
console.log(Num1*oneNum);
console.log(Num1*tenNum);
console.log(Num1*hundredNum);
console.log(Num1*Num2);
Num2 가
const tenNum = Math.floor((Num2 % 100) / 10);
const hundredNum = Math.floor(Num2 / 100);
console.log(Math.floor(5.95));
// expected output: 5
console.log(Math.floor(5.05));
// expected output: 5
console.log(Math.floor(5));
// expected output: 5
console.log(Math.floor(-5.05));
// expected output: -6
//Math.floor() 함수는 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환한다.
메모.
현 시점에서는, module 은 맞게 했는데도 안 풀어지면 다른 module 을 써 보면서 대응 해 봐야 할 것 같습니다.
'Face the fear, build the future' 카테고리의 다른 글
7월 27일 - record (0) | 2021.07.27 |
---|---|
7월 25일 - record (0) | 2021.07.25 |
기초로 되돌아 간 것은 옳았던 걸 지도 (0) | 2021.07.23 |
Day 23 - Record (0) | 2021.07.23 |
알고리즘 풀이 - Day 15 (0) | 2021.07.15 |