문제
11399번: ATM
첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
www.acmicpc.net
입력
첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
출력
첫째 줄에 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 출력한다.
이 문제는 생각보다 괜찮았다.
① 먼저, n (n명의 사람) 과 n명의 사람들이 돈을 인출하는데 걸리는 시간을 입력받아야 한다.
# n명의 사람
n = int(input())
# n명당 걸리는 시간 리스트 추가
time = list(map(int, input().split()))
time.sort()
n명의 사람들이 돈을 인출하는데 걸리는 시간을 리스트 형태로 입력받았다.
그리고, 오름차순 정렬로 변환해주었다.
그 이유는 시간이 제일 적게 걸리는 사람들을 앞에 두기 위함이다.
예를 들어,
[ 3, 1, 4, 3, 2] 순서대로 구하게 되면 돈을 인출하는데 필요한 시간의 합계는 39분이 걸린다.
우리는 필요한 시간의 최소값을 출력해야 하니까 오름차순으로 정렬해주어야 한다.
오름차순으로 정렬을 하면 [ 1, 2, 3, 3, 4] 형태로 정리할 수 있다.
② 다음으로, 돈을 인출하는데 필요한 시간을 구해보자.
# 각 사람이 돈을 인출하는데 걸리는 시간 : answer 선언
answer = 0
sum = time[0]
for i in range(1, len(time)):
sum += time[i]
answer += sum
answer += time[0]
먼저, 정답인 answer (돈을 인출하는데 필요한 시간)을 선언해주었다.
다음으로, 반복문을 통해 합계를 구하려고 해서 sum값을 time 리스트의 첫번째 요소로 초기화 해주었다.
예를 들면,
[1, 2, 3, 3, 4] 리스트에서 걸리는 시간을 구할 때
sum = time[0] 으로 초기화하면 sum의 값은 1이 되고
반복문의 범위를 1에서 부터 리스트 5까지로 정하였으니, 1부터 탐색을 시작할 것이다.
1. sum = time[0] + time[1]
answer = sum + answer
이렇게 반복을 할 것이다.
이 sum을 answer에다가 추가해주고, 마지막에는 answer값에 time[0]값을 더해준다.
[전체코드]
# n명의 사람
n = int(input())
# n명당 걸리는 시간 리스트 추가
time = list(map(int, input().split()))
time.sort()
# 각 사람이 돈을 인출하는데 걸리는 시간 : answer 선언
answer = 0
sum = time[0]
for i in range(1, len(time)):
sum += time[i]
answer += sum
answer += time[0]
print(answer)