본문 바로가기

프로그래머스 (Swift)/lv 1

[lv1] 둘만의 암호

문제

 

내 정답 코드

import Foundation

func solution(_ s:String, _ skip:String, _ index:Int) -> String {
    var result = ""
    var temp = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"].filter { !skip.contains($0) }
    let count = temp.count
    let alphabet = temp.enumerated()
    
    for chr in s {
        let i = alphabet.filter { $0.element == String(chr) }.first?.offset
        let j = (i!+index) >= count ? (i!+index) % count : (i!+index)
        let value = alphabet.filter { $0.offset == j }.first?.element ?? ""
        result.append(value)
    }
    
    return result
}

 

#

1. 일단 모든 알파벳으로 문자열 배열을 하나 만들고 skip의 문자열들은 제외시켜 준다.

2. 제외한 배열의 count를 미리 저장해놓고

3. enumerated로 선언하여 새로운 상수에 할당해준다.

4. s의 문자를 하나씩 가져와 alpahbet에서 같은 문자의 인덱스를 가져와 i에 저장한다.

5. i에 index 값을 더하여 새로운 j를 구하는데 z인덱스를 넘어가면 a인덱스로 넘어가야 하기 때문에 count로 나눈 나머지 값을 할당해준다. (처음에 (i!+index) - count로 해줬다가 두바퀴 돌았을 때 런타임 에러가 났다.)

6. 구한 j에 맞는 문자를 가져와 result에 append해주고 최종 result를 반환한다.


배운 기술

'프로그래머스 (Swift) > lv 1' 카테고리의 다른 글

[lv1] 옹알이 (2)  (0) 2024.07.07
[lv1] 명예의 전당 (1)  (0) 2024.07.07
[lv1] 없는 숫자 더하기  (0) 2024.06.25
[lv1] 덧칠하기  (0) 2024.06.16
[lv1] 과일 장수  (0) 2024.06.16