본문 바로가기

알고리즘 공부/연습 문제

백준) 11399 - 파이썬

https://www.acmicpc.net/problem/11399

(실버 4 문제)

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

입력

5
3 1 4 3 2

출력

32

내 코드

N=int(input())
T=list(map(int,input().split()))
T.sort()
result=0
result2=0
temp=0
T_result=[]
for i in T:
  result=i+temp
  temp=result
  T_result.append(temp)
for j in T_result:
  result2+=j
print(result2)

먼저 사람의 인수를 받는 변수 N을 설정하고 list(map(int...))를 이용해서 사람마다 걸리는 시간을 리스트의 형태로 받았다.

최소의 시간을 내기 위해서는 내림차순으로 시간을 사용하는 것이 가장 최소의 시간이 도출된다고 판단하고 걸리는 시간 리스트를 내림차순으로 정렬했다.

그 후 내림차순으로 정렬한 리스트를 바탕으로 은행 업무를 진행했을때, 1번째 사람이 걸리는 시간, 2번째 사람이 걸리는 시간 등을 temp 변수를 통해서 저장시켜서 최종적으로 T 리스트의 순서대로 업무를 수행했을 때 한 사람당 걸리는 시간을 T_result 리스트에다 저장시켰다.

마지막으로 T_result 내에 있는 인자들을 합쳐서 최종적으로 걸리는 시간을 도출하였다.

다른 풀이

p_num = int(input())
min_list = list(map(int,input().split()))
min_list.sort()

psum_list = []
psum = 0


# prefix sum 
for i in min_list:
    psum += i
    psum_list.append(psum)
    

print(sum(psum_list))

내 풀이랑 동일한 로직으로 해결을 하였으나 변수의 숫자를 줄이고 내장 함수를 이용해서 보다 깔끔하게 코드를 구현하였다. 

 

느낀 점

그리디 알고리즘 유형의 실버 4 문제였다. 그리디 알고리즘을 공부는 하였으나 무엇인지 감을 못 잡고 있었는데 이것을 통해서 간단하게나마 그리디 알고리즘이 무엇인지 알 수 있게 되었다.

아쉬운 점으로는 아직은 문제를 읽고 바로 어떤 유형인지 파악하는 능력이 부족했다. 문제의 조건을 잘 읽고 유형을 파악하는 연습을 해야겠다.

'알고리즘 공부 > 연습 문제' 카테고리의 다른 글

백준) 11723 - 파이썬  (0) 2023.09.06
백준) 2635 - 파이썬  (0) 2023.09.06
백준) 2559 - 파이썬  (0) 2023.09.04
SW Expert Academy) 17299. 최소 덧셈-파이썬  (0) 2023.08.16
백준) 1920 - 파이썬  (0) 2023.08.08