boj 20300 서강근육맨

신준호·2024년 3월 6일
0
post-thumbnail

문제 링크

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

문제 풀이

그리디 문제
문제를 근손식 배열에서 값 두개를 뽑아서 더한 값중 최솟값을 구하는걸로 이해했다.
따라서 접근 방식을 입력을 받고 배열을 오름차순으로 정렬해주었다
이유는 첫번쟤는 무조건 작아야하고 마지막 수랑 짝지어주기 위해서다.
배열의 길이를 짝수 홀수로 나누어서 풀었다.
짝수인 경우에는 arr[0]+arr[n-1]+arr[1]+arr[n-2] 이런 순으로 진행
홀수인 경우 마지막 수를 max로 지정 후 마지막 수를 제외하고 arr[0]+arr[n-2]+arr[1]+arr[n-3] 이런 순으로 진행

전체 코드

package BOJ;

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

public class 서강근육맨 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        long[] arr = new long[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            arr[i] = Long.parseLong(st.nextToken());
        }
        Arrays.sort(arr);

        long max = 0;

        if (arr.length % 2 == 0) {
            for (int i = 0; i < n / 2; i++) {
                long sum = arr[i] + arr[n - i - 1];
                max = Math.max(max, sum);
            }

        } else {
            max = arr[n - 1];
            for (int i = 0; i < n / 2; i++) {
                long sum = arr[i] + arr[n - i - 2];
                max = Math.max(max, sum);
            }

        }
        System.out.println(max);

    }
}
profile
개발 공부 일지

0개의 댓글