백준(C언어) 풀이/그리디(Greedy) 알고리즘

백준(C) 11399번 ATM 풀이

개발윗미 2021. 8. 3. 18:29

C로 구현한 11399번 ATM 문제 풀이입니다.

 

https://www.acmicpc.net/problem/11399

 

11399번: ATM

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

www.acmicpc.net


#include <stdio.h>

int main() {
	int n, temp, result = 0;
	int time[1001];
	scanf("%d", &n);
	for(int i=0; i<n; i++) {
		scanf("%d", &time[i]);
	}
	for(int i=0; i<n; i++) {
		for(int j=0; j<n-(i+1); j++) {
			if(time[j] > time[j+1]) {
				temp = time[j];
				time[j] = time[j+1];
				time[j+1] = temp;
			}
		}
	}
	for(int i=0; i<n; i++) {
		for(int j=0; j<i+1; j++) {
			result = result + time[j];
		}
	}
	
	printf("%d", result);
}

 

입력한 사람의 수만큼 반복문을 돌려 배열 time의 각 인덱스 값에 입력을 받아 차례로 넣어준다.

 

문제에서 요구하는 바와 같이 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하려면 각 시간이

 

오름차순 형식으로 정렬되어야 한다.

 

그러므로 두번째 반복문에서는 큰 값을 뒤쪽으로 보내주는 방식을 반복적으로 수행하여 오름차순 정렬을 수행하도록 한다.

 

최종적으로 마지막 반복문에서 배열 time의 해당 인덱스의 값그 전 인덱스 값까지 누적된 값을 더하여 계산한다.