반응형 분류 전체보기109 [Swift] 구조체와 클래스 구조체와 클래스에 관해 기록합니다. 구조체와 클래스 객체지향 프로그래밍(OOP)를 위한 필수 요소로 프로그램의 코드를 추상화하기 위해 사용함 Swift에서는 다른 프로그래밍 언어와 달리, 구조체와 클래스를 위한 별도의 인터페이스와 파일을 만들 필요가 없음 구조체와 클래스의 공통점 여러 변수를 담을 수 있는 컨테이너 데이터를 용도에 맞게 묶어 표현하고자 할 때 용이 프로퍼티와 메서드를 사용하여 구조화된 데이터와 기능을 가짐 하나의 새로운 사용자정의 데이터 타입을 만들어 주는 것 초기화를 정의하여 초기 상태(이니셜라이저) 설정 기능 추가를 위한 확장(extension)이 가능함 특정 기능을 위한 프로토콜(protocol) 사용이 가능함 서브스크립트(subscript) 사용하여 프로퍼티에 접근하도록 정의 가능.. 2021. 5. 6. [Algorithm/BOJ] 2504 - 괄호의 값 Swift 문제풀이: 열린 괄호일 때, 문제의 핵심은 1로 초기화된 temp 변수를 이용하여 "("가 입력되면 2를 곱하고 "["가 입력되면 3을 곱하는 것이다. 또한, 스택에 현재 괄호를 추가해준다. 닫힌 괄호일 때, 스택이 비어있거나 스택의 가장 윗 부분이 해당 닫힌 괄호에 짝이 아니라면 bool 값을 토글하고 반복문을 빠져나옵니다. -> 올바르지 않은 경우 확인 현재 괄호 직전의 괄호( "(" )가 해당 닫힌 괄호( ")" )의 짝일 경우에만 현재 temp의 값을 결과 값에 더해준다. 아래의 그림처럼 그려보면 이해가 된다. temp를 해당 괄호에 따라 2를 나누거나 3을 나눠준다. 스택에 짝이 맞는 괄호를 꺼낸다. 이와 같이, 반복문이 다 돌고 bool값이 초기화한 값과 다르거나 스택이 비어있지 않다면 0을 .. 2021. 5. 1. [Algorithm] LowerBound & UpperBound 다른 사람의 풀이를 확인하다가 몰랐던 새로운 알고리즘 발견했다. Lower Bound는 찾고자 하는 값 이상이 처음 나오는 인덱스를 찾는 것이다. Upper Bound는 찾고자 하는 값보다 큰 (초과) 값이 처음 나오는 인덱스를 찾는 것이다. 두 알고리즘 모두 이분탐색을 활용한다. func lowerBound(arr: [Int], start: Int, end: Int, target: Int) -> Int { var start = start var end = end while start < end { let mid = (start + end) / 2 // target 값보다 작을 때 start를 움직여 target보다 크거나 같은 첫번째 값의 인덱스를 찾는다. if arr[mid] < target { st.. 2021. 4. 29. [Algorithm/BOJ] 5557 - 1학년 (DP) Swift 문제풀이: 완전탐색으로 접근하면 시간초과가 난다. 그러면 DP로 풀어야 하는데 DP는 항상 접근 방법을 찾기가 어려웠다. 이전의 숫자 정보와 덧셈과 뺄셈을 진행할 index를 필요로 해서 2차원 배열로 사용해야 한다. 위 그림과 같이 처음에 dp[0][8]을 시작으로 다음 수인 3을 뺀 결과와 더한 결과가 0보다 크거나 같고 20보다 작거나 같으면 dp에 값을 저장한다. 이후는 같은 과정으로 진행하고 마지막 수에 해당하는 경우의 수를 출력한다. 코드: let n = Int(readLine()!)! var nums = readLine()!.split(separator: " ").map { Int(String($0))! } var dp = [[Int]](repeating: [Int](repeating: 0,.. 2021. 4. 29. [Algorithm/BOJ] 1806 - 부분합 (투 포인터) Swift 투 포인터는 배열을 순차적으로 접근할 때 2개의 포인터를 이용해서 처리하는 알고리즘입니다. 양의 정수로만 이루어진 수열의 부분합 또는 정렬되어 있는 두 배열의 합집합(병합 정렬)에서 사용됩니다 문제풀이: 시작점과 끝점이 0에 둔다. 현재 부분합이 S보다 작고 끝점이 수열 길이인 N보다 작다면, 끝점이 가리키는 수를 더하고 끝점을 증가시킨다. 현재 부분합이 목표 합계인 S보다 크거나 같다면, 길이를 배열에 추가하고 시작점을 증가시킨다. 모든 경우를 확인할 때까지 반복한다. 코드: let ns = readLine()!.split(separator: " ").map { Int(String($0))! } let n = ns[0] let s = ns[1] var nums = readLine()!.split(sep.. 2021. 4. 19. [Algorithm/BOJ] 1074 - Z (분할정복, 재귀) Swift 문제풀이: 2^N X 2^N을 2 X 2 까지 분할해서 타겟 좌표를 찾아야 한다. 하지만 N의 범위는 15까지 이기 때문에 일일히 찾으면 2^15 * 2^15 시간 초과가 발생한다. 그러므로 타겟 좌표에 해당하는 행렬일 때만 탐색하고 아닐 때는 방문한 걸로 치고 넘어가서 시간을 줄여야 한다. 코드: import Foundation func solution(_ powN: Int, _ nr: Int, _ nc: Int) { if nr == r && nc == c { print(result) return } // 원하는 좌표가 포함되는 행렬이 아닐 때 방문한 걸로 치고 넘어가기 (시간 줄이기) if !(nr 1이 라서 www.acmicpc.net 2021. 4. 8. [iOS/Xcode] Provisioning profiles 삭제하기 프로비저닝 프로파일이 꼬일 때가 있어 삭제하고 다시 다운로드할 필요가 있을 때 참고합니다. 터미널에서 아래의 경로로 이동해서 삭제해주시면 됩니다. cd ~/Library/MobileDevice/Provisioning Profiles 참고: stackoverflow.com/questions/45625347/xcode-provisioning-profiles-location 2021. 3. 15. [Algorithm/BOJ] 2589 - 보물섬 (BFS) Swift 문제 풀이: 문제에서 시작점이 주어지지 않기 때문에 직접 기준점을 잡아주어야 한다. 육지(L)를 기준으로 시작점을 잡는다. 그 좌표에서 지도를 벗어나지 않고 상화좌우로 이동할 좌표가 육지라는 선에서 이동거리를 1씩 늘려서 갈 수 있는 모든 좌표에 대한 거리를 나타내는 배열에 저장한다. 그리고 시작점에서 갈 수 있는 최대 거리(거리를 나타내는 배열의 최대 값)랑 이 문제의 답이 되는 변수와 비교하여 큰 것을 변수에 저장한다. 모든 육지(L)의 좌표에 대해서 반복한다. 코드: typealias Coord = (r: Int, c: Int) let input = readLine()!.split(separator: " ").map { Int(String($0))! } let n = input[0] let m = .. 2021. 3. 14. [iOS] FSCalendar Custom Header Swift FSCalendar에서 스와이프를 통해 달을 변경할 수 있지만, 따로 헤더에 버튼 부분이 없기 때문에 방법을 공유하고자 기록하겠습니다. 우선 아래와 같이 스토리보드에서 calendarView 위에 버튼, 라벨, 버튼으로 되어 있는 스택뷰를 추가한다. 그리고 해당 뷰컨트롤러에 아래 코드와 같이 연결해준다. @IBOutlet weak var calendarView: FSCalendar! @IBOutlet weak var headerLabel: UILabel! @IBAction func prevBtnTapped(_ sender: UIButton) { scrollCurrentPage(isPrev: true) } @IBAction func nextBtnTapped(_ sender: UIButton) { scrol.. 2021. 3. 10. [RxSwift] Subject Subject에 대해서 기록해보겠습니다. Subject: Observer와 Observable의 역할을 둘 다 하는 bridge 또는 proxy의 종류이다. Observer의 역할을 하기 때문에 하나 이상의 Observable을 구독(subscribe)할 수 있다. Observable의 역할을 하기 때문에 관찰한 이벤트를 방출(emit)할 수 있고 새 이벤트를 방출할 수 있다. Observable을 구독하기 때문에, Observable이 이벤트를 방출할 수 있도록 트리거의 역할을 한다. -> "Cold" Observable를 "Hot"하게 바꿔주는 효과가 있다. "Cold" Observable: 구독되는 시점부터 이벤트를 생성하여 방출한다. "Hot" Observable: 생성되자마자 이벤트를 방출하고 .. 2021. 2. 24. 이전 1 ··· 4 5 6 7 8 9 10 11 다음 반응형