백준 정육면체의 네 꼭짓점

KIMYEONGJUN·2026년 4월 9일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 테스트 케이스의 개수 T가 주어진다. (1 ≤ T ≤ 2000)
둘째 줄부터 T개의 줄에 걸쳐 정육면체 S의 각 꼭짓점을 의미하는 서로 다른 네 정수 a, b, c, d가 공백으로 구분되어 주어진다. (0 ≤ a, b, c, d ≤ 8)

각 테스트케이스마다 한 줄에 하나씩 P_a, P_b, P_c, P_d가 정육면체 S의 한 면 위에 있는 네 꼭짓점이면 YES, 그렇지 않으면 NO를 출력한다.

내가 이 문제를 보고 생각해본 부분

먼저, 정육면체의 각 면을 대표하는 6개의 꼭짓점 배열을 faces 2차원 배열로 정의한다.
입력받은 4개의 꼭짓점을 중복 없이 저장하기 위해 Set를 사용한다.
모든 면에 대해 주어진 4개의 꼭짓점이 해당 면에 모두 포함되는지 검사한다.
포함된다면 YES를 출력하고, 아니면 NO를 출력한다.
이렇게 하여 입력된 네 꼭짓점이 정육면체의 어떤 면을 이루는지 판단할 수 있다.

코드로 구현

package baekjoon.baekjoon_34;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;

// 백준 31945번 문제
public class Main1352 {
    // 6개의 면을 미리 정의
    static int[][] faces = {
            {0, 1, 2, 3}, // x=0
            {4, 5, 6, 7}, // x=1
            {0, 1, 4, 5}, // y=0
            {2, 3, 6, 7}, // y=1
            {0, 2, 4, 6}, // z=0
            {1, 3, 5, 7}  // z=1
    };

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        for (int t = 0; t < T; t++) {
            String[] tokens = br.readLine().split(" ");
            Set<Integer> points = new HashSet<>();
            for (String token : tokens) {
                points.add(Integer.parseInt(token));
            }

            boolean isFace = false;

            for (int[] face : faces) {
                boolean allInFace = true;
                for (int p : points) {
                    boolean contains = false;
                    for (int f : face) {
                        if (p == f) {
                            contains = true;
                            break;
                        }
                    }
                    if (!contains) {
                        allInFace = false;
                        break;
                    }
                }
                if (allInFace) {
                    isFace = true;
                    break;
                }
            }

            System.out.println(isFace ? "YES" : "NO");
        }

        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글