전체 글 198

백준[1697] 숨바꼭질

기본적인 BFS문제만 풀다가 살짝 응용한 문제를 마주치니 정말 어렵게 느껴졌다.. 주의할 점) -1, +1, *2를 하고 탐색을 할 때 동생의 지점보다 넘어가서 뒤로 되돌아오는 경우가 더 시간이 짧게 걸리는 예제가 존재한다. □ 소스 코드 #include #define MAX 100001 #define MIN 0 bool disList[MAX] = {false}; int seekCnt = 0; int suN, broK; void hidebfs(){ queue disQ; disQ.push(make_pair(suN,0)); int subin = disQ.front().first; int time = disQ.front().second; disList[subin] = true; while(!disQ.empty..

Swift - String의 SubScript 접근

SubScript의 개념을 모른다면 Swift 문법과 친해지기 - Subscript 편을 읽고 오시면 됩니다.! Swift 문법과 친해지기 - Subscript subscript 서브스크립트는 우리가 배열을 사용할 때 배열 속 원소에 접근하기 위해 사용하는 대괄호 []를 지칭한다. □ 배열 서브스크립트 정의 → index를 int타입으로 받고 Element를 반환한다. □ 딕 hj39-develop.tistory.com 우리가 문자열을 사용할 때 각 문자하나를 추출하여 사용하고 싶을 때가 있을 것이다. var num: String = "12345" print(num[0])//오류 특히 백준 알고리즘 문제를 풀 때 Swift를 사용하는 사람은 드물겠지만.. 아무튼 String타입으로 들어온 값을 분리하여 ..

iOS/Swift 상식 2023.01.23

Swift - Optional

Optional은 Swift를 처음 접해본 사람들이 헷갈리는 부분들 중 한 부분을 담당하고 있다. 간단하게 설명하자면 Optional은 변수에 값이 있을 수도 있고 없을 수도 있다. 즉 nil(값이 없음)을 허용할 것인지 허용하지 않을 것인지 결정하는 기능이다. nil은 다른 언어의 NULL과 다르다. nil은 해당 공간에 값이 없는 경우 값 대신 nil을 사용하지만 다른 언어의 NULL은 빈 포인터를 가리킬 때 NULL을 사용한다. Optional을 쉽게 이해하기 위해 예를 들어 생각해 보자 (예시를 설명하는 문장은 기울임 꼴을 적용하였다.) 어떤 변수에 Optional을 붙인다는 것 우리가 호텔을 체크인하는 것과 같다. 체크인을 하면 방을 배정받게 된다. Optional을 사용하면 Wrapping이 ..

iOS/Swift 상식 2023.01.23

Swift - Any vs AnyObject

Any Any를 직역하면 '아무거나'라는 의미이다. 이름에서 알 수 있듯이 모든 타입의 인스턴스들을 허용한다는 뜻이다. AnyObject AnyObject의 정의를 살펴보면 프로토콜이다! 모든 클래스가 암시적으로 준수하는 프로토콜 즉 클래스 타입만 가능하다!라는 의미!! 이해하기 쉽게 Object는 클래스를 통해 생성된다. (작명의 중요성) 따라서 AnyObject는 모든 클래스 타입의 인스턴스들을 나타낼 수 있다. 너무 허무하네..; # 참고한 사이트 https://zeddios.tistory.com/213

iOS/Swift 상식 2023.01.23

Swift - Convenience init

Init의 종류에는 2가지가 존재한다. Designated init convenience init Init은 멤버들을 초기화하고 상속받은 멤버들을 커스텀하기 위해 사용한다. (Designated) Init (Designated) Init은 우리가 클래스를 생성할 때 자주 사용했던 Init이다. 해당 Init은 클래스의 프로퍼티가 모두 초기화되게 만들어준다. class Pet{ var dog: String var cat: String init(dog: String, cat: String){ self.dog = dog self.cat = cat } } Convenience init Convenience init은 Designated init을 보조하여 도와주는 역할이다. 말 그대로 보조이므로 Designat..

iOS/Swift 상식 2023.01.23

Swift - Copy On Write(COW) 동작 방식

Copy on Write를 알아보기 전에 학교에서 C언어를 배울 때 지겹도록(?) 들었던 Call-by-Value Call-by-Reference 위 두 가지를 복습 차원으로 알아보자 Call-by-Value 영어 뜻을 직역으로 해석하자면 값의 호출인데 느낌 상 알 수 있듯이 값을 호출할 때 데이터를 복사하여 호출한다는 것이다. 예를 들어 int a = 1; int b = a; b = 3; printf("%d",a);// 1 printf("%d",b);// 3 다음과 같이 호출한다면 변수 a에 1을 메모리에 저장하고 그 값을 b에 저장하는 경우 같은 공간을 가리키는 것이 아닌 메모리에 새로운 공간을 할당하여 값을 복사하게 된다. 따라서 b의 값을 3으로 변경하게 되면 b의 값은 3으로 변경되지만 a의 값..

iOS/Swift 상식 2023.01.23

UIKit에서 SwiftUI Preview 사용하기

UI를 코드로 작성할 때 매번 시뮬레이터를 실행하기 매번 번거롭다. 그럴 경우 Preview를 사용하여 내가 작성한 코드를 쉽게 볼 수 있다. □ 코드 1 import SwiftUI #if DEBUG extension UIViewController { private struct Preview: UIViewControllerRepresentable { let viewController: UIViewController func makeUIViewController(context: Context) -> UIViewController { return viewController } func updateUIViewController(_ uiViewController: UIViewController, context:..

iOS 2023.01.19

MVVM 패턴 적용

아이디, 비밀번호를 입력했는지 감지하는 기능 사용한 라이브러리: UIKit, SnapKit, RxSwift, RxCocoa (storyboard 사용 X) 설명: 아이디 비밀번호를 입력한 경우 버튼 문구가 '로그인'으로 변경된다. 둘 중 하나라도 입력하지 않은 경우 '정보 부족'을 출력한다. □ View import UIKit import SnapKit import RxSwift class ViewController: UIViewController { /* UI 생성 코드 */ //ID Label lazy var IdLabel: UILabel = { let l1 = UILabel() l1.font = .systemFont(ofSize: 20) l1.text = "아이디" return l1 }() // P..

iOS/MVVM 2023.01.18

RxSwift 사용

RxSwift RxSwift는 데이터가 Stream 방식으로 흘러간다. Observer Observable안에 있는 내부 인스턴스들로 Observable의 값에 변화가 있을 때 Observer에게 알림이 가고, 등록한 Closure 실행 Subject Observable과 Observer의 성격을 모두 가지고 있는 Protocol (이벤트 방출과, Subscribe를 이 타입 하나로 모두 가능) subject 없이 이벤트 처리를 한다면 observer, Observable 두개 타입이 필요 Observable은 1:1로 이벤트를 방출하지만 1:multi로 이벤트를 여러 Observer에게 송신 Observable RxSwift에서 제공하는 "나중에 생기는 데이터" 타입의 이름 Observer 인스턴스를 ..

iOS/RxSwift 2023.01.14