[백준](Java) 20300 - 서강근육맨

민지킴·2021년 6월 11일
0

백준

목록 보기
28/48
post-thumbnail

문제링크

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

문제풀이

여러개의 합중에 최대를 찾아야하는 문제라고 생각해야했기에 Greedy 알고리즘을 적용해야 했다는 생각이 들었다. Greedy에서 제일 중요한것은 데이터의 정렬이라고 생각해서
값을 입력받아 오름차순으로 정렬

Arrays.sort(weight);

데이터의 갯수가 짝수개이면 index의 0번째와 n번째, 1번째와 n-1번째의 합중에서 제일큰값을 찾으면 될것이라고 생각했으며

            for(int i=0; i<n/2; i++){
                maxnum = Math.max(maxnum,weight[i]+weight[n-1-i]);
            }

홀수개일때는 가장 큰값을 초기의 maxnum으로 설정하여 연산에서 배제하였고, 짝수떄와 같은 로직으로 비교한다.

            maxnum = weight[n-1];
            for(int i=0; i<(n-1)/2; i++){
                maxnum = Math.max(maxnum, weight[i]+weight[n-2-i]);
            }

코드

import java.util.*;

public class Main {


    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        long [] weight = new long[n];
        for(int i=0; i<n; i++){
            weight[i] = sc.nextLong();
        }
        Arrays.sort(weight);
        long maxnum = 0;
        if(n%2==0){
            for(int i=0; i<n/2; i++){
                maxnum = Math.max(maxnum,weight[i]+weight[n-1-i]);
            }
        }else{
            maxnum = weight[n-1];
            for(int i=0; i<(n-1)/2; i++){
                maxnum = Math.max(maxnum, weight[i]+weight[n-2-i]);
            }
        }


        System.out.println(maxnum);
    }
}
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글