-
[배열 정렬] 문제 이름 : 두 배열의 원소 교체Algorithm/유형별 문제 풀기 2021. 9. 30. 10:34
문제 설명
입력 조건
→ 첫 번째 줄에 N, K가 공백으로 구분되어 입력됨 ( 1 <= N <= 100,000, 0 <= K <= N)
→ 두 번째와 세 번째 줄에 배열 A와 배열 B의 원소들이 공백으로 구분되어 입력됨, 모든 원소는 10,000,000보다 작은 자연수임
출력 조건
→ 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력함
사용 개념
배열 정렬
문제 해결 아이디어
배열 A의 모든 원소의 합이 최대가 되어야 하므로 배열 B의 원소 중 배열의 A의 원소보다 큰 K개의 원소를 바꿔치기 하면 됨
흐름 : 배열 A와 B를 오름차순 정렬 → 배열 A는 앞의 원소부터, 배열 B는 끝 원소부터 비교하여 배열 A의 원소가 더 작다면 바꿔치기 함
코드
ㄱ. java.util.Arrays의 sort() 사용함 (형태는 List<T>의 정렬 방식과 동일함)
배열 오름차순 정렬 :
배열 내림차순 or 다른 기준 정렬 :
→ 내림차순 정렬 시 위의 사진의 Comparator<? super T> 타입의 인자에 Collections.reverseOrder() 객체를 넣어주면 됨
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Arrays.html#sort(int%5B%5D)
import java.util.Scanner; import java.util.Arrays; public class Q4 { public static void main(String[] args) { Scanner kbd = new Scanner(System.in); int N = kbd.nextInt(); int K = kbd.nextInt(); int i = 0; int arrayA[] = new int[N]; int arrayB[] = new int[N]; for(i = 0; i < N; i++) { arrayA[i] = kbd.nextInt(); } for(i = 0; i < N; i++) { arrayB[i] = kbd.nextInt(); } // 배열 오름차순 정렬 Arrays.sort(arrayA); // ㄱ Arrays.sort(arrayB); // 바꿔치기 int j = N-1; for(i = 0; i < K; i++) { if(arrayA[i] < arrayB[j-i]) { arrayA[i] = arrayB[j-i]; } else break; } int total = 0; for(i = 0; i < N; i++) total += arrayA[i]; System.out.println(total); } }
'Algorithm > 유형별 문제 풀기' 카테고리의 다른 글
[이진 탐색] 문제 이름 : 떡볶이 떡 만들기 - 파라메트릭 서치 (0) 2021.11.22 [이진 탐색] 문제 이름 : 부품 찾기 - 배열 Sort, Binary Search (0) 2021.11.18 [정렬] 문제 이름 : 성적이 낮은 순서로 학생 출력하기 - 객체 정렬, List<T>, Collection (0) 2021.09.16 [정렬] 문제 이름 : 위에서 아래로 - List<E> 정렬, Collections (0) 2021.08.18 [DFS/BFS] 문제 이름 : 미로 탈출 (0) 2021.07.08