코딩 연습/Python

백준 11399 ATM

썬2 2021. 7. 16. 23:30

1. 문제

 

2. 나의 코드

# 나의 코드
N = int(input()) # 사람 입력 받기
time = list(map(int, input().split())) # 사람별 돈 인출 필요 시간 입력 받기

time.sort() # 오름차순으로 정렬
result = 0

for i in range(len(time)):
    result = result + time[i] * (len(time) - i) # 인출 시간 인덱스는 사람이 늘어날 수록 증가하므로 곱하기
print(result)

 

3. 포인트

1. 최소 문제라는 점에서 그리디 유형의 알고리즘이라는 것을 캐치

2. 문제에서 친절하게 오름차순으로 되어있으면 최소한으로 계산할 수 있다는 힌트를 줌 -> 오름차순으로 정렬

3. 계산 복잡도를 줄이기 위해, 각 사람별 걸리는 시간은 본인 포함 남은 인원 수를 곱한다. 

 

4. 다른 사람 코드

# 다른 사람 코드: https://velog.io/@sch804/파이썬-백준-11399번-ATM
n=int(input())
time=list(map(int,input().split()))

time.sort()
sum1=0
prev=0

for i in time:
  prev+=i
  sum1+=prev

print(sum1)

 

5. 느낀점

문제에서 친절히 설명해주어서인지 어렵지 않게 풀었다.

다른 사람들이 쓴 코드를 살펴보았는데 다른 사람들은 누적 시간으로 더하였더라. 이런 접근 방향도 있구나하며 신기했다. 개인적인 생각으로는,, 나의 코드가 변수 선언을 덜 해서 더 좋은 코드가 아닌가... 라는 생각이 든다..