등급이 실버III 이라고 되어있긴 하지만, 의외로 간단하게 해결이 가능하다.
다만, 그리디 알고리즘인만큼, 숫자들에 대한 규칙을 잘 찾아내는 것이 좋다고 생각된다.
1
2
3
4
5
6
7
8
|
n = int(input())
line = list(map(int, input().split()))
line.sort() # 가장 큰 수를 가장 마지막으로 보내버리자
total = 0
for i in range(n):
for j in range(i+1):
total += line[j]
print(total)
|
cs |
가장 큰 숫자를 가장 뒤로 옮기면서, 정렬시켜서 다음과 같이 덧셈을 처리하는 과정을 찾을 수 있다.
1 = 1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 3 = 9
1 + 2 + 3 + 3 + 4 = 13
==> 1 + 3 + 6 + 9 + 13 = 32
이를 코드로만 옮겨서 만들면 끝!
문제 출처: https://www.acmicpc.net/problem/11399
'코딩 문제풀이 및 연습 > Python 연습' 카테고리의 다른 글
[백준] 6768_Don’t pass me the ball! 파이썬 (combination함수) (0) | 2021.10.09 |
---|---|
[백준] 13305_주유소 파이썬 (그리디 알고리즘) (0) | 2021.10.07 |
[백준] 7568_덩치 파이썬 (0) | 2021.09.27 |
[백준] 2798_블랙잭 파이썬 (combination함수 vs 3중for문) (0) | 2021.09.26 |
[백준] 5532_방학 숙제 파이썬 (if-else vs ceil함수) (0) | 2021.09.22 |