본문 바로가기

카테고리 없음

[백준/BOJ] 11399번 : ATM- Java (자바)

www.acmicpc.net/problem/11399

 

11399번: ATM

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

www.acmicpc.net

 

[문제]

[Soultion]

 

🤔 앞에 사람이 일찍 끝내야 각 사람이 돈을 인출하는 데 필요한 시간이 최소값이 된다.  왜냐하면 앞 사람이 인출하는 시간까지 누적해야되기 때문이다. 그렇기에 오름차순 배열로 순서 정리를 해줘서, 소요 시간이 가장 적은 사람이 앞에 오게끔 만들어야 한다.

 

 

🤔이전까지 누적된 대기 시간 변수를 구하고

그전까지의 누적합 + 본인 순서에 걸리는 시간의 총합 변수를 구하면 된다. 

 

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in); 
		
		int people = sc.nextInt();
		
		int [] arr = new int [people];
		
		for(int i=0; i<people; i++)
		{
			arr[i] = sc.nextInt();
		}
		
		Arrays.sort(arr); 
        //함수 인풋으로는 배열 형태를 받으며 받은 배열의 원소를 오름차순으로 정리합니다.
        //보시다시피 리턴형은 없습니다.
		
		int prev = 0; 
		
		int sum = 0; 
		
		for(int i=0; i<people; i++)
		{
			sum+= prev + arr[i];
			
			prev+= arr[i];
			
		
		}
		
		System.out.println(sum);
		
	}
		
	

}

 

Stranger's Lab 님의 티스토리 블로그가 잘 정리되어 있어, 그 분의 해설을 보고 많이 도움 받았다.