Link
문제
두 정수 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모듈이라는 것이 있었고 생각보다 쉽게 구현할 수 있다는 점에 놀라웠다.
새로운 입력 방식을 알게 된 문제🐣
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 10998: A x B (javascript) (0) | 2022.02.04 |
---|---|
[백준] 1001: A-B (javascript) (0) | 2022.02.04 |
[백준] 10172: 개 (javascript) (0) | 2022.01.19 |
[백준] 10171: 고양이 (javascript) (0) | 2022.01.19 |
[백준] 10718: We love kriii (javascript) (0) | 2022.01.19 |