파이썬 코딩테스트 강좌, ATM 인출 시간 계산하기

여러분은 이제 취업을 준비하며 코딩 테스트를 준비하고 있습니다. 이 강좌에서는 파이썬을 사용하여 ATM 인출 시간을 계산하는 문제를 해결함으로써 효율적인 문제 풀이 능력을 기리는 방법을 알아보겠습니다.

문제 정의

은행의 ATM에서는 여러 사람들의 인출 요청을 처리합니다. 각각의 요청은 특정한 시간에 생성되고, 요청이 처리되기까지 걸리는 시간을 계산해야 합니다. 주어진 문제는 다음과 같습니다:

인출 요청이 처리되는 시뮬레이션을 작성하세요. 요청은 n명의 고객이 ATM에 줄을 서서 인출할 때, 각 고객이 돈을 인출하는 데 걸리는 시간이 주어집니다. 모든 고객의 인출 요청을 처리하는 데 걸리는 총 시간을 출력해야 합니다.

입력:
- 첫 번째 줄에는 고객 수 n이 주어집니다. (1 ≤ n ≤ 1000)
- 두 번째 줄에는 각 고객이 돈을 인출하는 데 걸리는 시간이 공백으로 구분되어 주어집니다.

출력:
- 모든 고객의 요청을 처리하는 데 걸리는 총 시간을 출력합니다.

예제 입력/출력

입력:

5
3 1 4 3 2

출력:

32

문제 분석

고객이 ATM에 인출을 요청하면, 각 고객이 들어온 순서대로 한 사람씩 처리하게 됩니다. 이때, 한 고객의 요청이 완료되기 전까지 다른 고객은 대기해야 합니다. 따라서 모든 고객의 인출 요청을 처리하는 시간을 계산하기 위해서는 다음과 같은 과정을 거쳐야 합니다:

  1. 각 고객의 인출 시간을 이용하여 누적 시간을 계산합니다.
  2. 각 고객이 기다리는 시간을 포함하여 총 소요 시간을 구합니다.

알고리즘 설계

이 문제를 해결하기 위해서는 다음과 같은 알고리즘을 설계할 수 있습니다:

  1. 입력으로 주어진 고객 수 n과 각 고객의 인출 시간을 리스트로 저장합니다.
  2. 첫 번째 고객의 인출 시간을 누적 시간 total에 더합니다.
  3. 그 다음 고객부터는 이전 고객의 인출 시간이 더해진 누적 시간을 기준으로 현재 고객의 인출 시간을 더하여 총 소요 시간을 계산합니다.
  4. 모든 고객의 총 시간을 합산하여 출력합니다.

파이썬 코드 구현

위의 알고리즘을 기반으로 파이썬 코드를 구현해 보겠습니다.

def calculate_total_withdraw_time(n, withdraw_times):
    total_time = 0
    for i in range(n):
        total_time += withdraw_times[i] * (n - i)
    return total_time

# 입력값 take from stdin
n = int(input("고객 수를 입력하세요: "))
withdraw_times = list(map(int, input("각 고객의 인출 시간을 입력하세요: ").split()))

# 총 인출 시간 계산
total_time = calculate_total_withdraw_time(n, withdraw_times)
print("모든 고객의 요청을 처리하는 데 걸리는 총 시간:", total_time)

코드 설명

코드의 각 부분을 살펴보겠습니다:

  • 함수 정의: calculate_total_withdraw_time 함수는 고객 수 n과 인출 시간을 인자로 받아 총 인출 시간을 계산합니다.
  • 총 시간 계산: total_time 변수를 초기화한 후, 반복문을 통해 각 고객의 인출 시간을 기반으로 반복적으로 총 시간을 계산하여 누적합니다.
  • 입력 처리: 고객 수와 인출 시간을 입력받고, 이를 리스트로 변환하여 함수에 넘깁니다.
  • 출력: 계산된 총 시간을 출력합니다.

복잡도 분석

위 코드는 고객 수 n에 대해 1회 반복하며 총 인출 시간을 계산하므로, 시간 복잡도는 O(n)입니다. 공간 복잡도는 입력 리스트를 제외하고는 상수만 사용하므로 O(1)입니다.

마무리

이번 강좌에서는 ATM 인출 시간을 계산하는 문제를 통해 파이썬 프로그래밍에서 문제를 분석하고 알고리즘을 설계하는 방법을 공부했습니다. 이와 같은 문제들은 실제 코딩 테스트에서 종종 출제되므로, 충분히 연습하여 문제 해결 능력을 기르는 것이 중요합니다. 추가적인 연습 문제와 답안을 찾아보는 것도 좋은 방법입니다.

코딩 테스트 준비에 도움이 되었기를 바라며, 다음 강좌에서 더 많은 알고리즘 문제를 만나볼 수 있기를 기대합니다!