Computer Science/Algorithm :: 알고리즘

알고리즘 :: JavaScript 여러 줄 입력 받는 법

HJPlumtree 2021. 11. 10. 16:50

자바스크립트로 알고리즘 문제를 풀 때

프로그래머스 같은 곳이 아니라면 직접 입력을 구현이 필요하다

 

몇 가지 방법을 사용해봤는데

 

그 중에서 자주 사용하는 것을

까먹기 전에 기록 해놓아야겠다

 

3가지를 주로 사용했다

최근 것부터 살펴보면

  1. readline 방법 1 
  2. readline 방법 2
  3. fs 방법

1번은 엘리스 코딩 하며

2번은 엘리스 코딩 테스트를 준비하며

3번은 백준을 할 때 사용했던 것

 

 

1번 readline 방법 1

이 방법은 엘리스 코딩에서 배우다가

밑에 나올 2번 방법으로

답이 안나오는 문제가 1개 있었다

그 문제를 풀기위해 변형했다

 

터미널에 입력을 나가기 위해

컨트롤 + C 혹은 컨트롤 + D 를 눌러줘야된다

답안 제출시에는 자동으로 된다

const readline = require('readline')

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

/**** 이 위로는 기본적으로 선언 ****/

// 여러 줄을 배열로 받기 위해 변수 배열 선언
let input = []

// 괄호안에 'line'의 의미는 한 줄마다 옆에 함수가 실행된다는 의미
rl.on('line', function(line) {
    input.push(line)

// 괄호안에 'close'는 종료되면 옆에 함수가 실행된다는 의미
}).on('close', function() {

// 이 밑에서 문제를 풀어도 되는데
// 함수로 빼는게 좋아서 이렇게 사용하고 있다
    아무함수(input)
    
// 이 rl.on의 종료를 알리는 함수
    process.exit()
})

// 아까 밖으로 나온 함수
function 아무함수(arr) {
    
}

 

 

2번 readline 방법 2

이 방법이 없었다면 엘리스에서 못 배우고 있을 수도

배우기전 모의 코딩테스트를 했는데

밑에 3번 fs 방법이 여기서는 되지 않았다

(엘리스 보안상 fs 주소를 알려줄 수 없었다는 내용)

 

모의 테스트를 보기위해 검색을 많이 했다 엄청나게

자바스크립트 같은 경우는 입력 받는게 어렵다는 이야기

이렇게 저렿게 한다는 복잡합 코드 ... 

 

에라이하고 끄적여 봤다

했더니 됐다!!

그래서 탄생한 readline 방법 2

 

const readline = require("readline");

const rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout
});
let input = []
rl.on("line", function(line) {
/**** 여기까지는 방법 1과 같다 ****/

// 이 함수는 한 줄 씩 실행이 된다는 것을 알고
// 만약 받는 줄이 false면 프로그램을 종료 하는 방법
	if(!line) {
		rl.close()
	}
    
// 그 줄에 데이터가 있다면 변수 input에 집어넣기
	else {
		input.push(line)
	}

// 방법 1과 같이 밑에 함수를 만들어서 사용
}).on("close", function() {
	아무함수(input)
	process.exit();
});

function 아무함수(arr) {
	
}

 

 

3번 fs 방법

백준에서 readline 보다 fs를 추천한다는

말을 듣고 사용하게된 코드

 

굉장히 간단해서 좋아라 했던 코드

단 2줄!

// VSCode에서 JavaScript 테스트 하기위한 코드
// 메모장에 테스트 케이스 넣고 test.txt로 저장했다

let fs = require('fs')

// 받은 데이터를 문자열로 바꿔주고
// 줄바꿈을 기준으로 split 해주었다
let input = fs.readFileSync('test.txt').toString().split('\n')