알고리즘 풀 때 유용한 Swift 문법 정리
문제를 무작정 많이 푸는 것도 하나의 방법이겠지만 알고있으면 더 효율적이게 짤 수 있어요. 😀
해당 포스트의 예시가 문법적으로 오류가 있다면 댓글 달아주시면 감사하겠습니다!
입력 ⌨️
대부분의 사이트는 자체 값을 대입해서 돌립니다.
하지만 내가 직접 입력예시의 값을 주어서 테스트 하고 싶을 때 쓰면 좋습니다. 😀
유의할 점은 readline은 playground에서 동작하지 않습니다!! command line tool을 이용하세요!
import Foundation
//readline의 리턴형은 String이므로 Int등은 형변환을 해줘야합니다!!
let myName = readLine()! //정수 한개 입력
var number = Int(readLine()!)! //Int로 바로 읽어오기
//공백 단위로 입력받기
let nums = readLine()!.split(seperator:" ")
let nums = readLine()!.components(seperatedBy:" ") //Substring이 아닌 String으로 처리
//정수 여러 개 입력받기 ( String -> Int 형변환 )
let nums : [Int] = readLine()!.split(seperator:" ").map { Int(String($0))! }
components는 foundation의 instance method이므로
이를 사용하려면 import Foundation 해주어야 합니다!!
배열 🛍
import Foundation
//반복
var arr = Array(1...5) // [1,2,3,4,5]
var arr = Array(repeating: 1, count: 5) // [1,1,1,1,1]
//정렬
var arr = [1,3,2,4]
arr.sort() // 오름차순 [1,2,3,4]
arr.sort(by: >) // 내림차순 [4,3,2,1]
arr.reverse() // 순서반전 [4,2,3,1]
//최대, 최소
var min = arr.min()! //최소 1
var max = arr.max()! //최대 4
위 친구들은 꽤 자주쓰이니 메모해두면 좋습니다. 😀
Sort는 원본을 변경하여 정렬하지만, Sorted는 원본 변경이 없게 배열을 정렬합니다.
import Foundation
var arr = [1,2,3,4,5]
arr.append(6) // [1,2,3,4,5,6]
arr[0] // [1]
arr.firstIndex(of : 1) // 0
arr.remove(at : 2) // [1,2,4,5,6]
arr.removeLast() // [1,2,4,5]
arr.removeFirst() // [2,4,5]
arr.insert(3, at : 2) // [2,3,4,5]
arr.contains(1) // false
arr.first! // 첫 원소 리턴 2
arr.last! // 마지막 원소 리턴 5
arr.popLast()! // 마지막 원소를 지우고 리턴 [2,3,4]
arr.removeAll() //모든 원소 지우기
arr.removeAll(where : { $0 % 2 == 0 }) //조건을 만족하는 모든 원소 지우기
아직 많이 경험해보진 않아서 이렇다 말은 못해도
firstIndex, remove, insert 부분은 알아두는게 좋은 것 같습니다.
맵 🗺
시작하기 전에 맵,필터,리듀스는 고차함수입니다.
작성할 세 개 말고도 여러 고차함수가 존재하며, 모두 알고있으면 좋습니다. 😀
그럼 맵에 대해 알아봅시다.
" 기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환합니다. "
아까 전에 readLine()에도 봤던 map의 개념입니다 😀
막상 저 한 문장으로 보니까 긴가민가하네요 😅
import Foundation
var array = ["1", "2", "3", "4", "5"]
array.map { Int($0)! } // 각 원소를 전부 Int형으로 맵핑
print(array) // [1,2,3,4,5]
필터 🧺
"기존 컨테이너의 요소에 대해 조건에 만족하는 값에 대해서 새로운 컨테이너로 반환합니다."
filter의 개념인데요. 그냥 요약하자면 말그대로 필터링이에요!
조건에 만족하는 데이터를 추출하는겁니다. 😀
import Foundation
let number = [1,2,3,4,5,6,7,8,9]
let filNumber = number.filter { $0 % 2 == 0 }
print(number) // [2,4,6,8]
🚨 여기서 잠깐! $0 은 뭐를 뜻하는 걸까?
Swift는 인라인 클로저에서 인수이름을 간단하게 사용하는 방법을 제공합니다.
순서에 따라 $0, $1, $2 등과 같이 단순화 시킬 수 있습니다.
여기서는 number이 $0으로 단순화 된 것이겠네요 😀
리듀스 ➕
" 정의한 클로저를 사용하여 기존 컨테이너의 요소를 결합한 결과를 반환하는 고차함수 "
reduce는 연산문제를 할 때 유용하게 쓰이는 고차함수 입니다 😀
import Foundation
let array = [1,2,3,4,5]
let results = array.reduce(1, *) // 숫자의 곱
//let results = array.reduce(1) { $0 * $1 } 도 가능!
print(results) // 120
수학(Math) 함수 🧮
import Foundation
let number = 9.0
//거듭제곱
pow(number, 2) // 81.0
//제곱근
sqrt(number) // 3.0
기타 ☕️
import Foundation
if qwertz.isEmpty { //qwertz가 비어있으면..
print("Nothing to see here")
}
print("Not empty here.")
추가중... 🐌
참고자료 📑
https://icksw.tistory.com/9
https://chanhhh.tistory.com/70
https://velog.io/@un1945/Swift-고차함수-Higher-order-Function
Author And Source
이 문제에 관하여(알고리즘 풀 때 유용한 Swift 문법 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@high_sky8320/알고리즘-풀-때-유용한-Swift-문법-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)