흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int A = Integer.parseInt(bf.readLine());
if(A%4==0 && A%100!=0) {
System.out.println(1);
} else if (A%400==0) {
System.out.println(1);
} else {
System.out.println(0);
}
}
}
각 숫자가 두 줄에 나뉘어서 입력이 되어야하는 문제여서 앞서 풀었던 문제들과 조금 달라서 애매했다.
.readLine()은 개행문자를 기준으로 한 줄로 읽기 때문에 이걸 어떻게 계속 읽도록 반복시켜야하는지.. while문을 써야하나 그렇다면 String[]을 선언해서 읽어들인 부분을 배열로 다 저장해야하는건지… 도저히 모르겠어서 구글링해서 찾아본 결과 애초에 한 줄에 하나씩 입력되므로 tokenizer할 것이 없었음! 처음 제출했을 때 오류가 났던게 tokenizer 때문이었는데 처음부터 잘못 생각했던 것이었음..
한 줄에 숫자 하나씩 입력되므로 그냥 bf.readLine()을 두번 해서 각 줄에 쓰인 숫자를 읽어들이기만 하면 됐던 문제..!
괜히 어렵게 생각해서 푸는데 시간이 오래 걸렸었다.
근데 앞에 문제를 너무 bf, st를 반복적으로 사용했어서 readLine()을 단순히 두번 하는게 가능한지도 몰랐었으므로 또 하나 배운게 있는 문제였음!