본문 바로가기

[BOJ] - Python

[백준] 11399 : ATM python

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)

이 된다.