캐또's coding

14681 - 사분면 고르기 - node.js (20번째) 본문

기초 공부/백준 문제 풀이

14681 - 사분면 고르기 - node.js (20번째)

JS_K_coding 2022. 8. 13. 11:33

문제

흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 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 중 하나)를 출력한다.

예제 입력 1 복사

12
5

예제 출력 1 복사

1

예제 입력 2 복사

9
-13

예제 출력 2 복사

4

출처

Olympiad > Canadian Computing Competition & Olympiad > 2017 > CCC 2017 Junior Division 1번

  • 문제를 번역한 사람: jh05013

알고리즘 분류


입력으로 -1000 ~ 1000의 값이 들어온다. 사분면으로 생각해서 무슨 문제지? 하고 헷갈릴 필요 없이 조건을 단순화해보면 된다. 두 수가 들어오고 각각을 A, B라고 했을 때, 4가지 조건을 세우면 된다.

1. A는 양수, B도 양수 = 1

2. A는 음수, B는 양수 = 2

3. A는 음수, B도 음수 = 3

4. A는 양수, B는 음수 = 4

양수 음수는 0을 기준으로 크냐 작냐만 봐도 된다. 입력 숫자가 -1000에서 1000 사이의 정수이기 때문이다.

const input = require('fs').readFileSync(0).toString().split('\n').map(Number);

const [A, B] = input;

if (A < 0) {
  console.log(B > 0 ? 2 : 3);
} else {
  console.log(B > 0 ? 1 : 4);
}

코드를 간결하게 작성해보고자 했다. 우선 기존에는 A, B 두 수를 받아와야 하는 경우. 각각 const A = input[0] 이런 방식이었는데 위와 같이 const [A, B] = input;으로 두 수를 할당할 수 있음을 알게 되어 적용했다.

그리고 이유를 찾을 수는 없었지만.... 이번 문제에서는 readFileSync를 '/dev/stdin'이 아닌 0을 입력해야 적용이 되었다. 왜 그럴까...?

다음으로 조건문에서 각각의 조건을 모두 입력할 경우 최소 4줄의 코드를 작성해야 했다면, 물음표를 통해서 코드를 더욱 간결하게 작성할 수 있었다.

먼저 A에 대해서 음수인지 양수인지 판별한다.

A가 음수이고, B가 양수라면 2 그렇지 않다면 3을 출력

A가 양수이고, B가 양수라면 1 그렇지 않다면 4를 출력

물음표 함수를 통해서 위와 같은 상황에서 B > 0 ? 2 : 3 즉 B가 0보다 큰가? 맞다면 2 아니면 3을 출력하라 와 같은 방식으로 작성할 수 있다.

'기초 공부 > 백준 문제 풀이' 카테고리의 다른 글

2525 - 오븐 시계 - node.js  (0) 2022.08.13
2884 - 알람 시계 - node.js  (0) 2022.08.13
2753 - 윤년 - node.js  (0) 2022.08.13
9498 - 시험 성적 - node.js  (0) 2022.08.13
1330 - 두 수 비교하기 - node.js  (0) 2022.08.12
Comments