-
Swift 값 입력 받기Programming/Data Structure & Algorithm 2021. 1. 21. 03:45
211207 추가내용 : 글 초반에는 ?를 이용하여 Unwrapping하고 있습니다.
이는 !사용에 익숙해지면 실제 프로젝트에서 ?대신 !을 많이 사용하게 되고 이는 좋지 않은 결과를 초래할 수 있으므로 경각심을 가지고 조심스럽게 사용하자 라는 의미에서 작성했습니다.
하지만 TestCase나 CodingTest과 같은 특수한 경우에서는 일부러 crash를 발생시키고 어느 부분에서 문제가 발생하는지 쉽게 알아야하는 이유와 속도의 차이로 ?보다는 !를 사용하시는게 좋습니다.
안녕하세요 BeePeach입니다 :)
다른 언어를 하다가 swift를 하면 만나게 되는 문제!
바로 콘솔에 값을 입력하는 문제입니다.
알고리즘 문제를 풀려고 하는데 값을 입력받아서 하는 게 대부분이죠??
그런데 어떻게 입력을 받지 난감했습니다..ㅠㅠ project에서 textField로 입력받아도 되지만 매번 하기에는 너무 귀찮잖아요??
오늘은 그래서 준비했습니다.
실제 프로젝트를 할 때는 전혀 쓸모가 없고 알고리즘 문제를 풀 때만 사용하게 될 거예요...
그럼 먼저 Xcode를 실행해 줍니다.
macOS -> Command Line Tool로 생성 그리고 Playground가 아닌 Project를 생성하고 macOS -> Command Line Tool을 선택해 주세요.
프로젝트 이름 평소 project를 생성하는 것처럼 파일 이름을 정하고 저장장소를 선택하면 완성입니다.
main.swift 생성하셨다면 main.swift로 와주세요.
어디서 많이 보던 화면이네요?? playground와 비슷하게 생겼습니다.
그럼 이제 값을 입력받아 볼까요???
readLine!! 가장 핵심이 되는 readLine 함수입니다.
주의할 점은 String?을 리턴해주네요. 그럼 여기까지 하고 입력받은 값을 출력해보도록 해요!
Optional String!!!! 실행하고 화면 아래에 있는 콘솔에 원하는 값을 입력하면 출력이 됩니다. 그런데..... 그런데.....
optional이어서 Optional("BeePeach")로 출력이 되네요...ㅠㅠ
그리고 return(enter) 키를 입력하면 그대로 입력이 종료됩니다.
난 여러 개의 숫자를 한 번에 입력하고 싶은데 그럼 어떡해?? 할 수도 있죠??
Spacebar로 구분하자 그럼 이렇게 spacebar로 구별해줘야 합니다... 하지만 문제는 이건 "1 3 5 7 9" String Literal입니다. 여러 값이 아니죠.
이럴 때 해결할 수 있는 방법은??
components(separatedBy:) 메서드 사용!! 바로 String의 메서드 중 하나인 components(separatedBy:)를 사용해야 합니다.
그럼 이제 input은 [String]? 옵셔널 배열이 됐습니다... 매우 귀찮아졌네요
자 우리는 숫자를 원한 거였잖아요?? 그럼 어떻게 해야 할까요?
문자열 배열에 각 요소에 접근해서 Int로 type conversion을 해주면 되겠죠??
두 개의 숫자를 받는다고 해보겠습니다.
두 값을 입력받아 덧셈을 출력 input이 optional이었고 배열에 안전하게 접근하기 위해 first와 last를 사용했습니다. 그럼 optional binding으로 unwrapping 해야겠죠??
그다음 그 값을 Int로 type conversion 했습니다.
숫자 2개 입력받기 정말 귀찮죠...?
물론 더 간단하게 줄일 수 있습니다.
!은 되도록 사용하지 맙시다... 바로 !를 사용하면 되는데요. 보기에 간단해졌죠??
하지만 강제 추출에 익숙해지면 안됩니다!
지금은 특이한 경우이니 사용하고 실제 프로젝트에서는 !보다 ?을 이용하는게 좋습니다 :)
210717 추가내용: 알고리즘 문제를 풀다보면 입력받는 부분에서 시간 초과가 발생할 때가 있습니다.
물론 다른 부분에서 문제일 수 있는데 ?을 사용해서 발생하는 문제일 수 있습니다. 그럴 땐 !을 사용하는 방법을 고려해 보는 것도 좋습니다.
이 부분은 문제를 풀기 위한 접근이니 !을 사용해도 괜찮지만 실제 프로젝트에서는 ?을 사용하시는 게 좋습니다.
난 한 번에 여러 값 말고 여러 줄에 여러 값을 입력하고 싶어 한다면 간단하게 readLine을 여러 번 호출해 주면 됩니다.
두 줄에 걸쳐 입력 받는 방법 배열로 받을 필요가 없으니 더 쉽죠?? 하지만 알고리즘 문제는 호락호락하지 않습니다.
한 번에 입력해 달라고 하는 경우도 많기 때문에 두 방법 다 알아주셔야 합니다.
그리고 이번에 optional binding을 할땐 ??(Nil coalescing oprator)를 사용해서 해봤습니다.
다른 언어에 비해서 값을 입력받는 방법이 귀찮지만 그래도 알고리즘 문제는 풀어야 하니까 어쩔 수 없네요.
혹시 다른 더 좋은 방법이 있다면 댓글로 알려주세요!
그럼 모두 알고리즘 공부 화이팅입니다 :)
728x90'Programming > Data Structure & Algorithm' 카테고리의 다른 글
DataStructure - Linked List (0) 2021.11.06 DataStructure - Stack(스택) (0) 2021.10.14 DataStructure - Queue - 큐 (0) 2021.10.13 DataStructure - Array(배열) (0) 2021.10.07 DataStructure - Data Structure 자료구조란?? (0) 2021.10.07