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에 더해준다.
'CS > 알고리즘' 카테고리의 다른 글
[Python] BOJ(백준) 2217번 - 로프 (+ sys.stdin.readline의 중요성) (0) | 2021.06.28 |
---|---|
[Python] BOJ(백준) 9237번 - 이장님 초대 (0) | 2021.06.27 |
[Python] 최단 거리 구하기(BFS) (0) | 2021.06.01 |
[Python] 친구 관계(DFS) (0) | 2021.06.01 |
[Python] 미로 찾기(BFS) (0) | 2021.06.01 |