본문 바로가기

전체 글324

[iOS] 프로토콜 지향 프로그래밍 (POP) 프로토콜특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한 것구조체, 클래스, 열거형은 프로토콜을 채택해서 프로토콜의 요구사항을 구현함으로써 프로토콜을 준수하며, 트로토콜이 정의한 특정 기능을 수행할 수 있음. 프로토콜 요구사항프로토콜을 채택한 타입이 특정 기능을 수행하기 위해 필요한 프로퍼티나 메서드와 같은 기능.프로퍼티 요구프로토콜을 채택한 타입이 어떤 프로퍼티를 구현해야하는지 요구하는 것프로퍼티의 이름과 타입만 준수하면 됨. (연산 프로퍼티 or 저장 프로퍼티 무관)프로토콜이 해당 프로퍼티를 읽기 전용으로 할지, 읽고 쓰기가 모두 가능하게 할지 정함.타입 프로퍼티 (static 변수)를 요구하려면 static 키워드 사용 (class, static 구분없이)메서드 요구인스.. 2025. 4. 2.
[백준 1949] 우수 마을 (Swift) https://www.acmicpc.net/problem/1949 DP & DFShttps://sio2whocode.tistory.com/296 SNS 얼리어답터 문제랑 완전 똑같은 문제임차이점은 그때는 최소 얼리어답터 수를 구하는 거였다면(이 문제로 치면 최소 우수마을의 수)지금은 우수마을의 주민 수의 최대 합을 구하는 문제 접근방법트리모양에서 DP를 적용해서 푼다고 생각하면, 나와 내 자식노드까지가 sub tree라고 보고내가 우수마을일 때, 내 자식노드들은 우수마을이면 안됨내가 우수마을이 아닐 때, 내가 자식 노드들은 우수마을이어도 되고, 아니어도 된다.이게 주된 로직이다. 다만 여기서는 내 인접 마을 중 하나는 우수마을이어야 되는데,내가 우수마을이 아닐 때, 내 자식 노드들이 우수마을이 아니어도 .. 2025. 4. 2.
[백준 12851] 숨바꼭질 2 (Swift) https://www.acmicpc.net/problem/12851 BFS & DP N에서 K까지 가는데 -1, +1, *2 경우로 이동할 수 있다. 이때 가장 빠르게 도달하는 시간과 그에 대한 경우의 수를 구하는 문제 접근방법- BFS로 방문하고, 이미 방문했던 노드를 다시 큐에 넣지 않음- 세가지 경우로 이동할 때, 다음 노드가 처음 방문하는 노드라면 다음 노드까지의 최단거리(dist[next])를 지금 노드까지의 최단거리+1을 입력해준다. 그리고 그 거리로 도달하는 경우의 수 (cnt[next])에는 지금 노드의 최단경로 경우의수 (cnt[now])를 넣어준다. {지금 노드로의 제일빨리 도달하는 경우들이 모두 다음 노드로까지 갈 수 있다는 것이기 때문에}- 다음 노드가 처음 방문하는 노드가 아니고,.. 2025. 3. 31.
[iOS] Network Calls (네트워크 호출) 오늘은 iOS에서 네트워크 호출 (Network Calls) 하기에 대해서 간단한 예제 코드와 함께 공부했다. 네트워크 호출을 해야하는 이유는iOS 앱에서 사용자에게 데이터를 보여주기 위해서는 서버에 있는 데이터를 가져와서보기 좋게 유저에게 보여주어야 하기 때문이다. ☁️ (서버) --- 💾 (데이터) --> 📱(아이폰) 바로 여기서 서버에서 데이터를 가져오기에서 필요한 것이네트워크 호출이다. 우선, 그럼 그 데이터가 어떤 것인지 잠시 설명하자면,주로 요즘 우리가 서버에서 받아오는 데이터의 형태는JSON (Java Script Object Notation?) 이다.  JSON은 이렇게 key와 value로 이루어진 데이터의 형식이다.대부분 문자열 형태이기 때문에 ""로 감싸져있다.데이터가 예를 들어 .. 2025. 3. 28.
[iOS] View Life Cycle (UIKit) viewDidLoad()뷰가 메모리에 생성됐을 때 호출됨 (최초 1번)뷰에 속한 내용들이 모두 메모리에 로드된 후에 호출되기 때문에, viewdidload를 실행할 때는 outlet 과 같은 변수들에 모두 값이 채워져있음이 보장됨viewWillAppear()뷰가 App의 뷰 계층에 추가될 때 호출됨 (스크린에 뷰가 뜨기 바로 직전 → 뷰가 뜰 때 마다 호출)*주의점: 뷰가 처음 생성될 때만 viewDidLoad()가 실행되기 때문에, 만약 A뷰를 띄우고 B뷰로 넘어갔다가 다시 A뷰로 돌아오는 경우 viewDidLoad()는 실행되지 않지만 viewWillAppear()는 실행됨. 따라서 화면이 뜰 때 마다 실행되어야 하는 코드는 viewWillAppear()에 속해야한다.viewDidAppear()뷰가 .. 2025. 3. 28.
[백준 8911] 거북이 (Swift) https://www.acmicpc.net/problem/8911 시뮬레이션격자판에서 0,0 점에서 거북이를 앞,뒤로 이동하거나 오른쪽,왼쪽으로 회전하는 명령들이 주어지면그 명령대로 거북이가 이동했을 때 지나는 모든 점을 포함하는 최소 사각형의 넓이를 구하는 문제 접근방법휴 격자판 나오면 늘 긴장하게 됨. 칸을 이동하는건 자신있는데 선을 따라 이동하는건 좀 어려운 것 같다.근데 마음을 다잡고 문제를 풀어보니깐 이번 문제는 꽤 잘 풀렸다!우선 어떻게 지나는 모든 점들을 포함하는 최소 직사각형의 넓이를 구하는 걸 먼저 생각했는데생각해보니 넘 간단했다. 그냥 모든 점들의 최소x, 최대x, 최소y, 최대y를 구해서 가로 길이(최대x-최소x)와 세로길이(최대y-최소y)를 구해서 곱해주면 되는 거였음 그리고 방향전.. 2025. 3. 27.
[iOS] Delegate & Protocol Delegate & Protocol patterndelegate와 protocol 패턴은 one-to-one communication pattern이다.여기서 one to one 이 의미하는 건 흔한 예시로는 뷰와 뷰 사이의 통신을 말함.⇒ 뷰 사이의 통신을 delegate와 protocol로 구현할 수 있다.  What is Delegate?Delegate: 위임하다delegate pattern은 A객체가 특정 task를 B객체에게 위임(delegate)할 때 사용한다. 여기에서 등장하는 비유가 Boss와 Intern의 관계다.delegate 패턴에서 위임받는 객체 입장(Intern)에서는 무슨 일을, 언제할지 명령이 떨어지기를 기다리고 있는 것.위임하는 객체 입장(Boss)에서는 언제 그 일을 시킬지.. 2025. 3. 26.
[백준 2176] 합리적인 이동경로 (C++) https://www.acmicpc.net/problem/2176   오늘 설명은 생략합니다..pq에는 꼭 2까지의 최단 거리인 distance값을 넣는 것 소스코드#include #include #include #include using namespace std;int N, M;int dp[1001];vector dijkstra(vector>> adj){ priority_queue, vector>, greater>> pq; // (노드, 거리) vector distances(N+1, INT_MAX); vector visit(N+1, false); distances[2] = 0; dp[2] = 1; visit[2] = true; pq.push({0,2}); .. 2025. 3. 26.
[iOS+@] Concurrency (동시성) Concurrency(동시성)은 여러가지 일을 동시에 하는 것을 말함. (multi-core CPU가 이를 가능하게 함, 원래도 멀티스레드는 가능했는데, 그때는 라운드로빈 방식 마냥 코어는 하난데 여러개를 동시에 처리하는 것처럼 보이게 하는거였고, 이제 찐 병렬처리가 가능함) 프로세스는 실행 중인 프로그램을 부르는 말이고, 프로세스는 다시 여러개의 실행 흐름인 스레드로 나눌 수 있다.즉 프로세스가 앱 하나, 프로그램 하나와 대응되어서 앱 내의 여러 함수의 실행을 모두 포함하는 것이었다면,스레드는 프로세스의 여러 작업들의 실행 흐름을 N 차선으로 나누는 것이다. 그리고 한 차선을 한 스레드라고 부르는 것.스레드는 실행 단위가 아니라 실행 흐름의 단위이다. (CPU입장에서 생각하면 편하다)(스위프트에서 GC.. 2025. 3. 25.
[백준 12026] BOJ 거리 (Swift) https://www.acmicpc.net/problem/12026 DPB,O,J 중 하나가 쓰여있는 한줄짜리 보도블록들을 걸을 때 B->O->J 순으로 갈 수 있다고 할 때,k칸 이동할 때 k*k의 에너지가 든다고 한다. 최소 에너지만을 사용해서 1번째에서 N번째 까지 도달하는 데 소모되는 최소 에너지를 출력하는 문제, 도달할 수 없다면 -1 출력. 접근방법N의 범위가 1000까지여서 첫번째 칸부터 시작해서, 한번에 갈 수 있는 칸까지 가는데 필요한 에너지를 구하고, 그 칸에 도달하는 최소 에너지를 갱신해가면서 풀어도 N*N보다 적게 나온다. (1000*1000 = 1,000,000 이니까 근데 이것보다 확실히 적게 드니까 괜찮지 않을까 싶어서 그렇게 풀었다. 도달할 수 있는 칸을 배열에 넣고 그 칸들.. 2025. 3. 25.
[iOS+@] Dependency Injection (의존성 주입) Dependency Injection이란어떤 object에게 그것이 필요로 하는 것, 객체 즉 dependency를 주는 것(Give)그 object가 다른 객체들(dependencies)을 직접 만들게 하는 게 아니라! 유의어들: initializer injection = constructor injection, property injection, method injection(이들은 Dependency injection을 구현하는 방법들이라고 합니다.) 이해하기 쉬운 예제 코드class ParentView { let networkManager = NetworkManager() let bag = Bag() let childView: ChildView = ChildView()}class ChildVie.. 2025. 3. 24.
[백준 16953] A -> B (Swift) https://www.acmicpc.net/problem/16953 BFS정수 A, B (예, 2, 162) 가 주어지면, A에서 B가 되기까지 두가지 연산을 수행할 수 있다고 할 때, 최소 몇번 수행해야 되는지 출력하는 문제, 불가능하면 -1 출력 접근방법BFS나 DFS 완전탐색 문제 풀이할 때는 늘 갈 수 있는 경로 를 생각하면서 푸는데, 이게 문제가 격자판에서 어쩌구 할 경우에는 갈 수 있는 칸이 되고, 지금 문제같은 경우는 가능한 연산 두가지가 된다. 현재 갖고 있는 수에서 2를 곱하는 길 or 1을 가장 오른쪽에 붙이는 길 B까지 도달하는 최단 거리를 구하는 거니까 BFS가 더 효율적인 것 같아서 큐를 사용해서 풀었다.큐의 원소는 두개의 Int를 갖는 튜플로, 첫번째 수는 현재 수, 두번째 수는.. 2025. 3. 24.
728x90