지금까지 프로그래머스에서만 코딩테스트 문제를 풀고 있었는데
오늘 처음 백준 문제를 풀어보려니 다 입력을 받아야한다.
그 이유는 Programmers 같은 경우에는 계산에 더욱 초점을 맞추고자 입출력을 간소화하여
입력은 함수인자(parameter)로 주어지고 출력은 반환값 returen value으로 하는 것으로 대체된다.
js의 입력에 대해서는 따로 공부한 적이 없는데 이 기초도 모르고 있었다는게..
따라서 Baeckjoon 에서 코딩테스트 연습을 위해서 입력에 대해서 공부해보려 한다.
ide(vscode)
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'example.txt';
const input = require('fs').readFileSync(filePath).toString().trim().split("\n");
fs vs readline
fs는 file system을 의미한다.
시스템 수준에서 모든 파일 시스템 작업은 이러한 파일 설명자를 사용하여 각 특정 파일을 식별하고 추적한다. 윈도우즈 시스템은 리소스를 추적하기 위해 다르지만 개념적으로 유사한 메커니즘을 사용한다.
readFile함수는 비동기적으로 파일의 전체를 읽으므로 파일을 읽어들이기가 완료된 후에 콜백 함수를 통하여 다음 스텝을 진행할 수 있는 반면, readFileSync는 동기적으로 파일을 읽어들입니다. 어차피 입력을 다 받아야만 계산을 진행할 수 있으므로, 동기적 처리 방식이 코드도 간결하고 이해하기 편합니다
-> 결론 readline은 복잡하기도 하고 잘 쓰지 않으니 fs를 쓰면 된다.
1. 한 글자 입력 받기
var input = require('fs').readFileSync('/dev/stdin').toString().trim();
var n = input;
//숫자일경우
//var n = Number(input)
2. 공백을 기준으로 여러 글자(한 줄) 입력 받기
let input = require('fs').readFileSync(filePath).toString().split(' ');
여기서 input 은 배열 자료형으로 담기므로 각 글자에 접근하려면 인덱싱으로 접근
3. 여러 줄 입력 받기
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
input에 각 줄이 배열 자료형으로 담기므로 각 줄에 접근하려면 인덱싱으로 접근
4. 첫 줄에 자연수 n을 받고, 다음 줄에 공백으로 구분된 여러 값 입력
const fs = require('fs');
const [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split(/\s/);
4. 첫 줄에 자연수 n을 받고, 다음 줄부터 여러 개의 줄에 걸쳐 한 줄에 하나의 값을 입력받을 때
const fs = require('fs');
const [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
5. 배열 오름차순 방법
sort()를 쓰게 되면 배열의 숫자들이 크기 순서가 아닌 유니코드 순서로 정렬된다.
따라서 크기 순서로 정렬하기 위해서는 sort()함수의 파라미터로 함수를 정의해야한다.
arr.sort(function(a, b) {
if(a > b) return 1;
if(a === b) return 0;
if(a < b) return -1;
});
6. 배열 문자를 숫자로
arr = input.map(Number)
각 원소마다 Number 함수를 실행
'java script' 카테고리의 다른 글
[java script] 클래스 (0) | 2024.10.24 |
---|---|
js : var 와 let의 차이 그리고 const (1) | 2024.01.09 |