38일차 - 2022.04.07

안병욱·2022년 4월 7일

오늘 공부한 내용 요약

readline 모듈

js의 내장모듈

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function (line) {
    ((1))
    
}).on('close', function () {
  process.exit();
});

기본적으로 위의 코드를 토대로 ((1))에 fs모듈에서와 같이 선언하고 호출하면 되는 방식.

각각을 간단히 알아보면

input: process.stdin,

이건 사용자의 입력을 받기 위함이고

output: process.stdout

이건 출력 이벤트를 위함이며

process.exit();
프로세스의 실행을 종료하고 프로그램을 끝냄


Baekjoon에서 문제풀이

1) 문제 : N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다. 출력형식과 같게 N1부터 N9까지 출력한다.
ex) 2입력시 2 * 1 =2 이런식으로 쭉 출력되야함

풀이
1.

const fs = require('fs');
const input = readFileSync('/dev/stdin').toString().trim().split();

const N = Math.floor(parseInt(input[0]));

if (N>=1 && N <= 9){
    for(let i=1; i <10 ; i++) {
        console.log(`${N} * ${i} = ${N * i}`);
    }   
}

런타임 오류라고 뜨지만 fs모듈이라 오류가 뜨는거 같음 / 맞다고 생각

const readline = require('readline');
const rl = readline.createInterface({
    input : process.stdin,
    output : process.stdout
});

let input = [];

rl.on('line',function(line) {
    let N = parseInt(line);
 for (let i = 1; i <= 9; i++) {
    console.log(`${N} * ${i} = ${N * i}`);
  }
}).on('close', function () {
  process.exit();
});

readline 모듈로 하니 해결


앞서 풀었던 문제들 중 일부를 readline모듈을 이용해 풀어봄


2) 문제 : 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 첫째 줄에 A와 B가 주어진다. (0 < A, B < 10) .첫째 줄에 A+B를 출력한다.

풀이

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});



rl.on('line', function (line) {
    const input = line.split(' ');
    
    let A = parseInt(input[0]);
    let B = parseInt(input[1]);
       if(A>0 && B <10) {console.log(A+B); }
    
    rl.close();
}).on('close',function() {
    process.exit();
});    

readline 모듈로 풀이해봄


3) 문제 : 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오. 서기 연도를 알아보고 싶은 불기 연도 y가 주어진다.
(1000 ≤ y ≤ 3000)


풀이
1.

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function (line) {
     const input = line.split(' ');
    let y = parseInt(input[0]);
    
    if (1000 <= y <= 3000 ) {
        console.log(y - 543);
    }
    
}).on('close', function () {
  process.exit();
});

  1. 문제 : 현재 상근이가 설정한 알람 시각이 주어졌을 때, 알람을 45분 앞서는 시간으로 변환하는 프로그램을 작성하시오.
    첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다. 입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.

풀이
1.

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function (line) {
    const input = line.split(' ');
    
    let H = parseInt(input[0]);
    let M = parseInt(input[1]);
    
    if (M-45 >=0 ){
        console.log(`${H}` + " " + `${M-45}`);
    } else if (H>=1){
        console.log(`${H-1}` + " " + `${M+15}`);   
    } else {
        console.log(23 + " " + `${M+15}`);
    }
}).on('close', function () {
  process.exit();
});

5) 문제 : 문제 : 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받음
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받음
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받음

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.
첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.
첫째 줄에 게임의 상금을 출력 한다.


풀이
1.

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function (line) {
    const input = line.split(' ');
    
    let a = Math.floor(parseInt(input[0]));
let b = Math.floor(parseInt(input[1]));
let c = Math.floor(parseInt(input[2]));
let d = Math.max(a,b,c);

if (1<= a,b,c <= 6) {
    if (a==b && a==c && b==c) {
        console.log(`${10000+(a*1000)}`);
    } else if (a !==b && a!==c && b!==c) {
        console.log(`${d*100}`);
    } else if (a-b ==0){
        console.log(`${1000+(a*100)}`);
    } else {
        console.log(`${1000+(c*100)}`);
    }
}
    
}).on('close', function () {
  process.exit();
});

6) 문제 : 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
(연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다)

풀이
1.

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function (line) {
    const input = line.split(' ');
    
    let a = parseInt(input[0]);
    if (a>=1 && a <=4000) {
    if ((a % 4==0)&&(a % 100 !=0)) {
     console.log(1);   
    } else if((a % 4==0)&&(a % 400==0)){
        console.log(1);
    } else {
     console.log(0);
    }
}
    
}).on('close', function () {
  process.exit();
});

7) 문제 : n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.
첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.
1부터 n까지 합을 출력한다.


풀이
1. fs모듈 사용

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');

let n = parseInt(input[0]);

if (1 <= n && n<= 10000) {
    let sum = 0;
    
    for(let i=1 ; i <= n; i++) {
        sum += i;
    }
    console.log(sum);
}
  1. readline 모듈 사용
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function (line) {
    const input = line.split(' ');
    
    let n = parseInt(input[0]);
    if (1 <= n && n<= 10000) {
    let sum = 0;
    
    for(let i=1 ; i <= n; i++) {
        sum += i;
    }
    console.log(sum);
}
    
}).on('close', function () {
  process.exit();
});

하루 돌아보며

완벽히는 아니지만 readline 모듈사용법을 어느정도 알겠음.
만족도 : ★★☆☆☆

공부 출처

BaekJoon


위의 내용은 공부중 본인이 이해한 내용으로 몇몇 틀린 내용이 있을 수 있습니다.
회독중 발견시 수정하겠습니다

profile
working hard

0개의 댓글