Today Sangmin Learned
728x90

링크

https://www.acmicpc.net/problem/11399

난이도(solved.ac 참고)

실버3

풀이

이 문제는 처음에 봤을 때부터 어떻게 풀어야 할 지 바로 머릿속에 떠올랐다. 가장 시간이 적게 들게 하려면, 걸리는 시간을 sort하여 가장 작은 값이 맨 앞에 오도록 해야 한다. 그래야 오래 걸릴수록 뒤로 가서, 전체 시간(돈 뽑는 시간 + 대기시간)을 줄일 수 있기 때문이다.

 

우선 배열 m을 sort했고, 각 사람들의 소요시간 process_time, 전체 소요시간 total_process_time을 각각 배열, 숫자 로 선언했다.

첫 번째 사람은, 기다리는 시간이 없기 때문에 돈을 뽑는 시간 m[0]만 더해주고, 이는 전체 소요시간(total_process_time)에도 해당한다.

이제 두 번째 사람부터 else문에 해당하는데, 두 번째 사람부터는 (앞 사람이 인출하는 데 걸린 시간)만큼 기다려야 하고, 그 이후 (본인의 인출 시간) 만큼 소요된다. 전자가 process_time[i-1]이고, 후자가 m[i]이다. 그리고 이 process_time[i]가 구해질 때마다 이를 total_process_time에 더해준다.

 

profile

Today Sangmin Learned

@steadily-worked

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!