ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 30970 선택의 기로_Java
    코딩테스트 2024. 4. 24. 11:30

     

    품질이냐 가격이냐, 그것이 문제로다..

     

    문제 링크

    https://www.acmicpc.net/problem/30970

     

    30970번: 선택의 기로

    첫 번째 줄에는 첫 번째 방법을 선택했을 때의 첫 번째로 고른 촉석루 미니어처의 품질과 가격, 두 번째로 고른 촉석루 미니어처의 품질과 가격을 공백으로 구분하여 순서대로 출력한다. 두 번

    www.acmicpc.net

     

    문제 풀이

    1.입력 값

    2. 품질과 가격이 전부 동일한 두 촉석루 미니어처는 없다.

    3. 미니어처를 고르는 방법은 두가지 이다. 

      첫번째 방법 : 품질이 가장 높은 미니어처, 품질이 같다면 가격이 가장 낮은 것을 고른다.

      두번째 방법 : 가격이 가장 낮은 미니어처, 가격이 같다면 품질이 가장 높은 것을 고른다. 

    4. 첫줄에 첫번째 방법으로 고른 미니어처 2개의 품질과 가격을 차례대로 출력한다. 두번째 줄에 두번째 방법으로 고른 미니어처 2개의 품질과 가격을 차례대로 출력한다.

    5. 첫 번째 방법의 결과가 두 번째 방법의 결과에 영향을 미치지 않는다.

     

     

    코드1 _배열 정렬을 이용한 방법

    미니어처의 정보를 이차배열로 담아 각 방법에 따라 정렬 후 출력한다.

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
            int[][] miniature = new int[n][2];
            StringTokenizer st;
            for (int i = 0; i<n;i++){
                st = new StringTokenizer(br.readLine());
                miniature[i][0] = Integer.parseInt(st.nextToken());
                miniature[i][1] = Integer.parseInt(st.nextToken());
            }
    
            int[][] qSortedArr = Arrays.stream(miniature).sorted((a, b) -> {
                if (a[0] == b[0]) return a[1] - b[1];
                return b[0] - a[0] ;
            }).toArray(int[][]::new);
    
            int[][] pSortedArr = Arrays.stream(miniature).sorted((a, b) -> {
                if (a[1] == b[1]) return b[0] - a[0] ;
                return a[1] - b[1];
            }).toArray(int[][]::new);
    
            System.out.print(qSortedArr[0][0]+" "+qSortedArr[0][1]+" "+qSortedArr[1][0]+" "+qSortedArr[1][1]+"\n");
            System.out.print(pSortedArr[0][0]+" "+pSortedArr[0][1]+" "+pSortedArr[1][0]+" "+pSortedArr[1][1]);
        }
    }

     

     

     

    실행 결과1

     


     

    코드2_우선순위큐를 이용한 방법

    각 방법에 따라 우선순위를 결정하는 큐를 생성한 후 미니어처 정보를 담아 출력한다.

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Comparator;
    import java.util.PriorityQueue;
    import java.util.StringTokenizer;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
    
            PriorityQueue<int[]> qPriorityQueue = new PriorityQueue<>(new Comparator<int[]>() {
                @Override
                public int compare(int[] o1, int[] o2) {
                    if (o1[0] == o2[0]) return o1[1] - o2[1];
                    return o2[0] - o1[0] ;
                }
            });
    
            PriorityQueue<int[]> pPriorityQueue = new PriorityQueue<>(new Comparator<int[]>() {
                @Override
                public int compare(int[] o1, int[] o2) {
                    if (o1[1] == o2[1]) return o2[0] - o1[0];
                    return  o1[1] -o2[1] ;
                }
            });
    
            StringTokenizer st;
            for (int i = 0; i<n;i++){
                st = new StringTokenizer(br.readLine());
                int[] miniature = new int[2];
                miniature[0] = Integer.parseInt(st.nextToken());
                miniature[1] = Integer.parseInt(st.nextToken());
                qPriorityQueue.offer(miniature);
                pPriorityQueue.offer(miniature);
            }
    
            int [] q1 = qPriorityQueue.poll();
            int [] q2 = qPriorityQueue.poll();
            int [] p1 = pPriorityQueue.poll();
            int [] p2 = pPriorityQueue.poll();
            System.out.println(q1[0]+" "+q1[1]+" "+q2[0]+" "+q2[1]);
            System.out.print(p1[0]+" "+p1[1]+" "+p2[0]+" "+p2[1]);
        }
    }

     

     

     

    실행 결과2

Designed by Tistory.