[JS]자바스크립트로 입력받는 법 - 백준
업데이트:
입력 받는 법Permalink
- 자바스크립트의 특징은 한번에 입력을 다 가져온다는 점이다.
- 줄바꿈 키워드(split 메서드)로 문자열을 나누면 줄별로 문자가 입력된다.
- 문자열을 숫자로 바꿔줄 때는 number 메서드를 이용하거나 +로 숫자를 암시할 수 있다.
중간중간 console.log를 찍어 확인하는 습관 들이기 + 입력을 정제하는 과정과 문제푸는 과정을 나누기!
예시) 백준 4344번 - 평균은 넘겠지Permalink
문제Permalink
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력Permalink
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력Permalink
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
예제 입력Permalink
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
▶ 입력을 정제하기Permalink
/*
boj/4344
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
*/
const fs = require('fs');
let input = fs.readFileSync('./input.txt').toString();
console.log(input);
input = input.split('\n');
console.log(input);
const inputC = +input[0];
const inputTestCase = [];
for(let i = 1; i <= inputC; ++i) {
const arr = input[i].split(' ').map((item) => +item);
const newArr = []
for (let i = 1; i<= arr[0]; ++i){
newArr.push(arr[i]);
}
const testCase = {
N: arr[0],
arr: newArr,
};
inputTestCase.push(testCase);
1. fs 모듈 불러오기Permalink
fs 모듈은 node.js에 내장된 라이브러리이다.
CommonJS 모듈 시스템을 사용하는 프로젝트에서는 require 키워드로 불러오고, ES 모듈 시스템을 사용하는 프로젝트에서는 import 키워드를 사용할 수 있다.
//CommonJS
const fs = require("fs");
//ES
import fs from "fs";
2. 입력받기Permalink
입력할 데이터들을 txt 파일을 만들어 넣어두고 fs 모듈에서 동기식으로 txt 파일을 읽고 문자열로 변환한다.
줄바꿈이 있을 때마다 split 해준다.
let input = fs.readFileSync('./input.txt').toString();
input = input.split('\n');
console.log(input);
/*
'\t5\r',
'\t5 50 50 70 80 100\r',
'\t7 100 95 90 80 70 60 50\r',
'\t3 70 90 80\r',
'\t3 70 90 81\r',
'\t9 100 99 98 97 96 95 94 93 91'
*/
한 줄씩 입력 데이터들이 나뉜 것을 볼 수 있다.
3. 데이터 나누기Permalink
이제 테스트케이스와 학생들의 점수를 분리하여 배열에 저장해야 한다.
줄바꿈으로 나누어 놓은 input 배열에서 새로운 배열 inputC에 테스트 케이스(input[0])를 숫자형(+/number)으로 바꿔 집어넣어 준다.
학생 수와 점수를 구분해서 넣을 inputTestCase 배열도 만들어 놓는다.
const inputC = +input[0];
const inputTestCase = [];
4. 데이터 집어넣기Permalink
for(let i = 1; i <= inputC; ++i) {
const arr = input[i].split(' ').map((item) => +item);
const newArr = [];
for (let i = 1; i<= arr[0]; ++i){
newArr.push(arr[i]);
}
const testCase = {
N: arr[0],
arr: newArr,
};
inputTestCase.push(testCase);
}
input[0]은 테스트케이스이니 arr에 input[1]부터 띄어쓰기로 구분하여 데이터를 집어넣어준다. 이 때 map 메서드를 활용해서 반복해주었다.
이렇게 하면 arr 배열에 ‘5 50 50 70 80 100’ 이렇게 들어갈 것이다. 하지만 우리는 배열의 첫번째 원소인 학생 수를 분리해주어야 한다.
newArr 배열을 만들어 arr[1]부터 데이터를 다시 집어넣는다.
testCase에 학생 수 N과 점수 배열값 arr로 나누어 주고 아까 만들어둔 inputTestCase배열에 넣어주면 입력을 정제하는 과정이 끝났다.
inputTestCase : [
{ N: 5, arr: [ 50, 50, 70, 80, 100 ] },
{ N: 7, arr: [ 100, 95, 90, 80, 70, 60, 50 ] },
{ N: 3, arr: [ 70, 90, 80 ] },
{ N: 3, arr: [ 70, 90, 81 ] },
{ N: 9, arr: [ 100, 99, 98, 97, 96,95, 94, 93, 91 ] } ]
요약Permalink
막힐때는 답을 빨리 찾아보기/메소드를 최대한 사용하지 말기/for문을 자주 쓰기
댓글남기기