티스토리 뷰
안녕하세요 멍구입니다. 🥰
오늘은 간단하게 swift언어로 알고리즘을 풀때 입력을 받아 배열로 변환처리하는 기초적인 방법들을 정리해보겠습니다. 🤩
공백단위의 문자열 입력을 받아 [Int] 배열로 변환하기
먼저 공백단위의 입력을 받아서 배열로 변환하는 방법입니다.
가령 입력을 받는다면 "1 2 3 4 5" 와 같은 입력 값을 [1, 2, 3, 4, 5] 배열로 변환하는 것입니다. 공백단위의 값을 추출해서 배열로 변환하는 방법은 split() 을 사용하면 매우 간단하게 처리할 수 있습니다.
// input : 1 2 3 4 5
let intArr = readLine()!.split(separator: " ").map { Int($0)! }
print(intArr) // [1, 2, 3, 4, 5]
1) 먼저 입력을 받기 위해 사용하는 readLine() 함수는 String? 값으로 입력값을 주는데, 이를 강제언래핑으로 String 값으로 변환해줍니다.
2) 이후 공백단위로 문자열을 쪼개기 위해서 split(separator:)를 사용할 수 있습니다. separator: 인자값으로는 에는 어떤 문자를 기준으로 쪼갤지를 설정할 수 있는데 현재 상황의 경우 " "가 되겠죠?
3) 그 후 해당 값을 원하는 타입으로 변환하는데 이때 map 연산자를 사용할 수 있습니다. map 연산자의 클로저 내에는 앞서 split으로 공백단위로 쪼개진 Character 타입의 값들이 차례대로 맵핑이 되도록 설정합니다. 가령 Int($0)! 으로 Int형 맵핑을 한다면 위의 경우 Character -> Int 타입으로 변환이 되는 것입니다.
그렇게 공백단위로 쪼개는 split(separator:), map 연산자를 사용해서 intArr 변수에 할당해주면 intArr은 [Int] 타입의 배열이 되며, 그 값은 [1, 2, 3, 4, 5] 가 됩니다.
보통 swift 문법은 안정성을 강조하는 언어지만, 실제 알고리즘 문제를 풀때는 입력값이 정상적으로 있다는걸 보장하는 경우에 !를 사용해서 코드량을 줄이는 것이 실전 간 시간단축에 있어서 현명할 수 있습니다.
공백단위의 문자열 입력을 받아 [String] 배열로 변환하기
만약 공백 단위의 입력값으로부터 [String]배열을 받고 싶다면 앞서 사용한 방법에서 map 연산 간 String 타입으로 맵핑을 해주면 됩니다.
아래의 입력값 또한 "1 2 3 4 5"가 되겠습니다.
// input : 1 2 3 4 5
let stringArr = readLine()!.split { $0 == " " }
print(stringArr) // ["1", "2", "3", "4", "5"]
위의 경우 split 연산의 코드 방식이 살짝 달라졌다고 생각하실 수 있지만, 앞서 소개했던 방식과 동일한 동작을 보입니다. 단지, 위의 코드는 split함수를 후행클로져 방식으로 사용한 것입니다.
이로써 split의 결과값으로 [String] 타입의 배열 값이 만들어지게 됩니다.
이렇게 stringArr 변수에 결과값을 할당하면 stringArr의 타입은 [String]이 되며 그 값은 ["1", "2", "3", "4", "5"]가 됩니다.
붙어있는 readLine() 입력값을 [Int] 배열로 변환하기
앞서 나온 입력 예시는 공백 단위의 입력을 받는 경우였는데요.
만약 붙어있는 입력값이라면 어떻게 해야할까요?
한가지 방법으로, Array() 생성자로 입력값을 전달하는 것입니다. 입력값을 먼저 배열화 해서 처리하는 방법입니다.
이번의 입력값은 공백없이 붙어있는 "12345" 입니다. 이 값을 [1, 2, 3, 4, 5]로 변환해보겠습니다.
// input : 12345
let stringArr2 = Array(readLine()!).map { Int(String($0))! }
print(stringArr2) // [1, 2, 3, 4, 5]
이번에는 readLine()으로 받은 입력값을 강재 언래핑 후, String 타입으로 만들 뒤, Array로 감싸고 있습니다. 이렇게 하면 문자열은 [Character] 타입의 배열로 변환됩니다. 이를 map 을 통해 [String] -> [Character] -> [Int]형으로 변환 작업을 거쳐서 Int타입의 배열을 얻어낼 수 있습니다.
그 결과 stringArr2 에는 [1, 2, 3, 4, 5]의 배열 값을 갖게 됩니다.
여기서 우리는 Array()를 통한 배열화 이후의 [Character] 타입이 [String] 타입이 아님에 주의해야합니다.
다시 해당 값을 map 고차함수를 활용해서 String 타입으로 변환시켜 준 뒤 Int형으로 변환해주어야하는 차이점이 있습니다.
String타입과 달리 Character타입은 Int형으로 바로 동일한 방법으로 바로 변환을 시켜줄 수 없으며 String 변환 때와 동일한 방법을 시도할 시, 컴파일 에러를 보실 수 있습니다.
오늘은 위처럼 다양한 입력 요구에 대한 입력 처리 및 배열 변환방법을 알아봤습니다.
백준알고리즘, 구름 등의 사이트에서는 직접 입력까지 구현해야하는 어려움이 있습니다.
그럴 때 위와 같은 입력값에 따른 문자열 처리 및 배열화 방법에 능숙해진다면, 입력처리에 큰 불편함은 없으실 거라 생각합니다.
많은 의견 환영합니다. ^-^// 즐거운 코딩 되세요 ~ 🤗
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
백준 Swift 알고리즘, 감소하는수 1038 큐 문제풀이 (0) | 2020.06.28 |
---|---|
Swift 알고리즘, 백준 1662 압축 스택 문제풀이 (0) | 2020.06.21 |
백준 용액 2467, 이진탐색 활용 swift 문제풀이 (0) | 2020.05.31 |
프로그래머스 가장 먼 노드, 그래프 BFS swift 문제풀이 (0) | 2020.05.24 |
백준 1963 소수경로, BFS swift 알고리즘 문제 풀이 (0) | 2020.05.23 |
- Total
- Today
- Yesterday
- swift string
- 프로그래머스swift
- uikit
- swift
- swift알고리즘
- 알고리즘
- publisher
- Protocol
- 백준알고리즘
- 부스트코스
- swift reduce
- 김프매매
- Collection
- swift 기초
- swift언어
- 컬렉션
- 자연어처리
- swift 문자열
- ios
- 스위프트
- createML
- 프로토콜
- 개발자문서
- 프로그래머스
- Swift 알고리즘
- swift문제
- 알고리즘문제
- 백준swift
- SwiftUI
- CoreML
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |