백준 20117 자바

손찬호·2024년 7월 17일
0

알고리즘

목록 보기
80/91

풀이 아이디어

품질을 오름차순으로 정렬해서 [가장 낮은 품질,가장 높은 품질]
맨 처음과 맨 끝을 대칭으로 짝 지어서 팔면 중간값은 가장 높은 품질이 된다.
[1,2,3,4]가 있으면 [1,4]를 짝지으면 중간값은 4가되어 [1,4] 묶음을 팔면 4+4=8로 팔 수 있다.
이런 식으로 반복하면 [1,4],[2,3]을 4+4+3+3=14가 된다.

입력 최적화

코드를 더 짧게 작성하는 방법이 있다.

int[] cows = new int[n]; // 소 품질의 배열
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++){
    cows[i] = Integer.parseInt(st.nextToken());
}

이렇게 한 줄로 줄여서 적을 수 있다.

int[] cows = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); // 소 품질의 배열

풀이 코드

import java.util.*;
import java.io.*;
public class _20117 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine()); // 소의 수

        int[] cows = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); // 소 품질의 배열

        Arrays.sort(cows); // 오름차순 정렬

        // 가장 작은 품질의 소와 가장 큰 품질의 소를 묶어서 더한다.
        int result = 0;
        for(int i=0; i<n/2; i++){
            result += cows[n-1-i];
        }
        result *= 2;

        // 홀수면 중간값을 추가로 더해준다.
        if(n % 2 == 1){
            result += cows[n/2];
        }

        System.out.println(result);
    }
}
profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보