코딩 연습/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. 느낀점
문제에서 친절히 설명해주어서인지 어렵지 않게 풀었다.
다른 사람들이 쓴 코드를 살펴보았는데 다른 사람들은 누적 시간으로 더하였더라. 이런 접근 방향도 있구나하며 신기했다. 개인적인 생각으로는,, 나의 코드가 변수 선언을 덜 해서 더 좋은 코드가 아닌가... 라는 생각이 든다..