본문 바로가기
Algorithm Problem Solving/BaekJoon

[BOJ/BaekJoon] 백준 11399 ATM (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2022. 6. 5.
728x90
반응형

BaekJoon BOJ 백준 11399 ATM 문제는 사람의 수, 각 사람이 돈을 인출하는 데 걸리는 시간이 주어졌을 때 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 문제이다.

 

BaekJoon 11399 ATM 문제 정보

출처

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

알고리즘 분류

- 그리디 알고리즘, 정렬 (greedy algorithm, 탐욕법, sorting)

난이도

- 실버 4 / Silver 4

 

ATM 문제 요약

  • 1대밖에 없는 ATM 앞에 N명의 사람들이 줄을 서있다.
  • 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는 데 걸리는 시간은 Pi분이다.
  • 사람들이 줄을 서는 순서에 따라서, 돈을 인출하는 데 필요한 시간의 합이 달라지게 된다.
  • 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우
  • [1, 2, 3, 4, 5] 순서로 줄을 선다면, 각 사람이 돈을 인출하는 데 필요한 시간의 합은 3+4+8+11+13 = 39분이 된다.
  • 사람의 수 N(1 ≤ N ≤ 1,000), 각 사람이 돈을 인출하는 데 걸리는 시간 Pi(1 ≤ Pi ≤ 1,000)가 주어졌을 때,
  • 각 사람이 돈을 인출하는 데 필요한 시간의 합의 최솟값을 구하여 출력한다.

 

문제 풀이 과정

  1. 사람의 수 N, 각 사람이 돈을 인출하는 데 걸리는 시간 P를 입력받는다.
  2. 인출하는데 걸리는 시작이 적게 드는 사람부터 인출하는 경우가 제일 빠른 경우이다.
  3. 따라서 입력받은 P를 오름차순 정렬한다.
  4. 그 후 각 사람이 돈을 인출하는 데 걸리는 시간을 모두 합하여 출력한다.

 

코드 및 설명
  • N - 사람의 수
  • P - 각 사람이 돈을 인출하는 데 걸리는 시간을 저장한 리스트
  • result - 각 사람이 돈을 인출하는데 필요한 시간의 합
  • now_sum - 현재 사람이 돈을 인출하는데 필요한 시간
N = int(input())
P = list(map(int, input().split()))

P.sort()

result = 0

# 풀이 1
for i in range(N):
    result += sum(P[0:i + 1])

# 풀이 2
# now_sum = 0
# for p in P:
#     now_sum += p
#     result += now_sum

print(result)

 

BaekJoon 백준 BOJ 11399 ATM 문제를 파이썬 python으로 풀어보았다. 난이도는 Silver 실버 4이다.

728x90
반응형

댓글