백준_11399 (ATM_실버4_그리디)

RostoryT·2022년 7월 9일
0

DP and Greedy

목록 보기
7/12

메모

메모한것

a b c d e가 이 순서대로 있으면

a는 3분
b는 3+1분
c는 3+1+4분
d는 3+1+4+3분
e는 3+1+4+3+2분 이렇게 됨

대기시간 총합 = 3+4+8+11+13 = 39분

b e a d c 순서대로 있으면

b는 1분
e는 1+2분
a는 1+2+3분 이런느낌

각 분들을 입력받고, 모든 조합을 해서 대기시간 총합의 최솟값을 출력해야함

=> 작은순으로 정렬하면 되는거 아님?
-> 정렬 후 +++++++해나가면 되잖아

알고리즘

쓸필요도 없을 듯


솔루션 코드 - 내가푼

  • 10분컷
import sys

n = int(sys.stdin.readline())
arr = list(map(int,sys.stdin.readline().split()))

arr.sort()

for i in range(1, n):
    arr[i] += arr[i-1]

print(sum(arr))


솔루션 코드 - 블로그 (테케 정리 잘되어있음)

n = int(input())  # 첫째줄 입력
peoples = list(map(int, input().split()))  # 기다리는 사람들 리스트 형태로 입력 받음

peoples.sort()  # 작은 순서대로 정렬
answer = 0  # 정답 변수를 0으로 만듭니다.

for x in range(1, n+1):
    answer += sum(peoples[0:x])  # 리스트의 0번째 수부터 x번째 수까지를 더해줍니다.
print(answer)  # 정답 제출
profile
Do My Best

0개의 댓글