[백준] 11399번: ATM [C언어]

Boknami·2022년 2월 15일
0

백준문제풀이

목록 보기
17/45

📑문제

ATM을 사용하기 위해 대기중인 손님들의 대기시간을 최소화 해보자


💡 핵심 포인트

어떻게 하면 시간을 최소화할 것인가?

가장 먼저 생각해야할 것은 대기중인 손님들의 시간을 최소화 하기 위해서 무엇을 해야하는가이다. 무작위의 대기시간을 가진 손님들의 총 합산 값이 가장 작게 하기 위해서는 대기시간이 작은 손님부터 먼저 시작을 하는게 가장 효율이 좋다. 그렇게 뒷 사람들의 대기시간이 줄어들기 때문이다.
이것을 위해 정렬 알고리즘을 이용해서 오름차순으로 정렬을 해주었다.

	//------------정렬해주는 부분------------
	for (int j = 0; j < People; j++)
	{
		for (int i = 0; i < People-1; i++)
		{
			if (time[i] > time[i + 1])
			{
				swap = time[i];
				time[i] = time[i + 1];
				time[i + 1] = swap;
			}
		}
	}

손님들의 대기시간의 총합

손님들의 대기시간은 해당 손님의 앞 사람의 업무시간에 영향을 받는다. 예를 들어 1분/2분/3분 이라면 3번째 손님은 3분의 대기시간과 자기가 사용하는 3분의 시간을 합쳐 총 6분을 사용하게 된다. 이처럼 앞에 사람들의 시간에 자기 시간을 더해주면 해당 손님의 시간이된다. 이를 위해 반복문을 통해 앞으로 나아가면서 합산을 진행시켜주었다.

	//----------앞으로 나아가며 합산---------
	for (int i = 0; i < People; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			Sum = Sum + time[j];
		}
		if(i == People-1)
			printf("%d", Sum);
	}

❗ 느낀점

여러모로 어디서나 정렬을 자주 사용하게 되는 것 같다. 블로그에 정리하고 있던 정렬 알고리즘을 복습 및 내용을 추가해야겠다.

[2022-02-16 : 정렬 알고리즘 학습 및 정리 예정]


🧾 전체 코드

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>

int main()
{
	int People = 0;
	int time[1000] = { 0, };
	int swap = 0;
	int Sum = 0;
	scanf("%d", &People);

	for (int i = 0; i < People; i++)
	{
		scanf("%d", &time[i]);
	}

	//------------정렬해주는 부분------------
	for (int j = 0; j < People; j++)
	{
		for (int i = 0; i < People-1; i++)
		{
			if (time[i] > time[i + 1])
			{
				swap = time[i];
				time[i] = time[i + 1];
				time[i + 1] = swap;
			}
		}
	}

	//----------앞으로 나아가며 합산---------
	for (int i = 0; i < People; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			Sum = Sum + time[j];
		}
		if(i == People-1)
			printf("%d", Sum);
	}
}

0개의 댓글