Lewis's Tech Keep

[BOJ][20300] 서강근육맨 - JAVA 본문

Java/알고리즘

[BOJ][20300] 서강근육맨 - JAVA

Lewis Seo 2021. 6. 11. 18:43

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

 

 

- 풀이는 좋은 글의 도움을 받았다. (https://giiro.tistory.com/entry/%EB%B0%B1%EC%A4%80-20300-%EC%84%9C%EA%B0%95%EA%B7%BC%EC%9C%A1%EB%A7%A8)

- 최대값의 최소값을 구하는 문제

- 운동기구로 2번만 조지기(?) 때문에 오름차순 정렬 후 끝에서 부터 "최대값 + 최소값" 의 최대값을 구하면 해당 값의 최소값이 나오게 된다.

- 그리고 범위가 10^18 이므로 int로 감당할 수 없는 범위임을 인식할 것.

 

더보기
import java.util.Arrays;
import java.util.Scanner;

class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        long answer;
        long[] t = new long[N];
        for (int i = 0; i < N; i++) {
            t[i] = sc.nextLong();
        }

        Arrays.sort(t);

        if (N % 2 == 1) {
            answer = t[N - 1];
            for (int i = 0; i < (N-1) / 2; i++) {
                answer = Math.max(answer, t[i] + t[N-2-i]);
            }
        } else {
            answer = t[0] + t[N - 1];
            for (int i = 1; i < N / 2; i++) {
                answer = Math.max(answer, t[i] + t[N-1-i]);
            }
        }
        System.out.println(answer);
    }
}
Comments