알고리즘/정렬

[백준] 11399 : ATM

믕비 2023. 4. 1. 23:31
반응형

풀이과정

시간의 합이 최소가 되려면 출력시간이 오름차순으로 배열되어야 함.

기다림 + 인출 시간은 앞의 변수들 + 현재 변수를 모두 합한 값

Array에 sort 함수 사용할 생각 못 하고 ArrayList sort 함수 사용함. 으이그

 

1등 코드

메모리 : 12836 KB

시간 : 72 ms

코드길이 : 498 B

 

내 코드

메모리 : 14456 KB

시간 : 144 ms

코드길이 : 1004 B

 

[상위 코드]

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));
		
		int N = Integer.parseInt(br.readLine());
		int[] arr = new int[N];
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		for(int n = 0; n < N; n++) {
			arr[n] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(arr);
		
		int result = 0;
		
		for(int i = 0; i < N; i++) {
			result += arr[i]*(N - i);
		}
		System.out.print(result);
	}
}

>> 똑같은 코드로 짜서 넣었을 때 나는 132 ms 나와서 아예 코드 복붙하고 돌렸더니 132 ms 나옴.. 뭐지?

>> result += arr[i] * (N-1); 식을 생각은 했는데 직관적이지 않다고 생각해서 메모리를 사용하더라도 변수를 사용했다. 뭐가 더 좋은지는 모르겠음

[내 코드]

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int N = Integer.parseInt(br.readLine());
		ArrayList<Integer> arrList = new ArrayList<>();
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		for(int n = 0; n < N; n++) {
			arrList.add(Integer.parseInt(st.nextToken()));
		}
		
		arrList.sort(Comparator.naturalOrder());
		
		int waitingTime = arrList.get(0);
		int result = arrList.get(0);
		
		for(int i = 1; i < N; i++) {
			waitingTime += arrList.get(i);
			result += waitingTime;
		}
		
		bw.write(Integer.toString(result));
		bw.close();
	}

}
반응형

'알고리즘 > 정렬' 카테고리의 다른 글

[백준] 1931 : 회의실 배정 (JAVA)  (0) 2025.04.28
[백준] 10815 : 숫자카드  (0) 2023.04.03
[백준] 1181 : 단어 정렬  (0) 2023.04.03