기술 기록/swift
swift) 문자의 아스키코드 추출 (백준 18238)
Fola
2022. 2. 1. 14:37
백준 18238 ( https://www.acmicpc.net/problem/9440 )
문제를 풀며 기록 할 만한 코드가 있어 정리
1. 문자열의 각 문자를 배열에 담기
.map 을 이용
let str: String = "ABCDE"
let chaArr: [Character] = str.map { $0 }
// String을 Character 타입 배열로 받는다
let strArr: [String] = str.map { String($0) }
//String을 String 타입 배열로 받는다
2. 문자의 아스키 코드 추출
.asciiValue 를 이용
let cha: Character = "A"
// "A"의 아스키코드 값은 65
print(cha.asciiValue)
// Optional(65) 출력
print(cha.asciiValue!)
// 65 출력
print(type(of: cha.asciiValue!))
// UInt8 출력
Character가 아스키코드 값을 가지고 있지 않을 가능성이 있으므로 옵셔널 래핑 된 상태로 리턴된다.
!를 이용하여 강제 언랩핑을 할 경우 65라는 숫자를 얻을 수 있으나 이는 Int 타입이 아닌 UInt8 타입이다
문제풀이용으로 이용하기 위해선 UInt8 타입을 Int 타입을 변환하는게 편하다
let StringValueOfCha: String = cha.asciiValue!.description
// "65"
let intValueOfCha: Int = Int(StringValueOfCha)!
// 65
.description 을 이용하여 문자열로 변환 후 (Optional("65") 반환)
!를 이용하여 강제 언래핑
Int( ) 로 타입 캐스팅
이를 한줄로 줄이면 다음과 같다
let intValueOfCha2: Int = Int(cha.asciiValue!.description)!
!를 이용한 강제 언래핑은 권장되지 않으나 알고리즘 문제 풀이용이므로 편의상 사용했다. 프로그램 작성 시에는 if let 또는 guard let 바인딩을 이용한다.
마지막으로 백준 18238 의 전체 swift 코드를 아래에 첨부한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | // q18238 import Foundation //1) let str: String = readLine()! //2) let chaArr: [Character] = str.map{ $0 } //3) func getIntegerFromChar(c: Character) -> Int { let asciiValueOfChar = c.asciiValue return Int((asciiValueOfChar! - 65).description)! } //4-1) var position: Int = 0 func getDistance(position: Int , charValue: Int) -> Int { let result1 = abs(charValue - position) let result2 = 26 - abs(charValue - position) return min(result1, result2) } //5 var sum: Int = 0 for i in chaArr { sum += getDistance(position: position, charValue: getIntegerFromChar(c: i)) position = getIntegerFromChar(c: i) } print(sum) // // 1) 문자열을 받음 // 2) 받은 문자열을 쪼개서 배열에 넣는다 // 3) 문자를 숫자로 치환하는 함수를 만든다 // 4-1) 현재 위치에서 목표 좌표까지 거리를 구하는 함수 // 4-1.1) 시작 위치 0 // 4-1.2) 왼쪽이 빠른지 오른쪽이 빠른지 // A->Z) 오른쪽: 25클릭 // 왼쪽 : 1클릭 // // 5) 숫자를 더한다. | cs |