공부하기/백준

[Java] 백준 풀기 20044 - Project Teams

XEV 2024. 3. 31. 23:05

자바 백준 20044번

실버 4

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

 

20044번: Project Teams

입력은 표준입력을 사용한다. 입력의 첫 번째 행에는 팀 수를 나타내는 양의 정수 n(1 ≤ n ≤ 5,000)이 주어진다. 그 다음 행에 학생 si 의 코딩 역량 w(si)를 나타내는 2n개의 양의 정수가 공백으로

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 그리디 알고리즘, 정렬

 

 

 

 

 

코드 풀이

import java.util.Scanner;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 팀 수 입력
        int n = sc.nextInt();
        
        // 학생들의 코딩 역량을 저장할 배열 생성
        int[] abilities = new int[2 * n];
        // 학생들의 코딩 역량 입력
        for (int i = 0; i < 2 * n; i++) {
            abilities[i] = sc.nextInt();
        }
        
        // TeamFormation 객체 생성하여 코딩 역량 배열 전달
        TeamFormation teamFormation = new TeamFormation(abilities);
        // 팀을 구성하고 최소 합을 찾아서 result에 저장
        int result = teamFormation.findMinSum();
        
        // 결과 출력
        System.out.println(result);
    }
}

// TeamFormation 클래스 정의
class TeamFormation {
    private int[] abilities; // 코딩 역량을 저장할 배열
    
    // constructor: 코딩 역량 배열을 받아서 정렬
    public TeamFormation(int[] abilities) {
        this.abilities = abilities;
        Arrays.sort(this.abilities); // 코딩 역량 배열을 오름차순으로 정렬
    }
    
    // 최소 합을 찾는 메서드
    public int findMinSum() {
        int n = abilities.length / 2; // 팀의 수
        int minSum = Integer.MAX_VALUE; // 최소 합을 저장할 변수 초기화
        // 가장 작은 코딩 역량과 가장 큰 코딩 역량을 가진 학생을 각 팀에 넣었을 때의 합을 구하고 최소값 갱신
        for (int i = 0; i < n; i++) {
            int sum = abilities[i] + abilities[abilities.length - i - 1];
            minSum = Math.min(minSum, sum);
        }
        return minSum; // 최소 합 반환
    }
}