본문 바로가기
backjoon/그리디알고리즘

백준 11399 ATM c언어

by 정구지개발자 2023. 2. 14.
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

댓글