본문 바로가기
코딩 일지 <Dev Log>

readline module - 2

by 실버사서 Silver Librarian 2021. 7. 24.

이는 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 을 써 보면서 대응 해 봐야 할 것 같습니다.

'코딩 일지 <Dev Log>' 카테고리의 다른 글

7월 27일 - record  (0) 2021.07.27
7월 25일 - record  (0) 2021.07.25
readline module - 2  (0) 2021.07.24
기초로 되돌아 간 것은 옳았던 걸 지도  (0) 2021.07.23
Day 23 - Record  (0) 2021.07.23
알고리즘 풀이 - Day 15  (0) 2021.07.15

댓글0