[백준] ATM(자바)

지수·2021년 9월 11일
0
post-thumbnail

알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!

📄 문제

[백준] ATM


👩‍💻 풀이

1. 문제 이해

이 문제는 사람마다 각각 다른 ATM 사용 시간을 정렬하여 전체 인원이 ATM을 사용하는 시간의 최소값을 연산하는 문제이다.


2. 풀이

  • 그리디 알고리즘을 통해 최소값을 연산
    - ATM 사용 시간이 가장 적은 사람부터 앞에 배치하여 누적 웨이팅 시간을 최소화
    - 주어진 ATM 사용 시간을 오름차순으로 정렬
    - 가장 적은 수를 맨 앞에 두면, 총 ATM 사용 시간 계산 시 해당 수가 전체 사람 수만큼 더해짐
    - 그 다음 순서는 전체 사람 수-1 만큼 더해짐
    - for(int i = 0; i < time.length; i++) {sum += time[i] * (time.length - i);}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        int[] time = new int[N];

        st = new StringTokenizer(br.readLine(), " ");
        for(int i = 0; i < time.length; i++) {
            time[i] = Integer.parseInt(st.nextToken());
        }

        System.out.println(greedySum(time));
    }

    static int greedySum(int[] time) {
        Arrays.sort(time);
        int sum = 0;
        for(int i = 0; i < time.length; i++) {
            sum += time[i] * (time.length - i);
        }

        return sum;
    }
}
profile
사부작 사부작

0개의 댓글