C# 코딩테스트 강좌, ATM 인출 시간 계산하기

이 강좌는 C#을 활용하여 알고리즘 문제를 해결하는 방법을 배우는 데 중점을 두고 있습니다. 특히 ‘ATM 인출 시간 계산하기’라는 주제를 선택하여, 문제 이해에서부터 해결 방법, 코드 작성까지의 전 과정을 상세히 설명하겠습니다. 실제 코딩 테스트 및 면접에서 자주 등장하는 문제이므로, 이 과정을 통해 여러분의 알고리즘 문제 해결 능력을 한층 더 향상시킬 수 있습니다.

문제 설명

은행의 ATM 기계에서 인출을 하기 위해 사람들은 줄을 서게 됩니다. 각 사람의 인출에 걸리는 시간은 다를 수 있습니다. 이 문제에서는 N명의 사람이 ATM에서 인출을 하기 위해 줄을 서 있을 때, 총 인출 시간을 계산하는 것을 목표로 합니다. 다음과 같은 조건이 주어집니다:

  • 첫 번째 사람부터 차례대로 인출을 시작합니다.
  • 각 사람은 자신의 인출이 끝난 후 다음 사람의 인출이 시작됩니다.
  • 각 사람의 인출에 걸리는 시간은 배열로 주어집니다.

예를 들어, 인출에 걸리는 시간이 [3, 1, 4, 3, 2]라고 가정해 보겠습니다. 두 번째 사람의 인출이 끝나야 세 번째 사람이 인출을 할 수 있으므로, 인출의 총 시간은:

3 (1번) + 1 (2번) + 4 (3번) + 3 (4번) + 2 (5번) = 13

입력 및 출력 형식

입력

첫 번째 줄에는 정수 N (1 ≤ N ≤ 1000)이 주어집니다. 두 번째 줄에는 각 사람의 인출 시간 H1, H2, …, HN (1 ≤ Hi ≤ 1000)가 공백으로 구분되어 주어집니다.

출력

모든 사람이 인출을 완료하는 데 걸리는 총 시간을 출력합니다.

문제 해결 접근법

이 문제를 해결하기 위해 몇 가지 단계를 거쳐 접근할 수 있습니다:

1. **문제 이해하기**: 인출을 할 때, 각 사람의 인출 시간이 순차적으로 더해지는 것을 첫 번째로 확인해야 합니다.
2. **데이터 구조 선택**: 인출 시간은 배열로 제공되므로, 배열을 활용하여 시간 합계를 구하는 것이 가장 적합합니다.
3. **알고리즘 선택**: 각 인출 시간이 순차적으로 합산되므로, 반복문을 통해 간단하게 총 인출 시간을 계산할 수 있습니다.

코드 작성

위의 접근법을 바탕으로 C# 코드를 작성해 보겠습니다. 코드는 다음과 같이 작성될 수 있습니다:


using System;

class Program
{
    static void Main()
    {
        // N명의 사람 수 입력
        int N = Convert.ToInt32(Console.ReadLine());
        // 인출 시간 배열 생성
        int[] withdrawalTimes = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);

        // 총 인출 시간 변수 초기화
        int totalTime = 0;

        // 각 사람의 인출 시간 합산
        foreach (var time in withdrawalTimes)
        {
            totalTime += time;
        }

        // 결과 출력
        Console.WriteLine(totalTime);
    }
}

코드 설명 및 분석

위의 C# 코드는 다음과 같은 구조로 이루어져 있습니다:

1. **입력 받기**: `Console.ReadLine()`을 사용하여 첫 줄에서는 사람 수 N을, 두 번째 줄에서는 인출 시간을 입력받습니다.
2. **배열 변환**: `Array.ConvertAll` 메소드를 통해 공백으로 구분된 인출 시간을 정수형 배열로 변환합니다.
3. **총 시간 계산**: foreach 루프를 사용하여 각 사람의 인출 시간을 `totalTime` 변수에 더합니다.
4. **결과 출력**: 최종적으로 총 인출 시간을 출력합니다.

성능 분석

위 알고리즘의 시간 복잡도는 O(N)입니다. N은 인출을 하는 사람의 수입니다. 모든 입력을 순회하며 인출 시간을 더하는 간단한 과정이므로, 효율성을 매우 준수합니다. 메모리 복잡도 또한 O(N)으로, 입력받은 인출 시간을 저장하는 배열이 필요하기 때문입니다.

테스트 케이스

코드를 검증할 수 있도록 몇 가지 테스트 케이스를 만들어보겠습니다:

  • 입력:
    5
    3 1 4 3 2

    출력: 13

  • 입력:
    4
    10 20 10 30

    출력: 70

  • 입력:
    3
    1 1 1

    출력: 3

결론

이번 강좌에서는 ATM 인출 시간을 계산하는 문제를 통해 C# 알고리즘 문제 해결 능력을 키울 수 있는 방법을 알아보았습니다. 문제를 명확히 이해하고 효율적으로 코드로 구현하는 과정은 코딩 테스트에서 매우 중요한 능력입니다. 앞으로도 다양한 알고리즘 문제를 해결하면서 실력을 쌓아가시기 바랍니다. 감사합니다!