본문 바로가기
백준

[백준] 11399번 : ATM - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 9.
728x90
반응형

 

 

11399번: ATM

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

시간의 합이 최소가 되려면 돈을 인출하는데 필요한 시간이 적은 사람부터 돈을 인출하면 된다. 따라서 각 사람이 돈을 인출하는데 필요한 시간이 저장된 리스트에서 최솟값을 구하여 이전 사람이 돈을 인출한 시간에 더하고 그 값을 전체 인출 시간에 더해준다. 시간을 더했으면 해당 사람을 삭제하고 나머지 값 중 최솟값을 찾아 계속적으로 해당 과정을 반복하면 된다.

 

  1. sys.stdin.readline() 함수로 입력받기 위해 sys 모듈을 불러온다. import sys
  2. 사람의 수를 입력받는다. N = int(sys.stdin.readline())
  3. 각 사람이 돈을 인출하는 데 걸리는 시간을 리스트로 입력받는다. li = list(map(int, sys.stdin.readline().split()))
  4. 각 사람이 돈을 인출하는데 필요한 시간의 합을 저장할 변수를 생성하고 초기화한다. total = 0
  5. 각 사람이 돈을 인출하는데 필요한 시간을 저장할 변수를 생성하고 초기화한다. time = 0
  6. 모든 사람이 돈을 인출할 때까지 반복한다. while (len(li) != 0)
  7. 각 사람이 돈을 인출하는데 필요한 시간은 이전 사람이 돈을 인출하는데 총 걸린 시간에 현재 사람이 돈을 인출하는데 필요한 시간을 더해주면 된다. time += min(li)
  8. 현재 사람이 돈을 인출하는데 필요한 시간을 구했으면 이를 총 시간에 더해준다. total += time
  9. 현재 사람이 돈을 인출했으면 인출할 사람의 시간 리스트에서 삭제해 준다. li.remove(min(li))
  10. 모든 사람이 돈을 인출했으면 총 걸린 시간을 출력해 준다. print(total)
반응형

3. 소스코드

import sys

N = int(sys.stdin.readline())
li = list(map(int, sys.stdin.readline().split()))

total = 0
time = 0
while (len(li) != 0):
    time += min(li)
    total += time
    li.remove(min(li))

print(total)
728x90
반응형