[BaekJoon] 14681번 - 사분면 고르기 (java)

1. 문제

👉 문제 바로가기

- 조건

시간 제한 메모리 제한
1초 512MB


- 문제

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

image
예를 들어, 좌표가 (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





2. 풀이

입력받은 정수의 양수, 음수를 판단하기 위해 조건문 if를 사용한다.

또한 if 대신 삼항 연산자 를 사용해서 조건문을 한 줄로 줄이는 방법도 설명한다.


  • 1사분면 (양수 , 양수)
  • 2사분면 (음수 , 양수)
  • 3사분면 (음수 , 음수)
  • 4사분면 (양수 , 음수)




2가지 입력방법을 사용해서 결과를 출력한다.

  1. Scanner 클래스
  2. BufferedReader 클래스


- 1. Scanner 클래스 사용

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int A = sc.nextInt();
        int B = sc.nextInt();
        
        String str = "";
        
        if(A>0 && B>0) str="1";
        else if(A<0 && B>0) str="2";
        else if(A<0 && B<0) str="3";
        else(A>0 && B<0) str="4";
        
        System.out.println(str);
    }
}

위와같이 객체를 생성할 때, Scanner(System.in) 에서 System.in 은 입력한 값을 Byte 단위로 읽는 것을 뜻한다.

int형 데이터를 입력받기 위해 nextInt() 메서드를 사용한다.

&& 는 논리 연산자로 AND 를 의미한다.



[여기서 잠깐!]

Scanner에 대해 더 자세히 알고싶다면 여기 를 클릭하세요
조건문에서 논리연산자 &&,||와 비트연산자 &,| 차이를 알고싶으면 여기 를 클릭하세요




- 2. BufferedReader 클래스 사용

BufferedReader는 readLine() 메서드를 사용해 한 행을 전부 읽는다.


여기서 삼항 연산자도 함께 사용해보자.

변수 = (조건문) ? (true 인 경우 연산) : (false 인 경우 연산)

조건이 2개 이상일 경우, 두번째 연산 위치에 또 다른 삼항 연산자를 쓸 수 있다.



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int A = Integer.parseInt(br.readLine());
        int B = Integer.parseInt(br.readLine());

        System.out.println((A>0&&B>0)?"1":(A<0&&B>0)?"2":(A<0&&B<0)?"3":"4");
        //System.out.println(A>0?(B>0?"1":"4"):(B>0?"2":"3"));
    }
}

readLine()은 한 줄을 통째로 읽어 String으로 반환하기 때문에 Integer.parseInt()을 사용해 int형으로 변환시켜준다.

삼항 연산자를 2가지 방법으로 풀이했다. 후자가 좀 더 간단해 보인다.

전자는 &&(AND) 논리연산자를 사용해 A와 B의 조건을 동시에 체크한다.
후자는 A의 조건을 먼저 체크하고, 삼항 연산자를 중첩해서 각각 B의 조건을 체크한다.



[여기서 잠깐!]

BufferedReader 클래스에 대해 더 알아보고 싶으면 여기 를 클릭하면 된다.





3. Scanner VS BufferedReader 성능 비교

image

입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.





관련 페이지

Categories:

Updated:

Leave a comment