💻Develop/💡Algorithm

🌱#14681 사분면 고르기

Guraeng 2023. 7. 19. 11:12

문제

흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.

예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.

점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.

풀이

Python

x = int(input())
y = int(input())
if(x * y > 0):
    if(x > 0): print(1)
    else: print(3)
else:
    if(x > 0): print(4)
    else: print(2)

보기 쉽게 이렇게 적었지만 삼항연산자를 이용해 좀더 간략하게 사용할 수 있다.

삼항연산자가[조건식] ? [참일경우] : [거짓일경우] 이런식으로 사용된다면,

Python의 삼항연산자는[참일경우] if [조건문] else [거짓일 경우]이런식으로 사용할 수 있다.

이것을 활용한다면 아래와 같은 코드가 나온다.

x = int(input())
y = int(input())
if(x * y > 0):
    print(1) if x > 0 else print(3)
else:
    print(4) if x > 0 else print(2)

1분면과 3분면은 x와 y값을 곱할 경우 양수 값이 나오고, 2분면과 4분면은 음수값이 나오는 것을 활용하여 작성하였다.

그렇게 둘을 분리하여 x가 양수냐 음수냐에 따라 최종 분리가 가능하므로 올바른 출력값이 발생한다.

Node.js

let fs = require('fs');
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

해당 방법으로 입력을 받을 경우 EACCES 에러가 발생한다.

때문에 readline을 이용해서 입력을 받아야한다.

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]);

  if(x * y > 0){
    x > 0 ? console.log(1) : console.log(3)
  }else{
    x > 0 ? console.log(4) : console.log(2)
  }

  process.exit();
});

알고리즘은 Python과 큰 차이가 없다.