백준 Node.js 입출력 정리

김현재·2021년 7월 6일
23
post-thumbnail

Node.js에서 콘솔에 입출력을 받는 방식은 크게 2가지이다.
백준에서도 이 방법을 사용하여 알고리즘을 풀어야하니 정확히 이해해둘것!⭐️



입력

readline 모듈

readline 모듈은 JS 내장 모듈로, 한 번에 한 줄씩 Readable 스트림 (예 : process.stdin)에서 데이터를 읽기위한 인터페이스를 제공한다.
처음 생성 시 createInterface를 통해 input, output을 설정해준다.
다음에, 입력을 갖고 처리할 callback함수인 function(line)을 설정해준다.

const readline = require('readline');

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

rl.on('line', function(line) {
  console.log(line); //입력 값을 처리할 callback 내용 기제

  rl.close(); //callback 종료
}).on("close", function() {
  process.exit(); // 출력과 관련된 내용 기재 (console.log같은거..)
});

매개변수 line에 할당되는 내용이 입력값이다 (문자열로 할당)

close()

입력을 원하는만큼 받기 위해서는 원하는 조건을 입력한 후, rl.close()를 기재하면 된다.
즉, rl.close()는 말 그대로 입력을 멈추는 기능을 하는 것!

const readline = require('readline');

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

let count = 0;

rl.on('line', (input) => {
  console.log(`Recived : ${input}`);
  count += 1;
  if (count === 3) {
    rl.close();
  }
  // 위의 경우 입력을 3번 받은 후 close한다
});


fs 모듈

fs 모듈은 FileSystem의 약자로 파일 처리와 관련된 모듈이다.

readFile()

fs.readFile(filename, [options], callback)

filename의 파일을 [options]의 방식으로 읽은 후 callback으로 전달된 함수를 호출한다. (비동기적)

readFileSync()

fs.readFileSync(filename, [options])

filename의 파일을 [options]의 방식으로 읽은 후 문자열을 반환한다. (동기적)


Sync가 붙은 것은 동기적 읽기, 붙지 않은 것은 비동기적 읽기이다.
동기적 읽기로 읽게 되면 파일을 읽으면서 다른 작업을 동시에 할 수 없다.
하지만 비동기적으로 읽으면 파일을 읽으면서 다른 작업도 동시에 수행할 수 있고,
파일을 다 읽으면 매개변수 callback으로 전달한 함수가 호출된다.

[options]에는 보통 인코딩 방식이 오게 되며 웹에서는 utf8을 주로 사용한다.

다양한 예시

var fs = require("fs")

// 문자 하나만 입력받을 경우
var input = fs.readFileSync("/dev/stdin").toString()

// 한칸 띄어쓰기로 구분
// input[0], input[1] 배열에서 꺼내쓰면 된다.
var input = fs
  .readFileSync("/dev/stdin")
  .toString()
  .split(" ")

// 줄바꿈으로 구분
var input = fs
  .readFileSync("/dev/stdin")
  .toString()
  .split("\n")

// 만약 인풋값이 숫자라면
var input = fs
  .readFileSync("/dev/stdin")
  .toString()
  .split(" ")
  .map(function(a) {
    return +a
  })


출력

두가지 방법 모두 console.log 를 사용한다


참고자료

profile
쉽게만 살아가면 재미없어 빙고!

3개의 댓글

comment-user-thumbnail
2021년 7월 6일

너~~~무 좋은 글이네요 ^^

답글 달기
comment-user-thumbnail
2021년 7월 6일

너무너무 궁금했는데!! 찰떡 해석 감사합니다!!

답글 달기
comment-user-thumbnail
2021년 11월 24일

감사합니다.

답글 달기