✏️기록하는 즐거움
article thumbnail

Link

 

1000번: A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력 > 첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력 > 첫째 줄에 A+B를 출력한다.

 

제출

const fs = require("fs");

const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `1 2`
).split(" ");

console.log(parseInt(stdin[0]) + parseInt(stdin[1]));

 

개념

JavaScript로 입력받기

  • JavaScript(Node.js)에는 C언어의 scanf, Python의 input과 같이 입력할 수 있는 함수가 없다.
    따라서 fs모듈이나 readline을 사용하여 유저에게 입력을 받는다.
  • fs모듈을 사용하는 것이 더 간단해 보여서 fs모듈로 풀었다.

fs모듈로 stdin 로드

  • fs모듈은 파일 처리와 관련된 작업을 하는 모듈로 FileSystem을 의미한다.
  • 대부분의 메소드가 동기/비동기로 나뉘고 메소드 이름에 'Sync'가 붙어있으면 동기 방식을 의미한다.
  • [options]에는 인코딩 방식을 쓰고, 웹에서는 UTF-8을 사용한다. 
    • fs.readFile(filename, [options], callback) : filename의 파일을 [options]의 방식으로 읽은 후 callback으로 전달된 함수를 호출 (비동기)
    • fs.readFile(filename, [options]) : filename의 파일을 [options]의 방식으로 읽은 후 문자열을 반환 (동기)
  • stdin이란 standard input의 약자로 표준 입력에서 데이터를 읽어온다고 이해하면 된다.
// fs모듈
const fs = require("fs");

// stdin 로드
const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `1 2`
).split(" ");

console.log(parseInt(stdin[0]) + parseInt(stdin[1]));
  • 백준 사이트나 맥 OS, 리눅스는 유닉스 기반이라 stdin을 읽어와 사용이 가능하지만
    시스템에 따라 stdin의 경로가 다르므로 Windows를 쓰는 나의 경우에는
    조건부(삼항) 연산자를 이용하는 방법을 채택했다.
  • Node.js 프로세스가 실행 중인 운영 체제가 linux라면 stdin은 로드하여 입력을 받고, 그렇지 않다면 입력한 예제를 사용한다.
  • 예제 입력에 줄 바꿈이 있는 경우 split('\n')을 사용하면 된다.

toString()

  • 객체의 문자열 표현을 반환하는 메서드
  • fs.readFileSync("/dev/stdin", "utf-8")처럼 인코딩이 지정되어 있지 않으면 fs.readFileSync("/dev/stdin")의 반환값은 Buffer 객체이기 때문에 toString()을 사용하여 문자열로 변환해주어야 한다.

 

[ 참고한 링크 ]

 


Comment

두 수를 입력받는다고 해서 prompt를 생각했었다. 생각해보니 콘솔창으로 입력받아야 하는데 prompt는 웹에서 입력창을 이용하기 때문에 안된다는 것을 깨달았다🥲

구글링 해보니 fs모듈이라는 것이 있었고 생각보다 쉽게 구현할 수 있다는 점에 놀라웠다.

새로운 입력 방식을 알게 된 문제🐣

profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!