본문 바로가기

전체 글188

[Swift 알고리즘] 백준 17143 낚시왕 https://www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 해결 방법 1. (row, col)에 상어를 저장 2. 상어라는 데이터 집합체에 (row, col, position, size, speed)를 저장 3. 만약 speed * direction 이 최대로 갈 수 있는 row 혹은 col을 넘겼을 때(n)의 로직 핵심 로직인 상어를 어떻게 움직일지 고민했습니다. 만약 (curRow, curCol) * speed * direction.. 2024. 3. 22.
[Swift] 백준 17484_진우의 달 여행 (Small) 풀이 방법 1. 우주선이 어느 방향으로 나아갈 수 있는지(can move) 2. 우주선이 과거에서 어느 방향에서 왔는지 (prev move) "우주선은 전에 움직인 방향으로 움직일 수 없다. 즉, 같은 방향으로 두번 연속으로 움직일 수 없다." 문장은 문제의 핵심 이었습니다. 그러면 어떻게? 이전 방향의 움직임을 체크할 수 있을까에 대해서 고민했습니다. 사고 과정은 다음과 같습니다. 먼저 우주선이 갈 수 있는 항로가 있습니다. 그항로는 아마 숫자들로 채워져 있을 것 입니다. 시간이 지남에 따라 우주선은 이동할 것이고 우리는 우주선의 이동경로를 체크해야 합니다. 다음과 같이 우주선의 이동경로를 저장했습니다. 우주선의 이동 경로는 A(북서쪽) B(북쪽) C(북동쪽)가 있습니다. 우주선이 북동쪽으로 이동하면 .. 2024. 3. 12.
[MealGok] 어플리케이션의 종료 시나리오 작성 어플리케이션의 종료 시나리오 작성 다양한 종료 환경밀꼭앱은 다양한 종료 환경이 존재했습니다. 어떻게 종료할지에 대해서 분기를 나누고 분기에 관한 로직을 처리해야 했습니다. 종료 환경에 관해서 고민할 때 크게 셋으로 나눴습니다. 그리고 이 나눠진 분기를 통해서 각각 다른 로직이 실행되게 만들었습니다.- 앱이 포그라운드에서 작동할 경우- 앱이 백그라운드에서 작동할 경우- 앱이 kill 된 경우앱이 포그라운드에서 작동할 경우앱이 포그라운드에서 작동할 경우, 시스템 메모리에서 밀꼭 앱이 제거되지 않았기 때문에 특별한 분기처리가 없었습니다.앱이 백그라운드에서 작동할 경우notification을 통한 기록 저장 remind앱이 백그라운드에서 작동할 경우, 기본적으로 notification이 사용자에게 전달됩니다. .. 2024. 3. 7.
[ComputerScience] UDP 통신 방법 및 특징 UDP는 어떻게 작동할까요? 모든 네트워킹 프로토콜과 마찬가지로 UDP는 네트워크의 두 컴퓨터 간에 데이터를 전송하기 위한 표준화된 방법입니다. 다른 프로토콜과 비교하여 UDP는 먼저 연결을 설정하거나, 해당 패킷의 순서를 표시하거나, 의도한 대로 도착했는지 여부를 확인하지 않고 패킷(데이터 전송 단위)을 대상 컴퓨터로 직접 보내는 간단한 방식으로 이 프로세스를 수행합니다. (UDP 패킷을 '데이터그램'이라고 합니다.) UDP 특징 전송되는 데이터와 시기를 애플리케이션 수준에서 보다 세밀하게 제어할 수 있습니다.( Finer application-level control over what data is sent, and when.) UDP에서는 애플리케이션 프로세스가 데이터를 UDP로 전달하는 즉시 UD.. 2024. 2. 26.
[iOS] Weak Dictionary 다이브 Weak Dictionary? Does iOS have Garbage Collection? 개요 WeakDictionary를 어떻게 만들까요에 대한 궁금중에서 출발합니다. Dictionary에 대한 기초 보통 우리가 Dictionary를 만들 때 다음과 같이 작성합니다. 많이 사용해보신 분들은 아시겠지만 Dictionary의 Key값이 되기 위한 조건은 Hashable 이라는 protocol을 만족해야 합니다. Hashable이라는 Protocol은 ==의 Operator와 hash(into:)의 매서드를 구현을 통해 완성합니다. 자세한 설명은 Hashable 문서를 참조하시면 좋을 것 같습니다. Collection Type 우리는 Dictionary를 보기 전 스위프트의 Collection Types에.. 2024. 2. 16.
[UIKit] UICalendarview 공식문서 해쳐보기 Today I Learned UICalendarView UICalendarview 란 무엇일까? 날짜별 장식이 있는 일정관리를 표시하고, 단일 날짜 또는 여러 날짜를 사용자가 선택할 수 있도록 제공하는 보기입니다. A view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates. Overview 일정관리 보기를 사용하여 사용자가 사용자 정의한 장식을 사용하여 추가 정보(예: 예약된 이벤트)가 있는 특정 날짜를 표시할 수 있습니다. 또한 일정관리 보기를 사용하여 하나의 특정 날짜, 여러 날짜 또는 날짜가 없는 날짜를 선택할 수 있습니다. .. 2024. 2. 5.
[UIKit] 단방향 의존관계에서 상위 Coordinator에게 메시지를 전달하는 방법 단방향 의존관계에서 상위 Coordinator에게 메시지를 전달하는 방법 단방향 코디네이터에서 가장 상위뷰 코디네이터에게 메시지를 전달하고 싶습니다. 어떻게 해결해야 할까요? 이부분에 대해서 많은 고민을 했습니다. NotificationCenter Coordinator에게 NotificationCenter를 통해서 메시지를 전달하는 방법이 있었습니다. Notification을 호출하여 가장 상위뷰에서 Coordinator Reset작업을 실행하는 방법을 고안했습니다. Delegate NotificatonCenter를 활용하지 않는 방식인 Delegate를 활용할 수도 있습니다. 상위 RootCoordinator에서 Shared 모듈에 Delegate를 구현함으로서 여태 생성했던 child Router를 .. 2024. 2. 2.
[UIKit] Coordinator with Flow에 관하여 Coordinator 트러블 슈팅 개요 뷰 게층은 위에서 아래로 떨어집니다. 이것이 subViews를 통해서 일수도 있고, NavigationController를 통해서 Push 혹은 ViewController의 Present방식을 통해서 Depth가 깊어집니다. 우리는 때때로 순차적으로 ViewController를 해제하여 Depth를 줄이는 것이 아닌 바로 줄이고 싶은 경우가 있습니다. 이럴 때 어떤 방식을 활용하는것이 좋을까에 대해서 고민해본점을 설명하려 합니다. Coordinator를 구현할 때 Flow라는 변수를 구현 코디네이터 하나가 꼭 하나의 뷰컨트롤러만 만들어야 할까 부터 시작합니다. 어떤 경우는 순서가 보장되었을 때도 있습니다. 예를 들어서 글쓰기와 사람을 태그하는 화면은 순차적으로 무조.. 2024. 2. 2.
[서평] 객체지향의 사실과 오해 리뷰 객체지향의 사실과 오해 : 역할, 책임, 협력 관점에서 본 객체지향https://m.yes24.com/Goods/Detail/18249021 1. 협력하는 객체들의 공동체객체지향의 오해“객체지향이란 실세계를 직관적이고 직접적으로 모델링 할 수 있는 패러다임이다.” 문장에서는 현실 세계의 사물을 보다 현실과 가깝게(완전하게) 모델링 하는 의미로 해석됩니다. 프로그래밍의 객체지향프로그래밍에서 객체지향의 본질은 실세계를 모방하는 것이 아닙니다. 오히려 새로운 세계를 창조하려는 것 입니다. 소프트웨어 개발자의 역할은 단순히 설계서를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것 입니다. 객체지향의 본질객체지향이란 시스템을 상호작용 하는 자율적인 객체들의 공동체로.. 2024. 1. 29.
[UIKit] Nested Section 을 포함한 CollectionView 만들기 # NestedCollectionView 만들기 목표 화면 1. diffableDataSource 와 섹션 layout 만들기 섹션에 따른 각기 다른 레이아웃 구상 private var dataSource: UICollectionViewDiffableDataSource! func make(customCollectionViewSection section: CustomCollectionViewSection, env: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? { switch section { // Top Section case .top: let itemSize = NSCollectionLayoutSize(widthDimension: .frac.. 2024. 1. 25.
[UIKit] UICollectionView Compostional Layout 으로 TableView만들기 (WWDC20 List in UIColelctionView ) UICollectionView Compostional Layout 으로 TableView만들기 (WWDC20 List in UIColelctionView ) 글 작성 개요 CompositionalLyaout이 UITableView를 완전하게 대체할 수 있지 않을까라는 조그마한 의문에서 시작하게 되었음. 그래서 관련 세션이 있나 찾아 보았는데 WWDC20 List in UICollectionView를 보게 되었고 이에 대한 내용을 정리하기로 했음 Modern Collection Views UICollectionView를 구성하는 API는 데이터, 레이아웃, 프레젠테이션의 세 가지 카테고리로 구분할 수 있습니다. UICollectionView의 새로운 개념 중 하나는 콘텐츠가 렌더링되는 '위치'인 레이아웃과.. 2024. 1. 24.
[UIKit] iOS 트러블 슈팅 UIStackView Distribution 이해하기 UIStackView에 관한 트러블 슈팅 입니다. 글 작성 개요 최근 UIStackView를 활용하여 UI를 만들 일이 있었습니다. 다음과 같은 Layout을 만들기 위해 StackView를 활용하여 작성을 했는데요, StackView의 Size가 어떤 방식으로 바뀌는지 헷갈려서 글을 작성합니다. UIStackView의 컴포넌트 크기 내부 컴포넌트의 크기가 0 일때 UIStackView는 처음 컴보넌트와 맨 나중의 컴포넌트를 통해서 그 IntrinsicSize가 정해집니다. 즉 append된 Component가 고유의 사이즈를 통해서 StackView의 크기가 의존적이라는 말 입니다. 다음 사진을 통해서 설명 하겠습니다. 만약 높이를 지정하지 않으면, 내부 Content의 높이를 지정하지 않으면, UIS.. 2024. 1. 23.