알고리즘 풀 때 유용한 Swift 문법 정리

영점·2022년 3월 30일
0

알고리즘

목록 보기
1/1

문제를 무작정 많이 푸는 것도 하나의 방법이겠지만 알고있으면 더 효율적이게 짤 수 있어요. 😀
해당 포스트의 예시가 문법적으로 오류가 있다면 댓글 달아주시면 감사하겠습니다!

입력 ⌨️

대부분의 사이트는 자체 값을 대입해서 돌립니다.
하지만 내가 직접 입력예시의 값을 주어서 테스트 하고 싶을 때 쓰면 좋습니다. 😀
유의할 점은 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

컴포넌트 🎞

Components 는 separateBy 값에 들어간 문자나 공백 기준으로 쪼갭니다.
split이랑 다르게 문자를 작성할 수 있습니다 😀

import Foundation

let s = "Have a nice Day!"
s.components(separatedBy: "a") //["H", "ve ", " nice D", "y!"]
s.components(separatedBy: "a").count //4

수학(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.")
import Foundation

let s = "Watèr is the Best"
print(s.lowercased()) //watèr is the best
print(s.uppercased()) //WATÈR IS THE BEST

추가중... 🐌

참고자료 📑

https://icksw.tistory.com/9
https://chanhhh.tistory.com/70
https://velog.io/@un1945/Swift-고차함수-Higher-order-Function
https://velog.io/@folw159/Swift-components와-split의-차이

profile
일단 배운내용은 적어두기

0개의 댓글