일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 기술면접
- 리액트
- 프로그래머스
- 코테
- Node
- BOJ
- react
- 연결리스트
- 해시
- JavaScript
- state
- 코딩테스트
- 최소공배수
- node.js
- 알고리즘
- 자료구조
- JS
- 백준
- hash
- useState
- sort
- 완전탐색
- 합병 정렬
- 정규표현식
- CSS
- 정렬
- 딥다이브
- 브루트포스
- 병합 정렬
- 자바스크립트
- Today
- Total
가치투자자
[BOJ] JS로 백준(BOJ) 푸는 법 및 VSCode 환경 세팅 본문
JS로 백준 푸는 법
1. Node.js fs모듈 사용법
백준에서 JavaScript로 문제를 풀기 위해선 Node.js를 사용해야 하며, 이때 readline 모듈이나 fs 모듈로 입력값(input)을 받아와야 한다.
이 중 속도나 코드의 길이, 작성 편리성에 있어 fs 모듈 이 더 나으므로, fs 모듈로 백준 문제를 풀어보고자 한다.
1) 입력값(input)의 종류에 따른 fs 모듈 사용법
어떤 종류의 입력값을 받냐에 따라 fs 모듈의 코드가 달라진다.
(1) 입력값이 하나일 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim();
예시>
3
(2)입력값 사이에 공백에 끼여있을 때
- split(' ') 로 공백을 잘라주면, 입력값들은 배열 로 input에 할당된다
- 입력값들을 정수 로 바꾸려면 맨 끝에 .map(Number) 을 추가
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ');
예시>
1 3 5
input = ['1', '3', '5']
(3) 여러 줄로 입력값이 나열되어 있을 때
- split('\n') 로 줄바꿈(enter)을 잘라주면, 입력값들은 배열 로 input에 할당된다
- 입력값들을 정수 로 바꾸려면 맨 끝에 .map(Number) 을 추가
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
예시>
1
2
input = ['1', '2']
(4) 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄에 공백으로 구분된 n개의 값들을 입력받을 때
- split(/\s/) 로 space를 잘라주면 input에는 배열 로 할당되고, 이를 구조분해할당 으로 n과 arr로 나눌 수 있다
- 입력값들을 정수 로 바꾸려면 맨 끝에 .map(Number) 을 추가
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);
const [n,...arr] = input;
예시>
3
1 2 3
n = '3'
arr = ['1', '2', '3']
(4-1) parseInt로 입력값을 정수로 만들고 싶을 경우
- map 으로 배열 arr의 모든 요소를 돌면서 parseInt() 로 각 요소들을 정수 로 바꿔준다
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);
const [n,...arr] = input;
n = parseInt(n);
arr = arr.map((item) => parseInt(item));
예시>
3
1 2 3
n = 3
arr = [1, 2, 3]
(5) 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄부터 n개의 줄에 걸쳐 한 줄에 하나의 값을 입력받을 때
- split('\n') 로 줄바꿈(enter)을 잘라주면 input에는 배열 로 할당되고, 이를 구조분해할당 으로 n과 arr로 나눌 수 있다
- 입력값들을 정수 로 바꾸려면 맨 끝에 .map(Number) 을 추가
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n,...arr] = input;
예시>
2
4
1
n = '2'
arr = ['4', '1']
2) 입력값(input)이 문자열인데 왜 toString()을 쓸까?
그 이유는 require('fs').readFileSync('/dev/stdin') 의 반환값이 문자열(String)이 아닌 Buffer 객체 이기 때문이다.
따라서 이 반환값을 문자열로 바꿔주지 않으면 오류가 날 수 있으니 아래처럼 문자열로 바꿔줘야 한다.
const input = require('fs').readFileSync('/dev/stdin');
console.log(typeof input); // object
const input2 = require('fs').readFileSync('/dev/stdin').toString();
console.log(typeof input2); // string
const input3 = require('fs').readFileSync('/dev/stdin')+'';
console.log(typeof input3); // string
const input4 = require('fs').readFileSync('/dev/stdin', 'utf8');
console.log(typeof input4); // string
3) trim()을 쓰는 이유는 무엇일까?
trim() 은 앞뒤의 공백을 모두 제거 해주는 메서드다.
따라서 입력값 끝에 개행문자(줄바꿈 문자)가 있을 수 있으니 trim()으로 제거해줘야 한다.
예시>
// 입력값 'a\nb\nd\n'
const input = require('fs').readFileSync('/dev/stdin').toString();
console.log(input); // [ 'a', 'b', 'd', '' ]
2. JavaScript를 테스트 할 수 있는 VSCode 환경 세팅
1) Node.js 다운로드
- Node.js 다운로드 : https://nodejs.org/en/
VSCode에서 JavaScript를 테스트하기 위해선 Node.js를 설치해야 한다.
왼쪽의 LTS는 장기적으로 안정된 지원이 보장된 버전이고, 오른쪽 Current는 최신 기능 버전이다.
코드 작성뿐만 아니라, 차후 코딩을 위해선 LTS 버전 설치 를 권해드린다.
설치된 후 터미널창에 node -v 를 입력해보면 node 버전을 확인해서 제대로 설치되었는지 알 수 있다.
2) Code Runner 다운로드
VSCode에서 코드를 실행하기 위해선 확장 플러그인에서 Code Runner 를 설치해줘야 한다.
이 확장 프로그램을 실행하면, VSC 터미널 출력창에서 결과값을 출력할 수 있다.
- 코드 실행 단축키 : Ctrl + Alt + N (control + option + N)
3) VSCode 파일 구성
백준 문제를 풀기 위해 아래처럼 구성하는 것을 추천한다.
10773번을 예시로 파일 구성들을 설명하고자 한다.
(1) 예제 입력값 파일 : example.txt
백준 예제 값을 복사해서 이 파일에 적어주면 된다.
(2) JS 코드 실행 파일 : index.js
example.txt의 예제 입력값을 실행할 JS코드를 적는 파일이다.
이때 백준에 적을 때와 다른 점은 readFileSync() 부분이다.
VSCode에서 실행할 땐, 예제값이 적힌 'example.txt' 를 적고, 백준에서는 '/dev/stdin' 을 적어줘야 한다.
(3) 백준에 업로드할 코드 : backjoon10773.js
index.js에서 코드를 연습해보고, 완성된 코드는 backjoon10773.js 파일에 저장해주면 좋다.
(4) .gitignore
만약 백준에 올리기 위해 3번 파일을 만든다면, 매번 예시가 바뀌는 example.txt 파일과 index.js 파일이 문제가 될 수 있다.
이때, 아무런 영향을 주지 않도록 무시해주는 파일 을 .gitignore 파일에 적어주면 좋다.
References
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 1181번 : 단어 정렬 (0) | 2023.03.30 |
---|---|
[BOJ] 2751번 : 수 정렬하기2 (0) | 2023.03.30 |
[BOJ] 24060번 : 병합 정렬1 (0) | 2023.03.25 |
[BOJ] 2164번 : 카드2 (자료구조) (0) | 2023.03.09 |
[BOJ] 10773번 : 제로 (0) | 2023.03.04 |