func solution(_ s:String, _ n:Int) -> String {
// 답을 적을 String
var answer = String()
// 알파벳을 dic에 인덱스와 함께 저장
let alphabet = ["A":0,"B":1,"C":2,"D":3,"E":4,"F":5,"G":6,"H":7,"I":8,"J":9,"K":10,"L":11,"M":12,"N":13,"O":14,"P":15,"Q":16,"R":17,"S":18,"T":19,"U":20,"V":21,"W":22,"X":23,"Y":24,"Z":25]
// key만 있는 배열 생성
let keys = alphabet.keys.sorted()
// String인 s를 배열로 만들어 하나하나 씩 뽑음
for i in 0..<Array(s).count{
// 공백일시 answer에 공백 추가하고 continue
if Array(s)[i] == " "{
answer += " "
continue
}
// dic에 저장한 알파벳들이 대문자여서 Array(s)의 알파벳도 대문자로 변경 후 n만큼 뒤에 있는 알파벳을 적어줘야하니 n을 더한다 (알파벳에서 Array(s)에 있는 알파벳을 찾아서 인덱스 반환)
var number = alphabet[String(Array(s)[i].uppercased())]! + n
// z는 증가하면 a이기 때문에 26을 빼준다. 인덱스는 0부터 시작이기 때문
if number > 25 {
number = number - 26
}
// key들만 모아놓은 곳에서 인덱스로 알파벳을 찾는다
let value = keys[number]
// 다시 알파벳딕셔너리에 value를 넣어줘서 해당 알파벳이 몇 번째인지 알아낸다 -> value1
let value1 = alphabet.index(forKey: value)
// 알파벳딕셔너리의 키 중 value의 순서가 있는 알파벳을 차례대로 대문자라면 그냥 더해주고 아니면 소문자로 변형해서 넣어준다.
if Array(s)[i].isUppercase{
answer += alphabet.keys[value1!]
}else {
answer += alphabet.keys[value1!].lowercased()
}
}
return answer
}