개발자 톡

연습문제 톡 [HSAT 2회 정기 코딩 인증평가 기출] 사물인식 최소 면적 산출 프로그램

[HSAT 2회 정기 코딩 인증평가 기출] 사물인식 최소 면적 산출 프로그램 자바 코드 반례 부탁드립니다..

등록일
2023-07-16 18:36:48
조회수
620
작성자
sjk1062005

전체 탐색을 시도했는데 왜 오답이 나오는 걸까요..?

제가 무엇을 놓친 건지 알려주실 고수님 부탁드립니다..ㅜㅜ



import java.util.*;
import java.io.*;


public class Main
{
    static int N;
    static int K;

    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());
        int answer = Integer.MAX_VALUE;
        
        Map> map = new LinkedHashMap<>();
        for (int i = 1; i <= K; i++) {
            map.put(i, new ArrayList<>());
        }
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            int k = Integer.parseInt(st.nextToken());
            
            List list = map.get(k);
            list.add(new int[]{x, y});
        }
        if (K == 1) {
            System.out.println(0);
        } else {
            // 첫 번째 위치
            for (int key1 : map.keySet()) {
                for (int[] position1 : map.get(key1)) {
                    int x1 = position1[0];
                    int y1 = position1[1];
                    // 두 번째 위치
                    for (int key2 : map.keySet()) {
                    	if (key1 == key2)	continue;
                        for (int[] position2 : map.get(key2)) {
                            int x2 = position2[0];
                            int y2 = position2[1];
                            
                            int minX = Math.min(x1, x2);
                            int maxX = Math.max(x1, x2);
                            int minY = Math.min(y1, y2);
                            int maxY = Math.max(y1, y2);
                            
                            // 전체 탐색
                            int count = 2;
                            for (int targetKey : map.keySet()) {
                            	if (targetKey == key1 || targetKey == key2) continue;
                                List targetList = map.get(targetKey);
                                for (int[] targetPosition : targetList) {
                                    if (rangeCheck(minX, maxX, minY, maxY, targetPosition)) {
                                        count++;
                                        break;
                                    }
                                }
                            }
                            if (count == K) {
                                int area = (maxX - minX) * (maxY - minY);
                                answer = Math.min(answer, area);
                            }
                        }
                    }
                }
            }
            System.out.println(answer);
        }
        
    }

    static boolean rangeCheck(int minX, int maxX, int minY, int maxY, int[] targetPosition) {
        int x = targetPosition[0];
        int y = targetPosition[1];
        return minX <= x && x <= maxX && minY <= y && y <= maxY;
    }
}



#[hsat_2회_정기_코딩_인증평가_기출]_사물인식_최소_면적_산출_프로그램
#사물인식_최소_면적_산출_프로그램
#java

이 카테고리의 톡 더보기