Algorithm/Problem Solving

[Python] 백준/BOJ - 11399번: ATM

SH_Roh 2021. 10. 9. 02:42
반응형

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

 

11399번: ATM

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

www.acmicpc.net

문제

N명의 사람들이 줄을 서있다. 이들은 1번~N번까지 번호가 매겨져 있고, i번 사람이 돈을 인출하는데 걸리는 시간은 p[i]분. 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 프로그램을 작성하라.

 

입력

첫째 줄: 사람의 수 N(1<=N<=1000).

둘째 줄: 각 사람이 돈을 인출하는데 걸리는 시간 pi(1<=pi<=1000)

 

예제 입력

5
3 1 4 3 2

 

예제 출력

32

 

그리디 알고리즘을 이용하는 문제이다.

 

풀이

n = int(input())
p = list(map(int, input().split()))
tmp = 0
res = 0
p.sort() # p를 오름차순으로 정렬

for i in p: # 배열 p의 요소들을 i로 하나씩 탐색
    res += tmp + i
    tmp += i # i까지 요소들의 합을 tmp에 더해줌

print(res)

 

 

위의 코드는 나의 풀이인데, 찾아보다 보니 내장 함수인 sum을 이용한 깔끔한 풀이도 있었다.

 

 

내장 함수 sum과 배열 슬라이스를 이용한 풀이.

 

n = int(input())
p = list(map(int, input().split()))
res = 0
p.sort() # 배열 p를 오름차순 정렬

for i in range(n): 
    res += sum(p[:i+1]) # p의 0부터 i번째 값을 sum으로 더해서 res에 더해줌

print(res)

 

맞았습니다!!

 

반응형