Archive/Questions
[programmers/Swift] 시저 암호
Marco
2022. 4. 28. 19:39
728x90
programmers.co.kr - 코딩테스트연습 - Lv.1 - 연습문제 - 시저 암호
코딩테스트 연습 - 시저 암호
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀
programmers.co.kr
Constraints :
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
//
// Created by Yongwoo Marco on 2022/04/28.
// Copyright © 2022 Yongwoo Marco Kim. All rights reserved.
//
func solution(_ s:String, _ n:Int) -> String {
let values = (a: Character("a").asciiValue!, z: Character("z").asciiValue!,
A: Character("A").asciiValue!, Z: Character("Z").asciiValue!)
let ranges = (lowercase: values.a...values.z,
uppercase: values.A...values.Z)
return s.map { char in
if char == " " {
return String(char)
} else {
let value = char.asciiValue!
var sum = value + UInt8(n)
if ranges.lowercase ~= value && sum > values.z {
sum = sum - values.z + values.a - 1
} else if ranges.uppercase ~= value && sum > values.Z {
sum = sum - values.Z + values.A - 1
}
return String(Character(UnicodeScalar(sum)))
}
}.joined()
}
How I tried this :
a, z, A, Z 문자의 아스키 값을 받고 각 문자가
소문자인지 대문자인지에 따라서
옮겨진 값이 z 또는 Z를 넘어가는 경우 다시 a 로 넘어가도록 처리
나머지 경우는 n 만큼 옮겨진 값을 다시 문자로 변환
문제에 관한 모든 저작권 : https://programmers.co.kr/
728x90