본문 바로가기

코딩테스트

[알고리즘 문제 풀이 ] 백준 20300번 서강 근육맨 ( 그리디 )


import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

import java.util.Collections;

public class Main {

    static int N;
    static ArrayList<Long> arr =new ArrayList<>();

    static Long min;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());


        N = Integer.parseInt(st.nextToken());


        st =new StringTokenizer(br.readLine());
        for(int i=0;i<N;i++){
            //arr.add(Integer.parseInt(st.nextToken()));
            arr.add(Long.parseLong(st.nextToken()));
        }
        min =Long.MIN_VALUE;

        Collections.sort(arr);

        if(arr.size()%2==0) evenSize() ;
        else oddSize();

        System.out.println(min);

    }

    static void oddSize(){
        int iterSize = (arr.size()-1)/2;
        int endIdx = arr.size()-2;
        for(int i=0;i<iterSize;i++){
            min = Math.max(min,arr.get(i)+ arr.get(endIdx-i));
        }
        min=Math.max(min,arr.get(arr.size()-1));
    }

    static void evenSize(){
        int iterSize = arr.size()/2;
        int endIdx = arr.size()-1;
        for(int i=0;i<iterSize;i++){
            min=Math.max(min,arr.get(i)+arr.get(endIdx -i));
        }
    }

}

 

 

 

배운 점 

 

- int와 long 범위 차이