[BaekJoon] 14681번 - 사분면 고르기 (java)
1. 문제
👉 문제 바로가기
- 조건
시간 제한 | 메모리 제한 |
---|---|
1초 | 512MB |
- 문제
흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 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 |
2. 풀이
입력받은 정수의 양수, 음수를 판단하기 위해 조건문 if
를 사용한다.
또한 if 대신 삼항 연산자
를 사용해서 조건문을 한 줄로 줄이는 방법도 설명한다.
- 1사분면 (양수 , 양수)
- 2사분면 (음수 , 양수)
- 3사분면 (음수 , 음수)
- 4사분면 (양수 , 음수)
2가지 입력방법을 사용해서 결과를 출력한다.
- Scanner 클래스
- 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
를 의미한다.
[여기서 잠깐!]
- 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 성능 비교
입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.
관련 페이지
Leave a comment