본문 바로가기
기술 기록/swift

swift) 문자의 아스키코드 추출 (백준 18238)

by Fola 2022. 2. 1.

 

 

 

백준 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

댓글