기본 구조가 어느 정도 마련되어 있는 프로그래머스와 달리 백준은 내가 셀프로 입력까지 다 받아야 한다.
파이썬할 때는 굉장히 쉬웠는데 자바스크립트는 어려워서 내가 보려고 정리해두는 JS 입력 방법.
✅ 사전 준비
우선 node.js와 VSCode는 당연히 설치되어 있어야 한다.
그리고 쉽게 실행시켜보기 위해서 VSCode Extension을 하나 깔아준다.

이걸 설치하면 단축키 `Ctrl+Alt+N`으로 쉽게 파일을 실행시킬 수 있다. 실행 중지는 `Ctrl+Alt+M`

이렇게 오른쪽 위에 실행할 수 있는 버튼(▷)도 생기니 이걸 이용해도 된다.
✅ 입력 받아보기
const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt";
const input = fs.readFileSync(filePath).toString();
백준의 서버는 리눅스인데 이 경우에 인풋 파일은 dev/stdin에 저장되어 있다고 한다.
내 컴퓨터에서는 별도로 만든 인풋 파일에서 테스트 케이스를 저장해 둘 것이다. 파일명은 마음대로 해도 되는데 나는 "input.txt"라고 정했다.
그리고 이것을 fs 모듈을 이용해서 가져와서 문자열(string) 형식으로 변형해서 input에 저장해서 사용한다.(변수명 input도 마음대로 변경 가능) 문자열 형식으로 저장된다는 것을 꼭 기억해야 한다. 자바스크립트는 타입이 유연하기 때문에 의도치 않게 오류가 발생할 수도 있다.
그리고 input은 입력받으려는 데이터 형태에 따라 받는 방법이 달라진다. 많이 나오는 유형들에 대해 어떻게 입력 받아야할지 방법을 아래에 정리해봤다.
1) 한 개만 입력 받기
5
const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt";
const input = fs.readFileSync(filePath).toString().trim(); // 한 개 입력 받을 때
2) 공백을 기준으로 여러 글자(한 줄) 입력 받기
1 3
const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt";
const input_line = fs.readFileSync(filePath).toString().split(" "); // 입력 값이 한 줄
split(" ")
으로 공백을 기준으로 나눠준다.
3) 여러 줄 입력 받기
Hi
How are you?
Not good
const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt";
const input_lines = fs.readFileSync(filePath).toString().trim().split("\n"); // 입력 값이 여러 줄
4) 첫 줄에 자연수 n을 받고, 다음 줄에 공백으로 구분된 여러 값 입력 받기
5
1 2 3 4 5
const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt";
const [n, ...arr] = fs.readFileSync(filePath).toString().trim().split(/\s/);
5) 첫 줄에 자연수 n을 받고, 다음 줄부터 여러 개의 줄에 걸쳐 한 줄에 하나의 값을 입력 받기
5
1
2
3
4
5
const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt";
const [n2, ...arr2] = fs.readFileSync(filePath).toString().trim().split("\n");
입력 받으면서 문자열->숫자로 변환하기
const input = fs.readFileSync(filePath).toString().split(" ").map(a => +a);
단항연산자 +
를 붙이면 문자열을 숫자로 변환할 수 있다. 이것을 콜백 함수를 배열의 각 요소에 실행해주는 map()
함수를 이용하여 모든 배열의 요소들을 숫자로 변환할 수 있다.
❔ 궁금한 점
1. require()이란?
=> Node.js에서 모듈을 불러오는 함수. ES6에서 새롭게 도입된 import와 비슷하지만, 다른 점들이 몇 가지 있다.
자세한 내용은 여기서.
2. fs 모듈?
=> fs는 FileSystem의 약자로, fs 모듈은 파일 처리에 관련된 모듈이다.
3. /dev/stdin
=> 유닉스 계열 운영체제(예: 리눅스, macOS)에서 표준 입력을 나타내는 특수 파일.
이 파일을 사용하여 프로그램은 표준 입력에서 데이터를 읽을 수 있다. Javascript에서는 기본적으로 파일 시스템에 직접 접근할 수 없지만, Node.js와 같은 런타임 환경을 사용하면 /dev/stdin
을 통해 표준 입력을 읽을 수 있다.
4. split(\/s/)는 무슨 뜻?
=> 우선 괄호 안의 \/s/ 이건 정규 표현식으로, 뜻을 풀어보면 다음과 같다.
- /.../: 슬래시로 둘러싸인 부분은 정규 표현식을 나타낸다.
- \s: 공백 문자를 의미하는 정규 표현식. 공백 문자에는 스페이스, 탭, 폼 피드, 줄 바꿈 등이 포함된다.
스페이스와 줄 바꿈 문자를 모두 포함하는 공백 문자를 사용함으로써 첫 줄에 한 글자를 입력받고, 다음 줄에 공백을 기준으로 구분된 여러 값을 입력받더라도 한 번에 처리할 수 있게 되는 것이다.
[참고]
'Language > Javascript·Typescript' 카테고리의 다른 글
[Javascript/자바스크립트] 배열 생성 및 초기화 (0) | 2024.06.21 |
---|---|
[Javascript/자바스크립트] 대문자 소문자 변환 (0) | 2024.06.21 |
[Javascript/자바스크립트] 타입 (0) | 2024.06.19 |
[TypeScript/타입스크립트] 클래스 Class (0) | 2023.04.06 |
[TypeScript/타입스크립트] 리터럴, 유니온/교차 타입 (0) | 2023.03.31 |
기본 구조가 어느 정도 마련되어 있는 프로그래머스와 달리 백준은 내가 셀프로 입력까지 다 받아야 한다.
파이썬할 때는 굉장히 쉬웠는데 자바스크립트는 어려워서 내가 보려고 정리해두는 JS 입력 방법.
✅ 사전 준비
우선 node.js와 VSCode는 당연히 설치되어 있어야 한다.
그리고 쉽게 실행시켜보기 위해서 VSCode Extension을 하나 깔아준다.

이걸 설치하면 단축키 `Ctrl+Alt+N`으로 쉽게 파일을 실행시킬 수 있다. 실행 중지는 `Ctrl+Alt+M`

이렇게 오른쪽 위에 실행할 수 있는 버튼(▷)도 생기니 이걸 이용해도 된다.
✅ 입력 받아보기
const fs = require("fs"); const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt"; const input = fs.readFileSync(filePath).toString();
백준의 서버는 리눅스인데 이 경우에 인풋 파일은 dev/stdin에 저장되어 있다고 한다.
내 컴퓨터에서는 별도로 만든 인풋 파일에서 테스트 케이스를 저장해 둘 것이다. 파일명은 마음대로 해도 되는데 나는 "input.txt"라고 정했다.
그리고 이것을 fs 모듈을 이용해서 가져와서 문자열(string) 형식으로 변형해서 input에 저장해서 사용한다.(변수명 input도 마음대로 변경 가능) 문자열 형식으로 저장된다는 것을 꼭 기억해야 한다. 자바스크립트는 타입이 유연하기 때문에 의도치 않게 오류가 발생할 수도 있다.
그리고 input은 입력받으려는 데이터 형태에 따라 받는 방법이 달라진다. 많이 나오는 유형들에 대해 어떻게 입력 받아야할지 방법을 아래에 정리해봤다.
1) 한 개만 입력 받기
5
const fs = require("fs"); const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt"; const input = fs.readFileSync(filePath).toString().trim(); // 한 개 입력 받을 때
2) 공백을 기준으로 여러 글자(한 줄) 입력 받기
1 3
const fs = require("fs"); const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt"; const input_line = fs.readFileSync(filePath).toString().split(" "); // 입력 값이 한 줄
split(" ")
으로 공백을 기준으로 나눠준다.
3) 여러 줄 입력 받기
Hi How are you? Not good
const fs = require("fs"); const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt"; const input_lines = fs.readFileSync(filePath).toString().trim().split("\n"); // 입력 값이 여러 줄
4) 첫 줄에 자연수 n을 받고, 다음 줄에 공백으로 구분된 여러 값 입력 받기
5 1 2 3 4 5
const fs = require("fs"); const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt"; const [n, ...arr] = fs.readFileSync(filePath).toString().trim().split(/\s/);
5) 첫 줄에 자연수 n을 받고, 다음 줄부터 여러 개의 줄에 걸쳐 한 줄에 하나의 값을 입력 받기
5 1 2 3 4 5
const fs = require("fs"); const filePath = process.platform === "linux" ? "dev/stdin" : "run/input.txt"; const [n2, ...arr2] = fs.readFileSync(filePath).toString().trim().split("\n");
입력 받으면서 문자열->숫자로 변환하기
const input = fs.readFileSync(filePath).toString().split(" ").map(a => +a);
단항연산자 +
를 붙이면 문자열을 숫자로 변환할 수 있다. 이것을 콜백 함수를 배열의 각 요소에 실행해주는 map()
함수를 이용하여 모든 배열의 요소들을 숫자로 변환할 수 있다.
❔ 궁금한 점
1. require()이란?
=> Node.js에서 모듈을 불러오는 함수. ES6에서 새롭게 도입된 import와 비슷하지만, 다른 점들이 몇 가지 있다.
자세한 내용은 여기서.
2. fs 모듈?
=> fs는 FileSystem의 약자로, fs 모듈은 파일 처리에 관련된 모듈이다.
3. /dev/stdin
=> 유닉스 계열 운영체제(예: 리눅스, macOS)에서 표준 입력을 나타내는 특수 파일.
이 파일을 사용하여 프로그램은 표준 입력에서 데이터를 읽을 수 있다. Javascript에서는 기본적으로 파일 시스템에 직접 접근할 수 없지만, Node.js와 같은 런타임 환경을 사용하면 /dev/stdin
을 통해 표준 입력을 읽을 수 있다.
4. split(\/s/)는 무슨 뜻?
=> 우선 괄호 안의 \/s/ 이건 정규 표현식으로, 뜻을 풀어보면 다음과 같다.
- /.../: 슬래시로 둘러싸인 부분은 정규 표현식을 나타낸다.
- \s: 공백 문자를 의미하는 정규 표현식. 공백 문자에는 스페이스, 탭, 폼 피드, 줄 바꿈 등이 포함된다.
스페이스와 줄 바꿈 문자를 모두 포함하는 공백 문자를 사용함으로써 첫 줄에 한 글자를 입력받고, 다음 줄에 공백을 기준으로 구분된 여러 값을 입력받더라도 한 번에 처리할 수 있게 되는 것이다.
[참고]
'Language > Javascript·Typescript' 카테고리의 다른 글
[Javascript/자바스크립트] 배열 생성 및 초기화 (0) | 2024.06.21 |
---|---|
[Javascript/자바스크립트] 대문자 소문자 변환 (0) | 2024.06.21 |
[Javascript/자바스크립트] 타입 (0) | 2024.06.19 |
[TypeScript/타입스크립트] 클래스 Class (0) | 2023.04.06 |
[TypeScript/타입스크립트] 리터럴, 유니온/교차 타입 (0) | 2023.03.31 |