반응형
https://www.acmicpc.net/problem/11399
문제
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)
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[Python] 백준/BOJ - 8958번: OX퀴즈 (0) | 2021.10.16 |
---|---|
[Python] 백준/BOJ - 5885번: 거스름돈 (0) | 2021.10.15 |
[JS] LeetCode - 2. Add Two Numbers (0) | 2021.10.01 |
[JS] 봉우리 (0) | 2021.09.09 |
[JS] 일곱 난쟁이 (0) | 2021.09.09 |