문제 : https://www.acmicpc.net/problem/14681
14681번: 사분면 고르기
점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.
www.acmicpc.net
문제점 :
이 문제의 경우 fs모듈을 사용해서 입력받을 때 런타임 에러 (EACCES)가 발생한다. readline 모듈을 사용하면 오류 없이 제출이 가능하다.
문제 원인 :
백준에서 node.js로 풀 때 입력을 받을 수 있는 방법은 readline 모듈과 fs 모듈이 있다. fs모듈은 파일 시스템에서 읽어오는 구조이고 readline모듈은 Readable 스트림(ex: process.stdin 또는 file stream)에서 한 번에 한 줄씩 데이터를 읽어오는 인터페이스를 제공한다. fs모듈이 일반적으로 더 빠르지만 파일 시스템에 접근해야 하기 때문에 일부 문제에서는 접근 권한 문제 (런타임 에러 : EACCES)가 발생할 수 있다. 이럴 경우 readline모듈을 사용해야 한다. 하지만 입력이 큰 경우 readline을 사용했을 때 속도가 느려 시간 초과 판정이 나는 경우도 있기 때문에 처음 풀 때는 fs 모듈로 접근하는 것이 좋다고 생각한다.
Sol )
1. 리드라인모듈을 사용해 입력값을 받아온다.
2. 배열의 첫번째 인덱스에 0을 추가한다. (각 인덱스를 사분면으로 사용하기 위해 0번 인덱스를 채워주는 것)
3. 1번 인덱스부터 각 사분면에 해당하는 조건문을 배열에 담는다. (해당 조건의 결과에 해당하는 불리언 값이 배열에 담긴다.)
4. 2에서 저장한 배열을 반복문으로 돌면서 true가 담겨있는 인덱스를 출력한다.
소스코드 )
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input.push(line);
}).on('close', function () {
const x = parseInt(input[0]);
const y = parseInt(input[1]);
const result = [0,(x>0 && y> 0),( x< 0 && y > 0),(x< 0 && y<0),(x> 0 && y<0)];
for (let i = 1; i<result.length ; i++){
if (result[i]){
console.log(i);
break;
}
}
process.exit();
});
'Problem Solving > boj.kr (JS)' 카테고리의 다른 글
[BOJ / 자바스크립트] 2739 : 구구단 (0) | 2022.02.05 |
---|---|
[BOJ / 자바스크립트] 2884 : 알람 시계 (0) | 2022.02.04 |
[BOJ / 자바스크립트] 2753 : 윤년 (0) | 2022.02.04 |
[BOJ / 자바스크립트] 9498 : 시험 성적 (0) | 2022.02.04 |
[BOJ / 자바스크립트] 1330 : 두 수 비교하기 (0) | 2022.02.04 |
댓글