@escaping 키워드 클로저 앞에 작성하며, 매개변수에 사용된다. 필요한 이유? non-escaping의 경우, 함수가 종료되면, 파라미터로 쓰이는 클로저가 제거된다. escaping 키워드를 사용하면, stack frame에서 파라미터가 삭제 되지 않는다. 클로저가 함수의 실해 흐름을 벗어날 수 있도록 하는 것이다. 즉, 함수가 종료되어도 클로저가 존재할 수 있도록 한다. 언제 사용할까? 함수 내부에 존재하는 클로저(함수)를 외부 변수에 저장할 때 GCD 비동기 코드 @escaping 키워드를 사용하는 경우 어떤 함수의 내부에 존재하는 클로저(함수)를 외부 변수에 저장할 때 기존 non-escaping이라면, 단순 실행 후 종료한다면, Heap에 저장할 필요가 없다. escapin의 경우, 함수의 ..
클로저의 메모리 구조 클로저는 참조형식이다. (Reference Type) 필요 시 메모리의 주소를 전달한다. 값은 Heap 영역에, 주소는 Stack 영역에 저장한다. ⇒ 코드 영역의 메모리 주소를 Heap에 저장하며, 실행은 Stack 프레임에서 실행된다. RC를 통해 메모리를 관리한다. (Swift - ARC) 클로저의 캡처 var stored = 0 let closure = { (number: Int) -> Int in stored += number return stored } closure(3) // 3 closure(4) // 7 closure(5) // 5 stored = 0 closure(5) // 5 closure 내부에서 stored라는 외부 변수를 사용한다. 외부 변수를 계속해서 사용..
문제 어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다. 단, 두 번째 연산은 N이 K로 나누어떨어질 때만 선택할 수 있다. 예를 들어 N이 17, K가 4라고 가정하자. 이때 1번의 과정을 한 번 수행하면 N은 16이 된다. 이후에 2번의 고정을 두 번 수행하면 N은 1이 된다. 결과적으로 이 경우 전체 과정을 실행한 횟수는 3이 된다. 이는 N을 1로 만드는 최소 횟수이다. N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성하시오 코드 (반복문 사용) 더보기 // 반복문 사용 import Foundation let input = readLine()!.split(separator: " ").m..
문제 숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 하고, 룰은 다음과 같다. 숫자가 쓰인 카드들이 N * M 형태로 놓여있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 그 다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다. 예를 들어 3 * 3 형태로 카드르이 다음과 같이 놓여 있다고 가정하자. 3 1 2 4 1 4 2 2 2 여기..
문제 ‘큰 수의 법칙’은 일반적으로 통계 분야에서 다루어지는 내용이지만 동빈이는 본인만의 방식으로 다르게 사용하고 있다. 동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6+6+6+5+6+6+6+5인 46이 된다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다. 예를 들어 순..
문제 당신은 음식점의 계산을 도와주는 점원이다. 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한히 존재한다고 가정한다. 손님에게 거슬러 줘야 할 돈이 N원일 때, 거슬러줘야 할 동전의 최소 개수를 구해라. 단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다. 풀이 탐욕적인 아이디어: 가장 큰 화폐 단위부터 돈을 거슬러준다. 코드 import Foundation var n = Int(readLine()!)! var result = 0 let coinTypes = [500, 100, 50, 10] for coin in coinTypes { result += (n / coin) n %= coin } print(result) 분석 시간 복잡도 O(K) 시간 복잡도는 동전의 총..
그리디(탐욕법)가 무엇인가? 어떤 문제가 있을 때, 단순 무식하게 문제를 푸는 알고리즘 지금 당장 좋은 것만 고르는 방법이다. 현재 선택이 나중에 미칠 영향은 고려하지 않는다. 언제 적용하면 되는가? 문제의 유형이 매우 다양해서 많이 풀어보며 감을 익히자. 우선 문제를 많이 풀어서 감을 익히자! 사전 지식 없이도 풀 수 있는 경우가 존재하지만, 아이디어 떠올리려면 연습이 필요! 문제를 읽었는데 어떤 유형인지 감이 안 잡히면 Greedy -> DP / Graph 순서로 의심해보자 Greedy로 풀기 위해서는 탐욕적인 방법을 떠올리고, 정당한지 검토할 수 있어야한다! 연습문제 1. 거스름 돈 2. 큰 수의 법칙 (해설 있음) 3. 숫자카드게임 4. 1이 될 때까지 (해설 있음) 이것이 코딩테스트다를 읽고 작..
문법 최적화 원칙 문맥 상에서 파라미터와 리턴 값의 타입이 추론된다면 생략할 수 있다. 싱글 익스프레션의 경우 (코드가 한 줄) 리턴 키워드는 생략할 수 있다. (Implic return) 아규먼트 이름의 축약(Shorthand Arguments) → $0, $1로 표현 트레일링 클로저 문법 함수의 마지막 전달 인자(아규먼트)로 클로저를 전달할 때, 소괄호를 생략할 수 있다. 트레일링 클로저, 후행 클로저 문법 클로저가 실행될 때 적용할 수 있는 문법 함수의 마지막 전달인자로 클로저가 전달되면, 소괄호를 생략할 수 있다. 소괄호를 중괄호 앞으로 가져온다. argument 생략 가능 소괄호 생략 가능 예제 1 closure의 정의 및 사용 func closureParamFunction(closure: ()..
왜 이름이 없는 함수, 클로저를 왜 사용할까? 함수를 전달하는 형태로 사용하기 때문에 이름이 필요 없다. 전달하는 형태란? 파라미터(input)으로 사용되는 것이다. 함수를 실행할 때 클로저 형태로 전달할 때, 파라미터에서 클로저를 정의한다. 파라미터로 전달하는 함수를 콜백함수라고 부른다. 사후적으로 정의하기 위해 사용한다. 내장함수의 매개변수를 클로저 형태로 정의하면, 개발자가 이를 커스텀할 수 있기 떄문이다. 파라미터로 전달되는 클로저는 기존 함수 내용이 모두 실행된 후 실행된다고 봐도 무관하다. 활용도가 늘어난다. // 1) (클로저를 파라미터로 받는 함수)정의 func closureCaseFunction(a: Int, b: Int, closure: (Int) -> Void) { let c = a ..
클로저 이름이 없는 익명 함수 이름이 없는 코드의 묶음이다. 이름 없이 호출할 수 있는 형태로 사용된다. 클로저와 함수는 기능은 완전히 동일하지만, 형태가 다르다. 클로저가 함수보다 더 큰 범위이다. Python의 lambda와 동일하다. 함수와 클로저의 비교 // 함수의 타입 표기법 let functionA: (String) -> String // 1)파라미터 문자열, 2)리턴형 문자열 let functionB: (Int) -> () // 1)파라미터 정수, 2)리턴형 없음 let functionC: (String) -> Void // 1)파라미터 문자열, 2)리턴형 없음 // 함수로 표현 func aFunction(str: String) -> String { return "Hello, \\(str)"..
- Total
- Today
- Yesterday
- 레플릿
- CHR
- baekjoon
- SwiftUI
- 파이썬
- 기초 100제
- Swift
- 코드 업
- 백준
- replit
- python
- 정답
- COMMIT
- 설명
- 부르트포스
- level1
- CodeUp
- 시간초과
- 코드업
- 이것이 코딩테스트다
- 깃
- Code up
- 프로그래머스
- 리플릿
- 깃허브
- do while
- ord
- for문
- 반복문
- 16진수 입력
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |