알고리즘(JAVA 사용)/Greedy

[알고리즘풀이]백준 11399: ATM JAVA

코찔이_suj 2021. 10. 5. 15:34
728x90

목차

  • 개요
  •  본문
  •  1) 문제
  •  2) 과정
  •  3) 코드 전체

 

 

개요

이전에 알고리즘 스터디에서 JAVA를 이용해 백준 11399번 ATM을 풀었습니다. 이를 정리해보고자 합니다.

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 

본문

1) 문제

 

2) 과정

꽤 쉬웠던 문제여서 5분컷으로 끝냈던 문제입니다. 내용도 간단하기 때문에 main에 input, logic, output을 모두 담았습니다.

 

2-1) main

    public static void main(String[] args) throws IOException {
    	// Input
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());

        String[] strArrN = reader.readLine().split(" ");
        int[] intArr = new int[n];
        for(int i =0;i<n;i++) intArr[i]=Integer.parseInt(strArrN[i]);
        
        // Initialize
        Arrays.sort(intArr);
		
        // Logic
        int sum=0;
        for(int i=0;i<n;i++) sum += intArr[i]*(n-i);
        
        // Output
        System.out.println(sum);
    }

main은 Input, Initialize, Logic, Output으로 구성됩니다.

 

Input에서는 첫 줄에 입력된 사람의 수 n과 그 다음 줄에 입력된 각 사람의 인출 시간을 담은 intArr을 읽어줍니다. 그 후 initialize 과정으로 intArr를 오름차순으로 정렬합니다. 배열을 오름차순으로 정렬하는 것은 시간이 적게 걸리는 사람을 앞에 둘수록 인출하는데 걸리는 시간이 적다는 점을 이용하여 Logic에서 계산을 효율적으로 하기 위함입니다.

 

Logic부분에서는 for문으로 모든 사람들의 시간을 돌며, sum에 걸리는 시간과 n-i를 곱해 더해주는데요.

이는 삐뚤빼뚤하지만 제가 적은 그림을 보시면 조금 더 쉽게 알 수 있으실겁니다.

 

 

3) 전체코드

그렇게 완성된 코드는 다음과 같습니다.

package sujeong.greedy;

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


// 5분컷
public class BOJ11399 {

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

        int n = Integer.parseInt(reader.readLine());

        String[] strArrN = reader.readLine().split(" ");
        int[] intArr = new int[n];
        for(int i =0;i<n;i++) intArr[i]=Integer.parseInt(strArrN[i]);
        Arrays.sort(intArr);

        int sum=0;
        for(int i=0;i<n;i++) sum += intArr[i]*(n-i);
        System.out.println(sum);
    }

}

 

깃헙으로 더 자세히 보고싶으시다면, 아래 링크를 참고해주세요 :)

https://github.com/Park1122/Algorithm-Study/blob/master/sujeong/greedy/BOJ11399.java

 

GitHub - Park1122/Algorithm-Study: 명지대학교 학생들이 모여서 만든 알고리즘 공부 및 코딩테스트 준비

명지대학교 학생들이 모여서 만든 알고리즘 공부 및 코딩테스트 준비를 위한 스터디입니다. Contribute to Park1122/Algorithm-Study development by creating an account on GitHub.

github.com