Development record of developer who study hard everyday.

레이블이 파이썬코딩테스트인 게시물을 표시합니다. 모든 게시물 표시
레이블이 파이썬코딩테스트인 게시물을 표시합니다. 모든 게시물 표시
, , , ,

백준 11399번 문제풀이 (그리디 알고리즘)

 백준 11399번 문제풀이 (그리디 알고리즘)


개발블로그

백준 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)
  

비슷한 로직인데 이전까지의 합을 따로 저장한다.


Share:
Read More