백준(S3) 11399번 ATM (C언어 C11 C99)

2021. 10. 21. 16:46·C언어/백준 문제풀이
반응형

코드를 보기전에: 필자는 이 문제를 퀵정렬을 이용해 풀었다

다른 함수로 푸는걸 보고싶은 분들은 다른 블로그의 글을 보기 바란다.

 

출력:첫째 줄에 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 출력한다.

첫번째 사람이 돈을 인출하는데 3분이 걸리고 두번째 사람은 인출하는데 2분이 걸린다고 하자.

그러면 첫번째 사람은 인출하는데 3분이 걸리고, 두번째 사람은 인출하는데 (3+2)분이 걸린다.

*첫번째 사람이 인출할때 뒤에서 기다리기 때문.

그래서 정렬을 이용해 오름차순으로 나열하면 최솟값을 구할수 있다.

 

 

코드를 보면서 하나하나 설명하겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
int time[1001];
void quicksort(int* data, int start, int end)
{
    if (start >= end) {
        return;
    }
    int key = start;
    int i = start + 1;
    int j = end;
    int temp;
    while (i <= j) {
        while (data[i] <= data[key]) {
            i++;
        }
        while (data[j] >= data[key]&& j > start) {
            j--;
        }
        if (i > j) {
            temp = data[j];
            data[j] = data[key];
            data[key] = temp;
        }
        else
        {
            temp = data[i];
            data[i] = data[j];
            data[j] = temp;
        }
        
    }quicksort(data, start, j - 1);
    quicksort(data, j + 1, end);
}
Colored by Color Scripter
cs

우선 퀵정렬 함수의 코드다.

퀵정렬은 나중에 따로 한번 글을 올리겠다.

 

그 후 메인코드에서 사람의 수를 입력받은 다음, 반복문을 이용해 시간을 입력받았다.

여기서 동적메모리를 이용할까도 생각했었는데 배열이 하나밖에 없어서 그냥 호출했다.

그 후, 퀵 정렬을 이용해 입력받은 시간의 값을 오름차순으로 나열했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    int num;
    scanf("%d", &num);
    for (int a = 0; a < num; a++)
    {
        scanf("%d", &time[a]);
    }
    quicksort(time, 0, num - 1);
    int sum = 0;
    for (int a = 0; a < num; a++)
    {
        sum += time[a] * (num - a);
    }
    printf("%d\n", sum);
}
cs

사람이 5명 있다고 하면, 첫번째 사람이 돈을 인출할때는 4명이 기다린다.

그리고 두번째 사람이 돈을 인출할때 첫번째 사람은 집을 갔고, 나머지 3명은 뒤에서 기다린다.

이말은 첫번재 사람이 돈을 인출하는 시간이 5번 더해지고, 두번째 사람이 돈을 인출하는 시간은 4번 더해진다는 것이다

그래서 나는 반복문을 이용해 시간 X 사람수 - a를 했다.

반응형
'C언어/백준 문제풀이' 카테고리의 다른 글
  • 백준(S3) 1449번: 수리공 항승 (C언어)
  • 백준(S5) 10814번: 나이순 정렬 (C언어 C11 C99)
  • 백준(B3) 2747번: 피보나치 수 (C언어 C11 C99)
  • 백준(S4) 10773번: 제로 (C언어 C11 C99)
코딩하는_대학생
코딩하는_대학생
Java Developer, Open Source Enthusiast, Proud Son
  • 코딩하는_대학생
    코딩하는 대학생에서 개발자까지
    코딩하는_대학생
  • 전체
    오늘
    어제
    • 분류 전체보기 (218)
      • 코딩하는 대학생의 책 추천 (8)
        • 클린코드 (5)
        • 헤드퍼스트 디자인패턴 (3)
      • Backend (8)
        • Spring (14)
        • AWS (3)
        • 회고 (4)
        • Redis (5)
        • 다양한 시각에서 바라본 백엔드 (3)
      • Python (35)
        • 개념 및 정리 (15)
        • 백준 문제풀이 (20)
      • JAVA (17)
        • 개념 및 정리 (14)
        • 백준 문제풀이 (2)
      • 왜? (7)
      • C언어 (42)
        • 개념 및 정리 (9)
        • 백준 문제풀이 (32)
      • 개인 공부 (27)
        • 대학 수학 (5)
        • 대학 영어 (10)
        • 시계열데이터 처리 및 분석 (5)
        • 컴퓨터 네트워크 (6)
        • 운영체제 (1)
      • 솔직 리뷰 (23)
        • 꿀팁 (6)
        • IT기기 (1)
        • 국내 여행 (7)
        • 맛집 (2)
        • 알바 리뷰 (2)
      • 대외활동 (17)
        • 체리피우미 3기 (4)
        • 꿀잠이들 6기 (13)
      • 음식 평가 (1)
      • 일상 & 근황 (2)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩하는_대학생
백준(S3) 11399번 ATM (C언어 C11 C99)
상단으로

티스토리툴바