C로 구현한 11399번 ATM 문제 풀이입니다.
https://www.acmicpc.net/problem/11399
#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의 해당 인덱스의 값과 그 전 인덱스 값까지 누적된 값을 더하여 계산한다.
'백준(C언어) 풀이 > 그리디(Greedy) 알고리즘' 카테고리의 다른 글
백준(C) 2437번 저울 풀이 (0) | 2021.08.06 |
---|---|
백준(C) 2217번 로프 풀이 (0) | 2021.08.03 |
백준(C++) 2217번 로프 풀이 (0) | 2021.08.03 |
백준(C) 11047번 동전 0 풀이 (0) | 2021.08.03 |
백준(C) 5585번 거스름돈 풀이 (0) | 2021.08.03 |