백준 11399번 문제풀이 (그리디 알고리즘)
그리디 알고리즘 문제이다.
각 사람이 돈을 인출하는데 필요한 시간의 최솟값을 구해야한다.
따라서 돈을 인출하는데 걸리는 시간이 작은 사람이 최대한 앞에 몰려 있어야한다.
1 2 3 4 5 6 7 8 9 10 11 12 | persons = int(input()) pList = list(map(int, input().split())) pList.sort() result = 0 for i in range(len(pList)): result += pList[i] * (len(pList) - i) print(result) |
몇 번 틀렸는데 2번째 값을 받을 때, 5개를 한정해서 받아버렸다.
항상 일반화된 코드를 작성해야한다는 것에 주의하자!
다른 개발자의 블로그를 보면서 다른 풀이도 참고해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 | n = int(input()) numbers = list(map(int, input().split())) numbers.sort() # 정렬 pre = 0 #이전 까지의 합 result = 0 #총 합계 for i in range(0, n): result += pre + numbers[i] pre += numbers[i] print(result) |
비슷한 로직인데 이전까지의 합을 따로 저장한다.