스위프트 코딩테스트 강좌, 선물 전달하기

안녕하세요, 오늘은 스위프트 코딩테스트에서 자주 나오는 알고리즘 문제 중 하나인 “선물 전달하기”에 대해 알아보겠습니다. 이 문제는 면접이나 코딩 테스트에서 매우 빈번하게 등장하며, 알고리즘적 사고를 기르는 데 도움이 됩니다.

문제 설명

당신과 친구들이 생일 파티를 열기로 하였습니다. 모든 친구들이 서로에게 선물을 주고받고 싶어합니다. 그러나, 한 친구에게는 자기 자신에게 선물을 주는 것을 허용하지 않기로 하였습니다. 각 친구들은 특정한 친구에게 선물을 주기로 약속했습니다. 다음은 총 N명의 친구들이 있고, 그들이 주기로 한 선물의 목록이 주어졌을 때, 각 친구가 받을 선물을 출력하는 프로그램을 작성하시오.

입력 형식

  • 첫 번째 줄에는 친구의 수 N (1 ≤ N ≤ 100)이 주어진다.
  • 두 번째 줄에는 각 친구가 선물을 주기로 한 친구의 인덱스가 주어진다. (친구는 1부터 N까지 번호를 가진다)

출력 형식

각 친구가 받을 선물의 친구 번호를 한 줄에 하나씩 출력한다.

예제 입력

5
2 3 4 5 1
    

예제 출력

1
2
3
4
5
    

문제 풀이 과정

1단계: 문제 이해하기

먼저, 우리는 문제를 이해해야 합니다. 주어진 입력에서 각 친구가 누구에게 선물을 줄 것인지 알 수 있습니다. 각 친구는 자신에게서 선물을 받을 친구의 인덱스를 알아야 합니다. 따라서 출력할 결과는 각 친구가 주기로 한 인덱스를 기반으로 한 배열로 생각할 수 있습니다.

2단계: 데이터 구조 설계

우리는 입력값을 저장할 배열과, 각 친구가 받고 싶은 선물의 배열을 준비합니다. 친구 번호는 1부터 시작하므로, 배열은 크기 N + 1로 선언하는 것이 편리합니다.

3단계: 문제 해결 알고리즘 설계

알고리즘은 다음과 같습니다:

  1. 입력을 받아서, 크기가 N + 1gift 배열을 선언합니다.
  2. 입력된 선물 상자를 gift 배열에 저장합니다.
  3. 앱에서 각 친구의 인덱스에 해당하는 선물을 출력합니다.

4단계: 스위프트 구현

이제 스위프트를 사용하여 알고리즘을 구현해 보겠습니다:

import Foundation

// 친구 수 입력
let N = Int(readLine()!)!

// 선물 전달 배열
var gift = Array(repeating: 0, count: N + 1)

// 선물 디스트리뷰션 입력
let gifts = readLine()!.split(separator: " ").map { Int($0)! }

// 배열에 팩킹
for i in 0..

    

5단계: 코드 설명

코드를 간단히 설명하자면:

  1. 우선 N이라는 친구 수를 입력받습니다.
  2. gift라는 배열을 선언하고, 크기를 N + 1로 합니다. (배열 인덱스는 1부터 시작하기 때문)
  3. 그리고 두 번째 입력을 통해 선물을 주기로 한 친구의 인덱스를 gifts 배열로 받습니다.
  4. 반복문을 통해 각 친구가 받을 선물을 gift 배열에 저장합니다. 인덱스 i를 이용해 해당 친구의 인덱스에 저장합니다.
  5. 모든 과정을 마친 뒤, 친구들이 받을 선물을 출력합니다.

결론

이 문제는 대부분의 코딩 테스트에서 주어지는 기본적인 배열 문제입니다. 문제를 이해하고, 적절한 데이터 구조와 알고리즘을 통해 쉽게 해결할 수 있습니다. 이처럼 알고리즘 문제를 다양한 접근법으로 풀어 나가면 실력을 향상시키는 데 많은 도움이 됩니다. 모두들 이 과정을 통해 스위프트가 더 친숙해지기를 바랍니다!