스파르타 코딩 클럽 - iOS 스타터 6기/알고리즘 코드카타

31. 스파르타 코딩 클럽 - 5월 29일 코딩테스트 연습 (코드카타)

seongpil Heo 2025. 5. 29. 21:15

❓ 오늘의 문제

1. 암호 해독

  •  군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
    • 암호화된 문자열 cipher를 주고받습니다.
    • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
  • 문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return 하도록 solution 함수를 완성해 주세요.

나의 정답 코드

import Foundation

func solution(_ cipher:String, _ code:Int) -> String {
    var result = ""
    
    for (index, char) in cipher.enumerated() {
        if (index + 1) % code == 0 {
            result.append(char)
        }
    }
    return result
}

 ✓ TIL

[ enumerated ]

 

enumerated() | Apple Developer Documentation

Returns a sequence of pairs (n, x), where n represents a consecutive integer starting at zero and x represents an element of the sequence.

developer.apple.com

 

🎯 enumerated란?

  • enumerated()는 현재 컬렉션의 각 요소에 대해 (인덱스, 값) 형태의 튜플을 반환하는 시퀀스를 만듭니다.
  • 인덱스는 0부터 시작하며, 각 요소에 대해 자동으로 1씩 증가합니다.

 

👍 enumerated의 장점

 

  • Swift의 String은 인덱스 타입이 Int가 아니라 String.Index입니다.
  • 그래서 일반적으로 정수 인덱스로 직접 접근하기가 복잡하지만,
  • enumerated()를 쓰면 (index, character) 형식으로 손쉽게 문자와 위치를 함께 다룰 수 있습니다.

 

 

import Foundation

func solution(_ cipher:String, _ code:Int) -> String {
    var result = ""
    
    for (index, char) in cipher.enumerated() {
        if (index + 1) % code == 0 {
            result.append(char)
        }
    }
    return result
}

 

코드를 설명하자면 for문에서 enumerated()를 사용하여 주어진 cipher를 

index와 character 형식으로 사용한다.

 

index + 1을 code로 나누었을 때 나머지가 0이면

결괏값을 return 할 result 변수에 char을 append 한다.

 

index + 1을 하는 이유는 code가 만약 4일 때,

index에 1을 더하지 않고 사용하면 index가 0부터 시작하기 때문에

4번째 자리 값이 아닌 5번째 자리 값을 사용하기 때문에

index + 1을 한 뒤 사용한다.

 

for문을 다 돌고 난 뒤

최종적으로 result 변수를 return 한다.


 😼 GitHub