728x90
https://www.acmicpc.net/problem/11399
11399번: ATM
첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
www.acmicpc.net
사고)
1. 각 사람들의 기다리는 시간의 합을 구하는 문제인데 딱 보자마자 오름차순 정렬로 다 합쳐서 답을 구하면 될것이라 생각했다.
2. 오름차순 정렬에는 여러가지 방법들이 있지만 내가 알고 있는 정렬중에서 qsort정렬을 사용하기로 생각했다.
3. qsort함수가 빠르게 정렬할수 있다고 생각했다.
4. 정렬한후 각 사람당 기다리는 시간을 더해주는데 이때 while문을 한번더 사용하여 앞에 기다리는 시간도 합쳐질수 있도록했다.
개선점 || 비판점)
1. while문을 한번더 안쓰고 쉽게 더할수 있는 방법이 없나 생각해보니 생각이 안난다.
2. 정렬을 하지 않고 쓰는 방법이 있지 않을까?
나의코드)
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b)
{
if (*(int*)a > *(int*)b)
return (1);
else if (*(int*)a < *(int*)b)
return (-1);
else
return (0);
}
int main()
{
int N, i, result, j;
int time[1001] = {0};
scanf("%d", &N);
i = 0;
while (i < N)
{
scanf("%d", &time[i]);
i++;
}
qsort(time, N, sizeof(int), compare);
result = 0;
i = 0;
while (i < N)
{
result += time[i];
j = 0;
while (j < i)
{
result += time[j];
j++;
}
i++;
}
printf("%d", result);
return (0);
}
728x90
'backjoon > 그리디알고리즘' 카테고리의 다른 글
백준 13305 주유소 c언어 (0) | 2023.02.15 |
---|---|
백준 11047번 동전0 c언어 (0) | 2023.01.19 |
댓글