가치투자자

[BOJ] JS로 백준(BOJ) 푸는 법 및 VSCode 환경 세팅 본문

Problem Solving/BOJ

[BOJ] JS로 백준(BOJ) 푸는 법 및 VSCode 환경 세팅

미주민 2023. 3. 4. 03:20
728x90
반응형

 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', '' ]

 

728x90

 


2. JavaScript를 테스트 할 수 있는 VSCode 환경 세팅

1) Node.js 다운로드

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

 

728x90
반응형

'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