[문풀] string to ascii, ascii to string

Kiwi·2024년 4월 17일

Algorithm

목록 보기
16/17

⚙️ 시저암호


일단 이 문제를 보자마자 아스키코드를 사용해야겠다! 라는 생각까지는 했다. 그러나 문제는 내가 swift에서 문자를 아스키코드로 변환하는 방법을 모른다는 것이다.🫥 그래서 검색을 해보았다. 이 문제에서는 문자열을 아스키코드로 변환하면 아주 편한데 문자열을 아스키코드로 변환하는 방법은 없고 문자(char)를 아스키코드로 변환하는 방법을 찾을 수 있었다.

let char: Character = "A"
let scalarValue = Unicode.Scalar(String(char))!

let asciiCode = scalarValue.value
print(asciiCode)

위의 코드는 문자를 아스키코드로 변환하는 방법인데 먼저 char를 scalarValue로 바꾼후 scalarValue를 asciiCode로 변환하는 원리이다. 반대로 아스키코드를 문자로 복원하는 방법은 다음과 같다.

let asciiCode: UInt8 = 65 
let scalarValue = Unicode.Scalar(asciiCode)

let character = scalarValue.description
print(character)

이외에도 이 문제에서 생각해야하는 것은 단순히 ascii코드를 옆으로 밀어주는 것 뿐만 아니라 밀어준 아스키코드값이 문자 범위를 벗어나면 다시 문자열로 복원해주어야 하며, 공백 문자는 밀어주지 말아야 한다.

그렇게 제출한 답은 다음과 같다.

func solution(_ s:String, _ n:Int) -> String {
    var charToAscii: [UInt8] = []
    var asciiToChar = ""
    for char in s {
        if 65 <= char.asciiValue! && char.asciiValue! <= 90 {
            if char.asciiValue! + UInt8(n) > 90 {
                charToAscii.append(char.asciiValue! + UInt8(n) - 26)
            } else {
                charToAscii.append(char.asciiValue! + UInt8(n))
            }
        } else if char == " " {
            charToAscii.append(char.asciiValue!)
        } else{
            if char.asciiValue! + UInt8(n) > 122 {
                charToAscii.append(char.asciiValue! + UInt8(n) - 26)
            } else {
                charToAscii.append(char.asciiValue! + UInt8(n))
            }
        }
    }
    //print(charToAscii)
    for asc in charToAscii {

        asciiToChar.append(String(UnicodeScalar(asc)))
    }
    //print(asciiToChar)
    return asciiToChar
}
profile
🐣 iOS Developer

0개의 댓글