1. n을 입력받는다
2. 인출하는 데에 걸리는 시간을 list에 저장한다.
3. list를 정렬한다.
4. 한 사람이 ATM을 사용할 때마다 앞 사람들이 인출하는 데에 걸린 시간을 더해 tmp를 계산하고, 총합인 sum에 더해준다.
5. sum을 출력한다.
n = int(input())
time = list(map(int,input().split()))
time.sort()
tmp = 0
sum = 0
for i in range(n):
for j in range(i+1):
tmp += time[j]
sum += tmp
print(tmp)
이중반복문을 쓰는 것이 그다지 효율적인 방법은 아닌 것 같아 다른 사람들의 풀이도 찾아보았다.
아래는 enumerate()를 사용한 코드이다.
N = int(input())
P = sorted(map(int, input().split()))
sum = 0
for i, p in enumerate(P):
sum += p * (N - i)
print(sum)
print(sum)
문제에서 주어진 예시처럼
5
3 1 4 3 2
가 입력으로 주어지면 정렬된 리스트 P는 [1,2,3,3,4]가 된다.
그리고 아래와 같이 계산을 수행하면 최소 시간을 구할 수 있는데,
1
1+2
1+2+3
1+2+3+3
1+2+3+3+4
P[0]인 1이 n번
P[1]인 2가 n-1번
P[2]인 3이 n-2번
P[3]인 3이 n-3번
P[4]인 4가 n-4번 더해지는 걸 알 수 있다.
이를 코드로 적으면
for i,p in enumerate(P):
sum += p*(n-1)
이 된다.
'[BOJ] - Python' 카테고리의 다른 글
[백준] 11286 : 절댓값 힙 python (0) | 2023.08.17 |
---|---|
[백준] 13305 : 주유소 python (0) | 2023.08.13 |
[백준] 1931 : 회의실 배정 python (0) | 2023.08.12 |
[백준] 11047 : 동전 0 python (0) | 2023.08.12 |
[백준] 1991 : 트리 순회 python (0) | 2023.08.10 |