-
[백준] 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
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 할인 행사_Java (0) 2024.04.29 [프로그래머스] 괄호 회전하기_Java (0) 2024.04.26 [프로그래머스] 큰 수 만들기_Java (0) 2024.04.23 [프로그래머스] 영어 끝말잇기_Java (0) 2024.04.22 [프로그래머스] 멀리 뛰기_Java (0) 2024.04.19