Node.js에서 실행하는 JavaScript

강연주·2025년 10월 14일

📚 TIL

목록 보기
177/186

Node.js에서 표준 입력을 처리하는 JS 코드

🖥️ JavaScript
process.stdin.setEncoding('utf8');
// 표준 입력(stdin)으로 들어오는 데이터를 utf8 문자열로 읽겠다는 설정
// 입력을 문자열로 받음 (기본은 Buffer라서)

process.stdin.on('data', data =>
   // data: 사용자가 입력한 전체 문자열
   // 표준 입력에서 데이터가 들어올 때마다 이벤트 리스너가 실행된다.

   { const n = data.split(" "); 
   // 입력받은 문자열을 공백 " " 기준으로 잘라 배열로 만든다.
   // 예: "10 20" 입력 → ["10", "20"]
     const a = Number(n[0]), b = Number(n[1]);
   // 잘라낸 문자열을 숫자로 변환해서 a, b에 저장.
     console.log(a);
     console.log(b); });
   // 각각 출력
    
// 입력을 한 번에 받아서 처리하는 방식이다.
  • 이게 자바스크립트야?
  • ☀️ 네, 맞습니다. 😊
    이 코드는 Node.js 환경에서 실행하는 JavaScript예요.
  • 이거 알고리즘 문제인데, 코드 작성하는 부분에 이렇게 써 있었어. 자바스크립트인데 이렇게 써 있어서 이해가 안가
  • ☀️ 알고리즘 문제 사이트(백준, 프로그래머스, 코딜리티 같은 곳)에서 "JavaScript (Node.js)" 언어 선택을 하면 보통 저런 코드 템플릿이 기본으로 주어져요.
// 예시 실행
$ node test.js
10 20
// 출력
10
20

➡️ Node.js에서 표준 입력을 받아 처리하는 JavaScript 코드이다.


위 코드가 써있는 이유

  • 알고리즘 문제는 보통 stdin(표준 입력)으로 테스트 데이터를 넣어 준다.

  • 웹 브라우저에서 쓰는 JS는 prompt() 같은 걸로 입력 받지만,
    온라인 채점 서버는 터미널 기반(Node.js)이라 process.stdin으로 입력을 읽어야 한다.

  • 그래서 문제에서 제공하는 기본 코드에 저 부분이 포함돼 있다.


프로그래머스 기존 문제 형태와 비교

1. function solution(...) { ... } 형태

대부분의 프로그래머스 문제는 테스트 케이스를 함수 인자로 직접 넣어 준다.

그래서 입력을 직접 처리할 필요 없이,

🖥️ JavaScript
function solution(a, b) {
    return a + b;
}

이렇게만 작성하면 되고, 채점 시스템이 알아서 solution(3, 4) 같은 식으로 호출.

2. process.stdin ... 형태

그런데 몇몇 문제는 "입력값을 직접 읽어서 처리" 하는
콘솔 입출력 기반 스타일이다.

이런 경우는 백준처럼 표준 입력을 사용해야 하니까
process.stdin 템플릿이 주어진다.

즉, 프로그래머스도 문제마다 환경이 달라서,

  • 코딩테스트용 실전 모드 → process.stdin
  • 연습문제 / Level 1~3 문제들 → solution() 함수 형태

이렇게 두 가지 방식을 섞어서 보여 준다.

➡️ 기업 실전 테스트 환경은 보통 Node.js에서 stdin/out 처리하는 방식이라, 그걸 경험해보라고 process.stdin 코드가 나오는 것!


코드 문법 설명

process.stdin.setEncoding('utf8');

  • process.stdin: Node.js에서 표준 입력(standard input)을 의미한다. 터미널에서 사용자가 입력하는 데이터를 가리킴.

  • .setEncoding('utf8'): 기본적으로 입력은 Buffer(이진 데이터) 형태라서 문자열로 바꿔줘야 한다. 'utf8'로 설정하면 사람이 읽을 수 있는 문자열이 된다.

process.stdin.on('data', data => {

  • .on('data', callback): 입력이 들어올 때마다 이벤트를 감지해서 callback을 실행.

  • data: 사용자가 입력한 값 전체가 들어온다. (문자열)

    const n = data.split(" ");

  • .split(" "): 문자열을 " "(공백) 기준으로 나눠 배열로 만듦
    예: "3 4" → ["3", "4"];

    const a = Number(n[0]), b = Number(n[1]);

  • n[0]: 배열 첫 번째 요소 "3"

  • n[1]: 배열 두 번째 요소 "4"

  • Number() : 문자열을 숫자로 변환. (parseInt와 비슷)
    a = 3, b = 4가 된다.

    console.log(a);
    console.log(b);
    });
    각각 출력. console.log()는 브라우저에서 쓰는 것과 똑같이 동작.


A+B 문제 예시 (두 가지 방식 비교)

(두 정수 A, B를 입력받아 A+B 출력하기)

1. process.stdin 방식 (실전용 / Node.js stdin/out)

🖥️ JavaScript
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const input = data.trim().split(" ");   // 입력 문자열을 공백으로 나눔
    const a = Number(input[0]);
    const b = Number(input[1]);
    console.log(a + b);
});
실행 예시
입력: 3 4
출력: 7

➡️ 백준/프로그래머스 실전 모드 같은 곳에서 채점 서버가 stdin으로 값을 줄 때

2. solution 함수 방식 (프로그래머스 연습 문제용)

🖥️ JavaScript
function solution(a, b) {
    return a + b;
}

실행 예시
console.log(solution(3, 4)); // 7

➡️ 프로그래머스 대부분의 연습문제는 이렇게 함수만 작성하면 채점 시스템이 알아서 solution(3, 4)처럼 호출한다.


온라인 저지에서 자주 쓰는 패턴

1. 한 줄 입력

🖥️ JavaScript
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim();
console.log(input);

2. 여러 줄 입력

🖥️ JavaScript
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
console.log(input);

3.공백 단위 숫자 입력

🖥️ JavaScript
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(" ").map(Number);
console.log(input);
  • 더 자주 보이는 방식 ➡️ (fs.readFileSync('/dev/stdin'))
  • process.stdin.on('data') 버전은 이벤트 기반 입력이라,
    마찬가지로 동작하지만 초보자한테는 다소 낯설 수 있다.

profile
아무튼, 개발자

0개의 댓글