728x90
[Swift] 프로그래머스 시저 암호(lv. 1)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12926
2. 접근
영어 대, 소문자, 공백밖에 없기 때문에 AsciiValue를 사용하면 되겠다는 생각을 했다.
대문자 A가 asciiValue int로 65이고, 소문자 a가 97이기 때문에, 이 수를 빼서 생각하면 되고, 나머지 공백은 -1로 하여 별도로 처리하면 되겠다는 생각을 했다.
아래 코드의 반복문에서는 input을 순환하여 돌면서 한 글자마다 uppercase인지 lowercase인지 확인을 해준다. 둘다 아닐 경우 answer 배열에 " "를 넣어준다.
n은 옆으로 밀 숫자인데, 현재 temp(asciiValue에서 특정 숫자를 뺀 수)에서 n을 더하면 그 자리의 숫자가 나온다. 여기에서 25를 초과하면 다시 0으로 넘어가야 하는데, 삼항연산자가 이 기능을 한다.
n만큼 이동한 후의 값을 찾아 temp에 넣어주고, 다시 uppercase이면 65를 더해주고, lowercase면 97을 더해주고 Character로 바꾸어 answer 배열에 넣어준다.
반복문을 모두 순회하면, 공백을 포함한 문자들이 answer에 들어가있고, 이것을 다시 String으로 바꾸어 리턴하면 끝.
asciivalue를 적재적소에 활용할 줄 알면 금방 푸는 문제이다.
3. 코드
import Foundation
func solution(_ s:String, _ n:Int) -> String {
let input = s
var answer = [Character]()
for i in input {
var temp = i.isUppercase ? Int(i.asciiValue!) - 65 : i.isLowercase ? Int(i.asciiValue!) - 97 : -1
if temp == -1 {
answer.append(" ")
continue
}
temp = temp + n > 25 ? (temp + n - 26) : temp + n
if i.isUppercase {
answer.append(Character(String((UnicodeScalar(temp + 65)!))))
} else {
answer.append(Character(String((UnicodeScalar(temp + 97)!))))
}
}
return String(answer)
}
728x90
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 비밀지도(lv. 1) (0) | 2023.01.17 |
---|---|
[Swift] 프로그래머스 최소직사각형(lv. 1) (0) | 2023.01.16 |
[Swift] 프로그래머스 옹알이(1) (lv.0) (0) | 2023.01.12 |
[Swift] 프로그래머스 평행(lv. 0) (0) | 2023.01.11 |
[백준] 1918 후위 표기식 python 알고리즘 문제 (0) | 2022.05.15 |
댓글