728x90
[문제 - 31945: 정육면체의 네 꼭짓점 (JAVA)]
[접근 방법]
0~7 까지의 입력되는 꼭짓점을 의미하는 정수를 2진수로 변환하면, 해당 꼭짓점의 좌표와 일치한다.
예를 들면, '7' = 111(2) 이고, 좌표 (1, 1, 1) 이다.
네 꼭짓점이 한 평면위에 위치하기 위해선,
네 꼭짓점 각 좌표의 합이 x, y, z 중 하나는 0 OR 4 여야 한다.
P1, P3, P5, P7 의 꼭짓점을 선택한 경우 이들의 좌표를 모두 더한다면,
(0, 0, 1) + (0, 1, 1) + (1, 0, 1) + (1, 1, 1) = (2, 2, 4) 가 된다.
이 4개의 좌표 모두 z = 1 평면 위에 존재하기 때문에, 조건에 만족한다.
P0, P1, P2, P3 의 꼭짓점을 선택한 경우 이들의 좌표를 모두 더한다면,
(0, 0, 0) + (0, 0, 1) + (0, 1, 0) + (0, 1, 1) = (0, 2, 2) 가 된다.
이 4개의 좌표 모두 x = 0 평면 위에 존재하기 때문에, 조건에 만족한다.
이와 같이 네 좌표의 합의 "x = 0 , y = 0 , z = 0" 을 만족하거나 혹은 "x = 4, y = 4, z = 4" 를 만족하는 경우
조건에 만족한다고 할 수 있다.
[JAVA 코드]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ_31945 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//테스트 케이스 개수 : T
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = 0, y = 0, z = 0;
for (int j = 0; j < 4; j++) {
int point = Integer.parseInt(st.nextToken());
x += point / 4;
point = point % 4;
y += point / 2;
point = point % 2;
z += point;
}
if ( (x == 0 || y == 0 || z == 0) || (x == 4 || y == 4 || z == 4) ) {
bw.write("YES" + "\n");
} else {
bw.write("NO" + "\n");
}
}
bw.flush();
bw.close();
}
}
728x90
'백준' 카테고리의 다른 글
[BOJ] BOJ_1753 최단경로 (JAVA) (0) | 2024.07.29 |
---|---|
[BOJ] BOJ_10800 컬러 (JAVA) (0) | 2024.07.21 |
[BOJ] BOJ_11659 구간 합 구하기 4 (JAVA) (0) | 2024.07.16 |
[BOJ] BOJ_25026 너의 평점은 (JAVA) (2) | 2024.07.16 |
[BOJ] BOJ_11382 꼬마 정민 (JAVA) (2) | 2024.07.15 |