요즘 전 코딩테스트를 준비하면서, 백준 문제를 Swift로 풀고 있습니다. (백준 1157번 - 아스키값이 필요한 문제)
근데 종종 아스키값이 필요할 때가 있습니다.
기억을 하려고 하는데, 매번 쉽게 잊기도 하고 헷갈리기도 해서,
이번 기회에 깔끔하게 정리해두려고 글을 작성합니다.
다양한 방법이 있는데, .asciiValue(), UnicodeScalar()등 섞어서 풀이를 하다보니 헷갈렸습니다.
그래서 전 문제를 풀 때 UnicodeScalar() 하나로 통일하기로 선택했습니다.
( 어차피 1) [Character → 아스키 값]에선 .asciiValue()를 쓰더라도
결국 2) [아스키 값 → Character] 에선 UnicodeScalar()를 써야 하기 때문에,
1) 상황에서도 UnicodeScalara()를 쓰는게 헷갈리지 않더라고요. )
1) [Character(String) → 아스키 값]
⇨ Int(UnicodeScalar(ch)!.value)를 쓰면 됩니다.
반환값이 UInt32이기 때문에, (코딩테스트를 풀 땐 Int로 쓸 일이 많겠죠?)
아래 예시 코드처럼 Int()로 캐스팅 해주면 됩니다.
아래는 백준 1157번 풀이 코드의 일부 입니다.
//var alphabet = Array(repeating: 0, count: 26) // 알파벳 개수 카운팅
//let input = readLine()!.uppercased().map{String($0)}
//for ch in input {
let index: Int = Int(UnicodeScalar(ch)!.value) - Int(UnicodeScalar("A").value)
// alphabet[index] += 1
//}
2) [아스키 값 → Character(String)]
⇨ String(UnicodeScalar(65)!) 를 쓰면 됩니다. (예시 아스키 값 : A(65))
UnicodeScalar()는 옵셔널을 반환하기 때문에, 강제 언래핑 !를 썼습니다.
아스키값을 괄호 안에 넣어주면 됩니다.
아래는 백준 1157번 풀이 코드의 일부 입니다.
var maxIndex: Int = 0
// ~~생략~~
let answer = String(UnicodeScalar(65 + maxIndex)!) // 대문자
print(answer)
지금까지 코테 문제를 풀면서 유용한 Swift 아스키코드 값 변환에 대해서 정리했습니다.
다른 문제들을 풀면서, 유용한 자료들은 이 카테고리에 계속 업데이트 할 예정입니다.
참고한 자료 : https://0urtrees.tistory.com/223 | https://stackoverflow.com/questions/24354549/how-to-get-string-from-ascii-code-in-swift | https://zeddios.tistory.com/340
코드 중 이해가 안 되는 부분이 있거나, 잘못된 부분이 있다면 편하게 댓글 부탁드립니다.
최근댓글