본문 바로가기
자료구조 알고리즘/코딩테스트 풀이

백준 2884 자바스크립트(node js)

by 쿠리의일상 2023. 2. 2.

https://www.acmicpc.net/problem/2884

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

문제는 쏘쏘...... 하지만 이번엔 fs모듈이 아니라 readline 모듈을 사용해봤다.. (구글링해도 어렵다)

시간도 엄청 걸린다... C언어 계열만 하다가 너무 느려서 두번 놀람...

 

 

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

function Alarm(h, m) {
  m -= 45;

  if(m < 0){
    m = m + 60;
    h--;
    if(h < 0)
    h = 23;
  }
  console.log(h, m);
}

rl.on('line', function(line) {
  let input = line.split(" ");
  let inputHour = parseInt(input[0]);
  let inputMinute = parseInt(input[1]);
  Alarm(inputHour, inputMinute);
  rl.close();
}).on('close', function() {
  process.exit();
});

문제 자체는 어려운게 아니니 그렇다고 치고... readline 모듈 사용을 정리하자면

const readline = require("readline"); //readline을 require 하기
const rl = readline.createInterface({
  input:process.stdin,
  output:process.stdout
});

rl.on('line', function(line) { //line 단위로 읽어옵니다
  let input = line.split(" "); //이번 문제는 한줄짜리라서 공백으로만 나눠줬음
  
  // 읽어온 값을 원하는 형태로 형변환해서 정제
  let x = parseInt(input[0]);
  let y = parseInt(input[1]);
  
  // 문제 해답 작성해주기
  
  rl.close(); //readline 끝낼 때 꼭 써줘야함...
}).on('close', function() {
  process.exit();
});

자꾸 런타임 에러 나서 구글링 열심히 했다......... 입력 받는게 문제보다 더 어려움..

런타임 에러가 나는 이유는 rl.on() 메서드를 쓸 때 line 별로 읽어오는게 이해가 안돼서 line의 데이터를 정제하는데 애먹었음..ㅎㅎ