티스토리 뷰

https://www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 

1. 문제

 

 

 

2. 정답 코드

n = int(input())
p = list(map(int, input().split()))

# 앞사람의 인출 시간이 짧을수록 총 인출 시간이 단축된다.
# 즉, 인출 시간이 오름차순 정렬되어 있다면 총 인출 시간의 최솟값을 구할 수 있다.
p.sort() # p 오름차순 정렬

answer = 0
accumulation = 0
for pi in p :
  accumulation += pi # i번째 사람이 인출하는 데 걸리는 시간
  answer += accumulation # 모든 사람의 누적 인출 시간

print(answer)
  • 이 문제는 그리디 알고리즘이다. 문제에서 "최솟값"을 찾기 때문이다.
  • 만약 문제에서 "가장 큰/작은~"이라는 말이 나온다면, 그 문제는 그리디 알고리즘을 떠올려 봐야 한다.
728x90