본문 바로가기

swift35

[LCA] 백준 13116번 30번 (Swift 풀이) 13116번: 30번 첫 번째 줄에 테스트 케이스의 수 T (1 ≤ T ≤ 50 000)가 주어진다. 이후 T개의 테스트 케이스가 주어진다. 각 테스트 케이스는 한 줄로 구성되어 있으며, 각 줄에는 두 개의 정수 A와 B (1 ≤ A, B ≤ 1 www.acmicpc.net [문제] 혹시 2007학년도 대학수학능력시험 수리영역 가형 이산수학 30번 문제를 아는가? 여러분은 수능을 치는 수험생의 마음으로 이 문제를 해결해야만 한다. 하지만 우리는 저작권 위반으로 판사님을 뵙고 싶지 않았기 때문에 이 문제를 직접 수록할 수는 없었다. 아래 링크 중 하나를 클릭해서 pdf 파일을 내려받아 가장 마지막 페이지를 보면, 위의 그림과 아주 유사한 문제가 하나 있을 것이다. 여러분은 바로 그 문제를 해결해야만 한다... 2021. 4. 21.
CGRect, CGPoint, CGSize CGRect, CGPoint, CGSize는 iOS를 개발할 때 스토리보드를 사용하지 않고 코드로 View를 구현하다보면 자주 접할 수 있는 객체들입니다. 사용하다보니 무슨역할을 하는지는 감으로 알겠고, CGPoint랑 CGSize는 이름만으로도 무슨 객체인지 알 수 있겠는데 CGRect는 말로 설명하라그러면 딱 정의하기가 힘들더라구요?? 그래서 간단하게라도 CGRect가 무슨 객체인지 알아봤는데 정말정말 간단한 객체였습니다ㅋㅋ 그래도 머리로 아는 것과 말로 설명하는 건 또 다르니까 블로깅해볼게요! CGPoint와 CGSize 이름 그대로 CGPoint는 2차원 좌표계의 점을 나타내는 구조체이고, CGSize는 너비와 높이를 나타내는 구조체입니다. 사실 정말 이거 그대로예요. CGPoint는 좌표의 x값.. 2021. 4. 16.
첫 테스트코드를 작성해보다. 제가 처음 테스트코드를 작성해보고 난 후의 개인적인 생각을 정리해보고 싶어서 이렇게 글을 쓰게 되었습니다. 아래 테스트코드의 장점이나 TDD에 대한 내용은 다른 블로그의 내용을 좀 더 참고해서 적었습니다! 이전에 TDD에 대해 알게 된 이후 언젠가는 TDD를 꼭 적용해보고 싶다는 생각이 있었습니다. TDD까지는 아니더라도 최소한 테스트코드는 한 번 작성해봐야지 생각했었어요. 하지만 시간에 쫓긴다는 핑계와 이것 말고도 할 게 많다는 핑계로 계속 미루고 미루고 있었습니다. 저는 최근 스타트업과 iOS 프로젝트 하나를 계약해서 하고있는 중인데, 지금 기획만 어느정도 되어 있는 상태고 디자인과 서버 개발은 아직 들어가지 않은 상태입니다. 서비스를 본격적으로 개발하기 전에 디자인과 서버 개발이 이루어져야 하는 현.. 2021. 4. 14.
키체인 (Key Chain) 아이폰 유저라면 한 번쯤은 키체인 로그인을 사용해봤을 것 같습니다. 저는 이번 동아리 프로젝트에서, 그리고 스타트업과 계약해서 진행하고 있는 다른 프로젝트에서 자동로그인 기능을 구현해야하는 상황이 생겼는데요! 사실 자동로그인이라길래 처음에는 로그인 후 받은 token을 저장하거나, 아이디와 비밀번호를 UserDefaults로 저장해서 사용하면 되는건가? 하고 생각했는데, 그렇게 하면 거의 뭐 보안이 💩..ㅋㅋㅋ UserDefaults는 데이터를 있는 그대로 저장하기 때문에 개인정보를 UserDefaults로 저장하게 되면 정말 보안이 취약해집니다!!! 그렇다고 개인정보를 직접 암호화해서 저장하기에는 많이 복잡해지죠ㅠㅠ 그래서 키체인을 사용하려합니다 키체인은 암호화된 데이터베이스로써, 사용자의 Mac, 앱.. 2021. 4. 13.
GCD (Grand Central Dispatch) iOS의 중요한 개념 중 하나인 GCD!! GCD가 뭘까요? GCD는 Grand Central Dispatch 의 줄임말입니다. GCD에 대해 자세하게 알아보기 전에 왜 GCD가 나오게 됐는지, 그 배경부터 살펴보겠습니다. 멀티 코어 프로세서에서는 프로그램의 동작을 멀티 프로세서에게 어떻게 잘 배분하는지가 중요합니다. GCD 이전에는 멀티 스레딩을 위해 Thread와 OperationQueue 등의 클래스를 사용했다고 하는데요, Thread는 복잡할 뿐만 아니라 임계 구역 (Critical Section) 등을 이용한 Lock을 관리하기 까다로웠습니다. 그리고 OperationQueue는 GCD에 비해 무겁고 Boilerplate Code들이 많이 필요한 문제가 있었죠. 그래서 Apple은 GCD를 내놓.. 2021. 3. 23.
다익스트라 (Dijkstra) 오늘은 최단거리 구하는 알고리즘 중 다익스트라 알고리즘에 대해 알아보려 합니다. 학교에서 갓 2학년에 되었을 때 알고리즘 수업시간에 다익스트라를 배웠었는데요, 사실 1학년 말에도 과 학회 선배들이 다익스트라를 알려줬었습니다. 하지만 저는 이것만큼 거부감드는게 없었어요ㅠㅠ 그냥 다익스트라 라는 단어 자체가 너무 어려워 보였던 것 같습니다. 하지만 이제와서 다시보니 왜 이렇게 간단한 개념을 이해조차 못했는지.. 이렇게 보니 저도 그 때보다 성장하긴 했나봐요ㅎㅎ.. 다익스트라는 V개의 정점과 음수가 아닌 E개의 간선을 가진 그래프 G에서 특정 출발 정점 (S) 에서부터 다른 모든 정점까지의 최단경로를 구하는 알고리즘 (1:N) 입니다. 벨만-포드 알고리즘과 달리 음의 가중치를 가지지 않아, 각 정점을 최대 한.. 2021. 3. 9.
XCTest tips and tricks that can level up your Swift testing iOS에서의 Unit Test를 위해 XCTest에 대해 알아보던 중 XCtest tips and tricks that can level up your Swift testing 이라는 블로그를 보게 되었습니다. XCTest에 대한 내용과 참고 게시물의 내용을 함께 번역 및 정리해보면 좋을 것 같았습니다. 중간중간 제가 이해가지 않는 tip들은 직접 예시코드를 작성해보면서 이해해보려고 노력해봤는데, 아직까지는 좀 더 학습이 필요한 것 같아요 :) 그럼 먼저 XCTest가 무엇인지부터 알아볼까요? What is XCTest? 먼저 애플에서는 XCTest에 대해 이렇게 말하고 있습니다. Create and run unit tests, performance tests, and UI tests for your X.. 2021. 3. 3.
Frame과 Bounds iOS 개발을 하다보면 거의 무조건 접하는 것 중 하나가 바로 frame과 bounds입니다. 저는 사실 frame과 bounds가 어떤 차이가 있는지 잘 모르고 사용했는데, 모르고 사용하니까 너무 답답하더라구요. 네, 그래서 알아봤습니다! 먼저 Frame과 Bounds가 애플에서는 뭐라고 정의되고 있는지 한 번 볼게요. Frame The frame rectangle, which describes the view's location and size in its superview's coordinate system. 👉Frame은 SuperView(상위뷰)의 좌표 시스템 안에서의 View의 위치와 사이즈를 나타냅니다. Bounds The bounds rectangle, which describes the .. 2021. 2. 26.
PriorityQueue (우선순위 큐) Priority Queue (우선순위 큐)는 말 그대로 사용자가 지정한 조건에 따라 우선순위가 정해집니다. 일반적인 Queue는 단지 데이터가 들어오는 순서에 따라 FIFO(First In First Out) 구조를 따르게 되는데, Priority Queue는 우선순위가 높은 데이터부터 pop됩니다. PriorityQueue는 우선순위에 따라 Heap(힙) 자료구조로 데이터를 저장하게 되기 때문에 삽입과 삭제의 시간복잡도는 O(log n)으로 매우 빠른 시간을 자랑합니다. 제가 이 Priority Queue (우선순위 큐)를 Swift로 직접 구현하기 위해 이전 게시물에서 Heap(힙) 자료구조를 공부했었습니다!! Queue도.. Stack도.. PriorityQueue도 없는 Swift는... 사용하려.. 2021. 2. 19.
ARC (Automatic Reference Counting) iOS 개발을 공부하면서 꼭 알아야할 것 중 하나인 ARC (Automatic Reference Counting). 도대체 ARC가 뭘까요? 먼저, 앱의 성능을 유지하기 위해서는 메모리 관리가 필수적입니다. Stack 메모리에 저장된 데이터는 자동으로 제거되기 때문에 특별한 관리가 필요 없지만, Heap 메모리는 개발자가 동적으로 할당하는 메모리 공간이기 때문에 Heap 메모리에 저장된 데이터는 필요하지 않은 시점에 직접 제거해야만 합니다. 따라서 메모리 관리 모델은 Heap에 저장된 데이터를 관리합니다. [ 참고 ] Value Type은 Stack 메모리에, Reference Type은 Heap 메모리에 저장됩니다. Value Type: Structure, Enumeration, Tuple.. Refe.. 2020. 12. 22.
강한 순환 참조 / 강한 참조 사이클 (Strong Reference Cycle) STRONG REFERENCE CYCLE Strong Reference Cycle (강한 순환 참조)란 무엇을 말할까요? 저는 iOS 개발을 공부하면서 iOS와 관련된 게시글이나 정보를 찾다보면 메모리 관리에 관한 이야기가 정말 많다고 생각이 들었습니다. 그리고 이 게시물에서 다뤄볼 강한 순환 참조도 메모리와 관련되어 있습니다. 그래서 오늘은 강한 순환 참조에 대해서 아래 예시와 함께 살펴보겠습니다. 먼저, 아래 코드와 같이 Person과 Car이라는 클래스가 있다고 가정합시다. 그리고 Person class는 Car 속성을, Car class는 Person 속성을 가지고 있습니다. class Person { var name = "Jamie" var car: Car? } class Car { var mo.. 2020. 12. 20.