문제
흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.
예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.
점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.
입력
첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0)
출력
점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.
예제 입력 | 예제 출력 |
12 5 |
1 |
9 -13 |
4 |
⭕ 내 풀이
var input = require('fs').readFileSync('/dev/stdin').toString().split('\n'),
x = parseInt(input[0]), y = parseInt(input[1]);
if(x >= 1){
if(y >= 1){
console.log('1')
}else if(y < 0){
console.log('4')
}
}else if(x < 0){
if(y >= 1){
console.log('2')
}else if(y < 0){
console.log('3')
}
};
이런식으로 풀었는데 fs 모듈로 입력을 받으면
런타임 에러 (EACCES) 가 나서 검색해보니 해당 문제는 readline 모듈을 사용해야했다.
이제겨우 fs모듈 익혔는데..
✅ - readline 모듈 사용해 입력받기
기본형태
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("line", function(line) {
console.log("hello !", line);
rl.close();
}).on("close", function() {
process.exit();
});
rl.close() 부분이 없다면 무한으로 입력을 받아 받은만큼 console.log를 실행
rl.close();를 호출하면, case 1에서는 on("close")의 콜백인 process.exit();를 호출하여 프로세스를 종료한다.
공백을 기준으로 split할 경우
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ').map((el) => parseInt(el));
})
.on('close', function () {
console.log(input[0] + input[1]);
process.exit();
});
두줄이상을 입력받아야할 경우
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 () {
console.log(input);
process.exit();
});
⭕ 다시
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line){
input.push(parseInt(line))
}).on('close', function (){
const x = input[0],
y = input[1];
if(x >= 1){
if(y >= 1){
console.log('1')
}else if(y < 0){
console.log('4')
}
}else if(x < 0){
if(y >= 1){
console.log('2')
}else if(y < 0){
console.log('3')
}
};
process.exit();
});
if(x > 0){
console.log(y > 0 ? '1' : '4')
}else if(x < 0){
console.log(y > 0 ? '2' : '3')
};
코드를 간략히 적기위해 삼항연산자를 사용해 이렇게 적어봤는데 답은 맞았다고 나오지만
아마 예제입력에 0 이 있었다면 틀린답인가
readline으로 입력받는 방법은 조금 더 많이 연습해봐야할것같다.
-출처
https://www.acmicpc.net/problem/14681
14681번: 사분면 고르기
점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.
www.acmicpc.net
https://wooooooak.github.io/node.js/2018/09/26/Node.js-%EC%9E%85%EB%A0%A5-%EB%B0%9B%EA%B8%B0/
Node.js 입력 받기 · 쾌락코딩
Node.js 입력 받기 26 Sep 2018 | node.js 프로그래머스같은 경우는 입력이 자동으로 되기 때문에 함수만 작성하면 된다. 그러나 구름ide 또는 백준 알고리즘 같은 경우 테스트 케이스 입력을 받기 위한
wooooooak.github.io
'Algorithm > Baekjoon(Node.js)' 카테고리의 다른 글
[JavaSrcipt] Baekjoon - 2739 : 구구단 (for문) (0) | 2021.08.23 |
---|---|
[JavaSrcipt] Baekjoon - 2884 : 알람 시계 (0) | 2021.08.22 |
[JavaSrcipt] Baekjoon - 2753 : 윤년 (비교연산자 주의) (0) | 2021.08.21 |
[JavaSrcipt] Baekjoon - 9498 : 시험 성적 (0) | 2021.08.21 |
[JavaSrcipt] Baekjoon - 1330 : 두 수 비교하기 ( if, 삼항연산) (0) | 2021.08.21 |