[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 시저 암호 (프로그래머스 lv1, 스위프트)

inu 2022. 2. 2. 17:54
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/12926?language=swift

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

풀이

func solution(_ s:String, _ n:Int) -> String {
    return s.utf8.map {
        var code = Int($0)
        switch code {
            case 65...90:
                code = (code + n - 65) % 26 + 65
            case 97...122:
                code = (code + n - 97) % 26 + 97
            default:
                break
        }
        return String(UnicodeScalar(code)!)
    }.joined()
}
  • 문제 자체는 쉬웠다. 나는 아스키 코드를 사용해 풀었다.
  • 하지만 아스키 코드는 뭔가 '알고리즘'을 통해 해결했다는 느낌이 없다. 아스키 코드를 모르면 풀 수 없다.
func solution(_ s:String, _ n:Int) -> String {
    let alphabets = "abcdefghijklmnopqrstuvwxyz".map { $0 }
    return String(s.map {
        guard let index = alphabets.firstIndex(of: Character($0.lowercased())) else { return $0 }
        let letter = alphabets[(index + n) % alphabets.count]
        return $0.isUppercase ? Character(letter.uppercased()) : letter
    })
}
  • 이 방식은 아스키코드를 몰라도 되는 정말 '알고리즘'적인 풀이 방식이다.
  • 생각하지 어려운 것은 아니지만, 인상깊어서 기록해 놓는다.
반응형