1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859let inputCount = Int(readLine()!)!var inputs = [Int]()for _ in 1 ... inputCount{ inputs.append(Int(readLine()!)!)}//선택정렬func selectionSort(array: inout [Int]){ for i in stride(from: array.count - 1, through: 1, by: -1){ var maxIndex = i for j in 0 ..
[시작] - 모나드 : 특정한 상태로 값을 포장하는 것 : Swift에서는 이를 옵셔널이라는 형태로 구현 : 값이 있을지 없을지 모르는 상태 속에 포장- 함수객체와 모나드는 디자인 패턴 혹은 자료구조라고 할 수 있음 [컨텍스트] - 컨텍스트 : 콘텐츠를 담은 무언가 : 옵셔널은 some과 none이라는 두 가지의 컨텍스트를 가짐 [함수객체] - 맵을 적용할 수 있는 컨테이너 타입 - 맵은 컨테이너(컨텍스트)의 값을 변형하는 고차함수- 옵셔널에 맵을 적용했을 때 : 값이 있는 경우 : 컨텍스트로부터 값 추출 -> 전달받은 함수 적용 -> 결과값을 컨텍스트에 담아 반환 : 값이 없는 경우 : 컨텍스트로부터 값 추출 -> 값 없음 -> 아무것도 하지 않음 [모나드] - 값이 있을 수도 있고 없을 수도 있는 컨..
[시작] - 고차함수 : 매개변수로 함수를 갖는 함수 - Swift의 유용한 대표적인 고차함수 map, filter, reduce [맵 map] - 자신을 호출할 때 매개변수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수 - 배열, 딕셔너리, 세트, 옵셔널 등에서 사용 가능 : Sequence, Collection 프로토콜을 준수하는 타입과 옵셔널- 기존 컨테이너의 값은 변경되지 않고 새로운 컨테이너가 생성되어 반환됨- 기존 데이터를 변형하는 데 많이 사용함1234let array: [Int] = [1,2,3,4,5,6]let mappedArray = array.map { $0 * 2 }print(mappedArray) //2, 4, 6, 8, 10, 12 Colored by Color Scr..
[옵셔널 체이닝] - 옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메서드 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정 - 옵셔널을 반복 사용하여 옵셔널이 서로 꼬리를 물고 있는 모양이므로 옵셔널 체이닝이라고 부름- 중첩된 옵셔널 중 하나라도 값이 존재하지 않으면 nil을 반환 - 옵셔널 변수나 상수 뒤에 물음표를 붙여 표현- 결과적으로 nil이 반환될 가능성이 있으므로 옵셔널 체이닝의 결과는 항상 옵셔널임 - 옵셔널 바인딩으로 값을 가져오는 것보다 코드의 양이 훨씬 줄어드는 효과를 가져옴- 옵셔널 체이닝의 결과도 옵셔널이므로 이를 옵셔널 바인딩하여 사용 가능 - 옵셔널의 서브스크립트를 사용하고자 할 때는 대괄호보다 앞에 물음표를 표기해주어야 함 : 배열, 딕셔너리에서 값을 가져올 때 해당..
[시작] - Swift에서 함수형 프로그래밍 패러다임을 이해하기 위해 반드시 알아야 하는 것 - 클로저, 제네릭, 프로토콜, 모나드 등이 결합하여 Swift는 더욱 강력한 언어가 되었음 - 클로저 : 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것 : 함수는 클로저의 한 형태- 클로저는 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있음- 클로저의 세 가지 형태 : 이름이 있고, 어떠한 값도 획득하지 않는 전역함수의 형태 : 이름이 있고, 다른 함수 내부의 값을 획득할 수 있는 중첩함수의 형태 : 이름이 없고, 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성된 형태- 클로저의 다양한 표현 : 매개변수와 반환값의 타입을 문맥을 통해 유추할 수 있으므로 생략 가능 : 단 한 줄의 ..