-
[Clean Code] 독후감 및 정리 - 1
들어가기 앞서 (다시 읽기에 앞서)며칠 전 한 면접을 보게 되면서, "좋은 코드 가독성이라는 것을 어떻게 생각하세요 ?" 라는 질문을 받았습니다. 평소에 지키는 클린 코드라고 생각한 방법들(좋은 함수 명명법, 변수명, 보기 좋은 코드...등등) 만 주욱 나열하고 "네 뭐 그런 클린코드에 나온 방법들입니다." 라는 말로 그대로 끝난 경험이 있습니다. 🥲 사실 클린 코드 책을 읽은지 오래되기도 했고, 아마 이 책을 처음 접했던 날은 2020년쯤이었던 것으로 기억합니다. 생각처럼 명쾌하지 못하게, 기억나는 대로 더듬더듬 이야기했던, 그런 유쾌하지 못한 경험을 하게 되었네요. 역시 기억보다는 기록인가 봅니다. 그래서 이젠 제대로 정리하여 명쾌하게 이야기할 수 있도록 글로 남기고자 합니다.이 책을 통해 좋은 코..
2024.11.02 21:34 -
[Xcode / Swift] 빌드 시스템에 대한 이해 / 증분 빌드 / 병렬 처리 / Eager Linking / Incremental
이 글을 쓰게 된 이유.. 웅장해진다... [Architecture] Modular Architecture VS Clean Architecture어느날 문득 Modular Architecture와 Clean Architecture에 대한 생각을 하게 되었습니다. 모듈화나 클린이나 결국엔 개념적으로 레이어를 나누고 개발자들의 상황에 맞춰 선택적으로 사용할텐데, 둘은 어chanhhh.tistory.comModular Architecture와 Clean Architecture는 의존성 관리 방식에서 차이를 보입니다.Modular Architecture에서는 모듈 간 의존성이 명시적으로 설정됩니다. 즉, 하나의 모듈이 필요한 경우 다른 모듈에 의존성을 가지며, 이를 통해 기능별로 독립된 모듈들이 서로 필요한 부..
2024.10.29 19:12 -
[Github] Sponsor
스폰서 기능이 어떻게 이뤄져있는지 궁금해서, 그냥 한번 해봤습니다. 스폰했다고 자랑하라고 해서 블로그에 올립니다 😂Tuist는 iOS, macOS, tvOS, watchOS 프로젝트의 관리와 빌드를 자동화하는 오픈 소스 도구입니다. Xcode 프로젝트와 workspace 파일을 자동으로 생성해주고, 프로젝트 구성을 코드로 정의할 수 있게 하여 협업과 유지보수를 쉽게 할 수 있게 도와줍니다.너무 잘 사용하고 있어서 타겟을 이곳으로 정했습니다 ☺️그냥 결제하면됩니다. ㅋㅋ결제하면 스폰서에 이름을 띄워주고, 깃허브 프로필 밑에 스폰서링이라고 뱃지가 달립니다. 축포와 함께 옥토켓이 저를 반겨줍니다.
2024.10.10 18:05 -
[Architecture] Modular Architecture VS Clean Architecture
어느날 문득 Modular Architecture와 Clean Architecture에 대한 생각을 하게 되었습니다. 모듈화나 클린이나 결국엔 개념적으로 레이어를 나누고 개발자들의 상황에 맞춰 선택적으로 사용할텐데, 둘은 어떤 공통점이 있고, 어떤 차별화된 점이 있는지에 대해서 생각해 보려고 합니다.개념과 목적 Modular Architecture나 Clean Architecture나 모두 레이어를 분리하여 코드의 가독성을 높이는 구조를 갖고 있어서, 둘 다 코드 가독성 면에서는 비슷한 장점을 공유하고 있습니다. 그렇다면 각 접근이 iOS개발의 어떤 필요성을 충족하는지, 특히 협업과 코드베이스 관리에 얼마나 유리한지, 유연성과 유지보수성이 어떻게 앱 품질에 기여하는지에 대해서 생각해 보게 되었습니다.우선..
2024.09.18 23:55 -
[Clean Architecture, SwiftUI] SwiftUI를 위한 클린 아키텍처
SwiftUI를 위한 클린 아키텍처에 대한 고찰팀 프로젝트를 준비하며, SwiftUI에서의 클린 아키텍처에 대해 고민하게 되었습니다. SwiftUI 관련 아키텍처를 검색하던 중 가장 먼저 눈에 띈 아티클이 바로 "SwiftUI Clean Architecture"였습니다. 다행히도 이 아티클은 한국어 번역본도 제공하고 있어, SwiftUI의 클린 아키텍처에 대해 조금 더 깊이 이해할 수 있는 좋은 기회가 될 것 같아 천천히 읽어보았습니다. 이번 글에서는 아티클의 주요 내용을 요약하고, 제 개인적인 생각도 함께 나눠보고자 합니다.아래 링크는 해당 아티클의 한국어 번역본 링크입니다. SwiftUI를 위한 클린 아키텍처들어가기에 앞서gon125.github.ioUIKit과 SwiftUI, 그리고 아키텍처 패턴의..
2024.09.07 07:32 -
[Clean Architecture] Presentation(MVVM), Domain, Data
Clean Architecture and MVVM iOS에서 가장 유명한 Clean Layered Architecture and MVVM 클린 아키텍쳐에 대해서 얘기해 보려고 합니다. 여태까지 UIKit으로 진행한 프로젝트들은 거의 MVVM으로 진행 했었고 나름 이정도면 MVVM에 대해서 잘 알고 있다고 생각했었는데요. 그냥 우물안의 개구리였을 뿐이라는 것을 깨달았습니다. 여태까지 한 프로젝트들은 Presentation의 MVVM 까지 구현하고 VM에서 Business 로직을 실행하고 있었습니다. 도메인과 데이터는 Clean Layered가 아닌 그냥 제가 편한대로 구현하고 있었는데요. 이번에 개인 프로젝트를 진행하면서 정리를 해볼겸, 설명을 좀 쉽게 해서 이해해볼 겸 작성합니다.iOS 개발자라면..
2024.08.30 18:38 -
[MacOS, iOS] Cocoa Fundamentals Guide / 코코아 기본 사항
코코아란 무엇인가요?Cocoa는 OS X 운영 체제와 iOS를 위한 애플리케이션 환경입니다.iOS는 iPhone, iPad, iPod touch와 같은 멀티터치 기기에서 사용되는 운영 체제를 뜻합니다.객체 지향 소프트웨어 라이브러리, 런타임 시스템 및 통합 개발 환경으로 구성되어 있습니다.이 글에서는 이 정의를 확장하여 두 플랫폼에서 Cocoa의 목적, 기능 및 구성 요소에 대해 설명합니다.Cocoa 환경Cocoa는 OS X 및 iOS에서 실행되는 애플리케이션을 위한 런타임 환경을 제공하는 객체 지향 프레임워크의 집합입니다. Cocoa는 OS X을 위한 탁월한 응용 프로그램 환경이며 iOS를 위한 유일한 응용 프로그램 환경입니다. (Carbon은 OS X의 대체 환경이지만 기존 OS X 코드 기반을 지..
2024.05.01 23:23 -
[Architecture] The Composable Architecture(TCA)를 사용해 보기 앞서 고려해야할 점은 뭐가 있을까
들어가기 앞서...오늘은 SwiftUI에서 가장 인기있고 맛있다고 소문난 TCA를 경험해보려고 합니다. 아키텍쳐를 사용해보기 이전에 먼저 이 아키텍쳐는 어떤 이점이 있고, 어떤 점이 중점적으로 다뤄지고 있고 무슨 기저를 가지고 아키텍쳐를 구성했는지에 대해서 생각해보려고 합니다.혹시 잘못 이해하고 있거나 글에 잘못된 점이 있으면 피드백 부탁드리겠습니다. 🙇♂️더보기 GitHub - pointfreeco/swift-composable-architecture: A library for building applications in a consistent and understandable way,A library for building applications in a consistent and underst..
2024.11.07 05:02
-
[Architecture] The Composable Architecture(TCA)를 사용해 보기 앞서 고려해야할 점은 뭐가 있을까
들어가기 앞서...오늘은 SwiftUI에서 가장 인기있고 맛있다고 소문난 TCA를 경험해보려고 합니다. 아키텍쳐를 사용해보기 이전에 먼저 이 아키텍쳐는 어떤 이점이 있고, 어떤 점이 중점적으로 다뤄지고 있고 무슨 기저를 가지고 아키텍쳐를 구성했는지에 대해서 생각해보려고 합니다.혹시 잘못 이해하고 있거나 글에 잘못된 점이 있으면 피드백 부탁드리겠습니다. 🙇♂️더보기 GitHub - pointfreeco/swift-composable-architecture: A library for building applications in a consistent and understandable way,A library for building applications in a consistent and underst..
-
TIL: Today I Learned
TIL은 Today I Learned입니다.'오늘 내가 배운 것'이라는 뜻입니다. 개발자들에게는 익숙한 단어지만, 처음 들어보시는 분들도 있을 것 같습니다.그동안 프로젝트하느라 바빠서.. 자격증 공부하느라 바빠서라는 변명으로 기록하는 일들을 미뤄온 것 같습니다. 무엇을 하고 있는지, 또 무엇을 하고 싶은지 점점 목적을 잃어가고 있다는 생각이 들기도 했습니다. 🤔그래서 이제는 기억보다는 기록을 위해서 TIL을 작성하자라는 마음이 생겼습니다. 요즘 하루에 하나씩 꾸준히 포스팅하고, 백준 문제를 매일 한 문제씩 푸는 것도 그렇고, 매일 꾸준히 공부하는 습관을 TIL을 통해서 차근차근 잘 쌓아가고 있습니다.결론적으로 제가 하고 있는 것을 제대로 보여줄 수 있는 기록이 필요하다는 생각이 들어서 TIL을 꾸준히 ..
-
[Developer] 앱 사라짐 / 멤버십 만료 / 멤버십 갱신
2024년 11월 3일경앱스토어를 확인해 봤는데, 출시했던 앱인 42Box앱이 없어졌습니다. 사실 멤버십 갱신일이 조금 지났는데, 일부러 미루고 있었거든요. 오래된 앱들을 보면 마지막 업데이트가 7년, 8년 전인 그런 앱들이 있는 것을 봤었고, 옛날 게임 앱 중에서는 13년이나 지난 앱을 봤던 기억이 있거든요. 사실 얼마나 지나야 없어지는지 궁금했던 상황이었습니다. 결론은 두 가지입니다. 바로 적자면, 첫 째. 멤버십이 만료되고 한 달 정도 지나면 앱스토어에서 앱이 내려가게 됩니다. 둘째. 멤버십이 남아있으면 특별한 경우를 제외하고 앱이 사라지지 않습니다. 사실 없어졌다고 해서 완전히 앱스토어에서 삭제된 것은 아닙니다. 소프트 딜리트된 상태로 보입니다. (검색 안됨 / URL로 직접 접근 불가) 멤버십..
-
[Clean Code] 독후감 및 정리 - 1
들어가기 앞서 (다시 읽기에 앞서)며칠 전 한 면접을 보게 되면서, "좋은 코드 가독성이라는 것을 어떻게 생각하세요 ?" 라는 질문을 받았습니다. 평소에 지키는 클린 코드라고 생각한 방법들(좋은 함수 명명법, 변수명, 보기 좋은 코드...등등) 만 주욱 나열하고 "네 뭐 그런 클린코드에 나온 방법들입니다." 라는 말로 그대로 끝난 경험이 있습니다. 🥲 사실 클린 코드 책을 읽은지 오래되기도 했고, 아마 이 책을 처음 접했던 날은 2020년쯤이었던 것으로 기억합니다. 생각처럼 명쾌하지 못하게, 기억나는 대로 더듬더듬 이야기했던, 그런 유쾌하지 못한 경험을 하게 되었네요. 역시 기억보다는 기록인가 봅니다. 그래서 이젠 제대로 정리하여 명쾌하게 이야기할 수 있도록 글로 남기고자 합니다.이 책을 통해 좋은 코..
-
2239 c++ - 스도쿠
간단한 백트래킹 문제이다. queue를 사용해서 0의 좌표값들을 저장해서 사용했는데, 이런식으로는 처음 사용해봐서 애를 좀 먹었다. /* ************************************************************************** *//* *//* ::: ::: ::: *//* Problem Number: 2239 :+: :+: :+: *//* ..
-
1005 c++ - ACM Craft
위상정렬을 사용하면 쉽게 풀 수 있습니다. [그래프/정렬/유향] 위상정렬 / Topological Sorting위상정렬 / Topological Sorting 유향 비순환 그래프(Directed Acyclic Graph, DAG) 에서 각 노드들을 선형 순서로 나열하는 방법입니다. 여기서 유향 비순환 그래프란, 방향이 있는 그래프 중에 사이클이 없chanhhh.tistory.com1516번 문제와 거의 동일한 문제. 단 w의 값을 출력해주면 됩니다.#include #include #include #define fastio ios::sync_with_stdio(0), cin.tie(0)using namespace std;int main() { fastio; int t; cin >> t; for (i..
-
[Xcode / Swift] 빌드 시스템에 대한 이해 / 증분 빌드 / 병렬 처리 / Eager Linking / Incremental
이 글을 쓰게 된 이유.. 웅장해진다... [Architecture] Modular Architecture VS Clean Architecture어느날 문득 Modular Architecture와 Clean Architecture에 대한 생각을 하게 되었습니다. 모듈화나 클린이나 결국엔 개념적으로 레이어를 나누고 개발자들의 상황에 맞춰 선택적으로 사용할텐데, 둘은 어chanhhh.tistory.comModular Architecture와 Clean Architecture는 의존성 관리 방식에서 차이를 보입니다.Modular Architecture에서는 모듈 간 의존성이 명시적으로 설정됩니다. 즉, 하나의 모듈이 필요한 경우 다른 모듈에 의존성을 가지며, 이를 통해 기능별로 독립된 모듈들이 서로 필요한 부..
-
멀티미디어콘텐츠제작전문가 필기 후기
Specialist-Multimedia Contents Producing 스페셜리스트 ㄷㄷ.. 간지 나 보인다..국가자격 종목별 상세정보 | Q-net국가자격 종목별 상세정보www.q-net.or.kr한국산업인력공단에서 시행하는 영상 편집 전문가 시험입니다. 사실 이런 건지 몰랐습니다. 아래 pdf 출제 기준에 HTML, CSS 이런 게 있길래 이런것도 멀티미디어콘텐츠로 껴주나 싶은 그런 국가공인자격증인 줄 알고 신청했습니다. 출제기준이 25년에는 변경되는 거 같습니다. 출제기준 자료실에서 찾아보세요.정보처리기사 준비하면서 필기시험이 겹치는 부분이 좀 있어서 디자인, 멀티미디어 쪽 공부를 추가로 더 해서 보게 되었는데, 합격해 버려서 멀콘전 실기를 보러 갑니다. 😂 정보처리기사 실기 준비한다고 2회에서 ..
-
5619 c++ - 세 번째
세번째 작은 수 찾는 프로그램. 우선 처음 접근을 next_permutation을 통해 찾으려고 했는데, 해당 함수는 1,1,1 과 같은 중복된 숫자에 대해서 순열을 찾지 않는다는 것을 깨달았습니다. 이는 모든 요소가 동일하기 때문에 사전 순으로 더 이상의 다른 순열이 존재할 수 없기 때문입니다. int i = 0; do { if (i == 2) { cout 그래서 dfs로 변경해서 풀었는데, 갯수가 10^8개가 되면서 dfs로 전부 찾으려고 하니까 시간 초과가 났다.생각해보니, 가장 작은 수 4개만 찾으면 세번째로 작은 수를 찾을 수 있을거라 판단하고 코드를 작성하여 해결했다. 정답 코드.#include #include #include #define fastio ios::sync_..
-
26072 c++ - 곰곰이와 시소
이분탐색으로 풀었습니다. 중간에 입실론 오차범위 때문인지 오답이 되고 res의 범위를 탐색하는 과정에서 res0으로 걸어서 시간초과에 빠지게 된 경우도 생겨서 double형의 범위나 이분탐색의 무한루프에 대해서 다시 한번 생각하는 문제가 되었습니다.#include #include #include #define fastio ios::sync_with_stdio(0), cin.tie(0)using namespace std;int n;double l;int main() { fastio; cin >> n >> l; vector w(n); vector x(n); for (int i = 0; i > x[i]; for (int i = 0; i > w[i]; double s = 0.0, e = l, mi..
-
11052 c++ - 카드 구매하기
DP문제입니다. 헷갈리는 흐름을 정리하기 위해서 글을 씁니다.dp[i - j]는 문제를 이해하는 데 매우 중요한 부분입니다. 이 부분을 명확히 이해하는 것이 문제 해결의 핵심입니다.dp[i - j]가 의미하는 것dp[i]는 i개의 카드를 구매할 때 지불할 수 있는 최대 금액입니다. 그렇다면, dp[i - j]는 i - j개의 카드를 구매할 때 지불할 수 있는 최대 금액을 의미합니다.다시 말해서, 이미 i - j개의 카드를 최대로 구매한 상태에서 j개의 카드가 들어있는 카드팩을 추가로 구매했을 때의 최댓값을 계산하는 것입니다.구체적인 예시로 살펴봅시다:만약 i = 4, 즉 4개의 카드를 구매하려고 한다면, 우리는 다음과 같이 생각할 수 있습니다:j = 1일 경우:dp[4 - 1] = dp[3]: 이미 3개..
-
17069 c++ - 파이프 옮기기 2
17070번. 파이프 옮기기 1 과 같은 문제이지만 N(3 ≤ N ≤ 32)의 범위가 굉장히 넓기 때문에 dp를 적용해야만 풀 수 있습니다. + int형을 return값으로 가지게 되면 오버플로우가 나므로 ll을 사용하여 풀어야 합니다.완전탐색으로 풀었지만, 시간초과가 나게 되어서 dp에 대한 고민을 많이 해볼 수 있는 문제였습니다.#include #include using namespace std;using ll = long long;#define fastio ios::sync_with_stdio(0), cin.tie(0)ll n;ll dx[] = {1, 1, 0};ll dy[] = {0, 1, 1};ll dfs(ll y, ll x, ll dir, vector> &b, vector>> &v..
-
1644 c++ - 소수의 연속합
자연수 n을 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 출력한다.여기에서 연속된 소수의 합이라고 해서 처음 접근법을 에라토스테네스의 체로 소수를 거르고, 소수들의 배열을 만들어서 누적합을 만드는 식으로 진행하였다. 에라토스테네스의 체의 수행시간은 O(nloglogn)이고 누적합 탐색 O(n^2)으로 시간초과에 걸렸다.시간초과 누적합더보기#include #include using namespace std;int n;int pn[4000001];int conPn[4000001];int sumPn[4000001] = {0};int primeNumberSieve() { for (int i = 2; i > n; int count = 0; int sumPnSize = 0; sumPnSize = pri..
-
[그래프/정렬/유향] 위상정렬 / Topological Sorting
위상정렬 / Topological Sorting 유향 비순환 그래프(Directed Acyclic Graph, DAG) 에서 각 노드들을 선형 순서로 나열하는 방법입니다. 여기서 유향 비순환 그래프란, 방향이 있는 그래프 중에 사이클이 없는 그래프를 말합니다. 위상 정렬은 보통 의존 관계를 해결할 때 사용되며, 그래프 내에서 어떤 일의 순서를 정하거나 작업 간의 선후 관계를 정의하는 문제를 풀 때 유용합니다.위상 정렬의 조건그래프는 반드시 유향 비순환 그래프(DAG)이어야 합니다.유향(Directed): 간선의 방향이 있다.비순환(Acyclic): 사이클이 존재하지 않는다. 즉, 위상 정렬은 순환하는 경로가 있으면 불가능합니다.위상 정렬의 동작 원리위상 정렬의 핵심은 선행 조건을 만족하는 노드부터 순차적..
-
14003 swift - 가장 긴 증가하는 부분 수열 5
LIS의 플래티넘 버전. 수열 문제들을 풀다보면 어렵지 않게 풀 수 있다.11053번. 가장 긴 증가하는 부분 수열11054번. 가장 긴 바이토닉 부분 수열11055번. 가장 큰 증가하는 부분 수열11722번. 가장 긴 감소하는 부분 수열12015번. 가장 긴 증가하는 부분 수열 212738번. 가장 긴 증가하는 부분 수열 314002번. 가장 긴 증가하는 부분 수열 4dp로 풀면 O^2이므로 이진탐색을 이용하여 현재 수열들을 교체해가며 뽑아주고, 마지막 indices의 요소를 사용하여 parent를 역추적하여 뽑아내주면 된다.import Foundationvar arr: [Int] = []var sequence: [Int] = []var indices: [Int] = []var parent: [Int]..
-
17088 c++ - 등차수열 변환
17088 c++ 등차수열 변환.dfs로 풀었는데, 복사생성자를 인수로 받아서, 메모리 초과가 났다. dfs에서는 꼭 조심해줘야 하는 것을 다시 깨달았습니다.그래서 고쳐서 레퍼런스로 제출했는데, 시간초과가 났습니다. 수열의 길이가 10,000까지 될 수 있어서 각 항목에 대해 3가지 선택지를 가지므로, 완전 탐색하는 경우의 수는 (3^n) = 3^100000이 되는 것을 깨달았습니다. 그래서 수열로 접근하여 풀었습니다.dfs로 푼 코드더보기/* ************************************************************************** *//* ..
-
[Github] Sponsor
스폰서 기능이 어떻게 이뤄져있는지 궁금해서, 그냥 한번 해봤습니다. 스폰했다고 자랑하라고 해서 블로그에 올립니다 😂Tuist는 iOS, macOS, tvOS, watchOS 프로젝트의 관리와 빌드를 자동화하는 오픈 소스 도구입니다. Xcode 프로젝트와 workspace 파일을 자동으로 생성해주고, 프로젝트 구성을 코드로 정의할 수 있게 하여 협업과 유지보수를 쉽게 할 수 있게 도와줍니다.너무 잘 사용하고 있어서 타겟을 이곳으로 정했습니다 ☺️그냥 결제하면됩니다. ㅋㅋ결제하면 스폰서에 이름을 띄워주고, 깃허브 프로필 밑에 스폰서링이라고 뱃지가 달립니다. 축포와 함께 옥토켓이 저를 반겨줍니다.
-
16235 c++ - 나무 재테크
나무는 (x, y)라고 해놓고선 r,c로 들어왔다. 문제가 날 속임. (그래서 틀림...ㅠㅠ)결국 맞췄을땐 vector로하면 시간초과가 난다는 것을 알게 되었다. 처음에 문제 잘 읽고 시간 제한 보긴했지만 구현 문제라서 그냥 주어진 상황대로 풀었다. 둘을 비교했을때, 나무의 수가 커지면 커질수록 더 차이가 난다.# Let's calculate the complexity of both versions of the code to compare their potential performance.# Old Version (using vector):# In the old version, we have:# - Spring: Sorting the entire vector by age each spring, which..
-
[C++] 순열, 조합
표준 라이브러리로는 next_permutaion 과 prev_permutaion 이 있습니다.next_permutaion : "오름차순의 배열"을 기반prev_permutaion : "내림차순의 배열"을 기반#include using namespace std;template void pa(t T) { for (auto p : T) cout v = {1, 2, 3}; cout dfs로 전체 순열 뽑아내려면,#include using namespace std;void dfs(int n, vector a, vector v) { if (a.size() == n) { for (auto p : a) cout > n; vector a; vector visited(n + 1, false); dfs(..
-
1299 c++ - 전쟁-탈출편2
다익스트라 정리 다익스트라 풀이처음에 다익스트라로 n까지 최단 거리 구함. (구하면서 prev에 간선 정보들을 저장)prev를 이용하여 graph에서 해당하는 간선들을 삭제.다시 다익스트라를 돌려서 n까지 가는 최단 거리를 구함.고려한 점도시는 양방향으로 이동할 수 있다. (최단거리라면 양방향 둘 다 막힌다)다른 도시로 이동할 때 코스트가 다른 도로가 존재할 수 있다 ( 1->2 (1), 1->2 (2)) 이때 cost 가 1인 도로만 막힘탈출하지 못하는 경우는 없다.정답 코드더보기#include using namespace std;#define INF 1e9void dijkstra(int n, vector>>& graph, vector& distance, vector& prev..
-
1446 swift / c++ - 지름길
다이나믹프로그래밍과 다익스트라 두 방법 모두 사용할 수 있습니다. 시간 복잡도시간 복잡도는 O(D + N)입니다.D는 고속도로의 길이, N은 지름길의 수입니다.문제에서 N ≤ 12, D ≤ 10,000이므로, 이 접근 방식은 충분히 효율적입니다. C++ DP 풀이.#include using namespace std;#define INF 1e9int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, d; cin >> n >> d; vector> graph[10001]; for (int i = 0; i > from >> to >> cost; if (to dist(d + 1, INF); dist[0] = 0; for (int ..
-
[그래프] 다익스트라 / Dijkstra's algorithm
다익스트라 알고리즘 / Dijkstra's algorithm다익스트라 알고리즘은 단일 출발점 최단 경로를 찾는 알고리즘입니다. 가중치가 음수가 아닌 그래프에서 출발점에서 모든 다른 정점까지의 최단 경로를 구할 때 사용됩니다. 다익스트라 알고리즘은 우선순위 큐(Priority Queue)를 이용해 최단 거리가 가장 작은 정점을 빠르게 탐색하여 최적화된 성능을 제공합니다.다익스트라 알고리즘의 특징음의 가중치 간선 허용 안 함: 음의 가중치가 있는 그래프에서는 올바르게 작동하지 않습니다.우선순위 큐 사용: 최단 경로를 더 효율적으로 찾기 위해, 가중치가 가장 작은 정점을 빠르게 선택하기 위해 우선순위 큐(최소 힙)을 사용합니다.시간 복잡도: O((V + E) * log V) - 여기서 V는 정점의 수, E는 ..
-
[누적합] 세그먼트트리 / Segment tree
세그먼트 트리에 대해서 알아보고 해당하는 자료구조에 대해서 코드로 어떻게 사용하는지에 대해서 정리하려고 작성하였습니다.https://book.acmicpc.net/ds/segment-tree자세한 설명은 위의 백준북에서 볼 수 있습니다. C++#include using namespace std;using ll = long long;ll init(vector &a, vector &tree, int node, int start, int end);ll sum(vector &tree, int node, int start, int end, int left, int right);void update(vector &tree, int node, int start, int end, int index, ll diff);..
-
18352 swift - 특정 거리의 도시 찾기
처음 접근 - 벨만 포드 벨만 포드 풀이 시간초과 코드 보기.더보기이유. O(V * E) 벨만-포드 알고리즘의 시간 복잡도는 **O(V * E)**입니다. 여기서 V는 정점의 수, E는 간선의 수를 의미합니다.주어진 문제에서:N (정점의 수) = 최대 300,000M (간선의 수) = 최대 1,000,000따라서 벨만-포드를 사용했을 때 최악의 경우 시간 복잡도는:O(V×E)=O(300,000×1,000,000)=300,000,000,000O(V \times E) = O(300,000 \times 1,000,000) = 300,000,000,000O(V×E)=O(300,000×1,000,000)=300,000,000,000즉, 300조의 연산을 수행해야 합니다. import Foundation let I..
-
[그래프] 벨만-포드 / Bellman–Ford algorithm
Bellman–Ford algorithm 벨만-포드 알고리즘벨만-포드(Bellman-Ford) 알고리즘은 그래프에서 음의 가중치를 허용하면서 단일 출발점 최단 경로를 찾는 알고리즘입니다. 이 알고리즘은 다익스트라 알고리즘과는 달리 음의 사이클을 탐지할 수 있는 특성 때문에 특정 문제들(예: 네트워크에서 음의 가중치가 있는 경로 등)을 해결하는 데 유용합니다.벨만-포드 알고리즘의 특징시간 복잡도: O(V * E), 여기서 V는 정점의 개수, E는 간선의 개수입니다. 따라서, 다익스트라보다 느리지만 음의 가중치를 포함할 수 있다는 장점이 있습니다.음의 가중치: 음의 가중치를 허용합니다. 다익스트라와 달리, 음의 사이클이 있을 때도 탐지할 수 있습니다.음의 사이클 탐지: 벨만-포드는 그래프에 음의 사이클이 존..
-
[C++] vector
c++17을 기준으로 사용합니다.아래 레퍼런스를 참고하였습니다. C++17 - cppreference.comThe following features were merged into C++17: From the File System TS: the filesystem library. From the Library fundamentals v1 TS: features, including std::any, std::optional, std::string_view, std::apply, polymorphic allocators, searchers. From Libraryen.cppreference.com C++Clang++ 10.0 (C++17)clang++ -std=c++17 -O2 -Wno-unused-resul..
-
3190 swift / c++ - 뱀
뱀 게임 구현c++/* ************************************************************************** *//* *//* ::: ::: ::: *//* Problem Number: 3190 :+: :+: :+: *//* +:+ +:+ ..
-
12100 swift / c++ - 2048 (Easy)
문제 개요는 2048게임을 구현하는 것.입력첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2보다 크거나 같고, 1024보다 작거나 같은 2의 제곱꼴이다. 블록은 적어도 하나 주어진다.출력최대 5번 이동시켜서 얻을 수 있는 가장 큰 블록을 출력한다. 접근 방법. 4방향으로 합치고, 미는 dfs의 방법을 통해. 5번 할 수 있는 모든 방법을 찾아낸 뒤. 최대값으로 출력. 더보기/* ************************************************************************** *//* ..
-
[Architecture] Modular Architecture VS Clean Architecture
어느날 문득 Modular Architecture와 Clean Architecture에 대한 생각을 하게 되었습니다. 모듈화나 클린이나 결국엔 개념적으로 레이어를 나누고 개발자들의 상황에 맞춰 선택적으로 사용할텐데, 둘은 어떤 공통점이 있고, 어떤 차별화된 점이 있는지에 대해서 생각해 보려고 합니다.개념과 목적 Modular Architecture나 Clean Architecture나 모두 레이어를 분리하여 코드의 가독성을 높이는 구조를 갖고 있어서, 둘 다 코드 가독성 면에서는 비슷한 장점을 공유하고 있습니다. 그렇다면 각 접근이 iOS개발의 어떤 필요성을 충족하는지, 특히 협업과 코드베이스 관리에 얼마나 유리한지, 유연성과 유지보수성이 어떻게 앱 품질에 기여하는지에 대해서 생각해 보게 되었습니다.우선..
-
[Clean Architecture, SwiftUI] SwiftUI를 위한 클린 아키텍처
SwiftUI를 위한 클린 아키텍처에 대한 고찰팀 프로젝트를 준비하며, SwiftUI에서의 클린 아키텍처에 대해 고민하게 되었습니다. SwiftUI 관련 아키텍처를 검색하던 중 가장 먼저 눈에 띈 아티클이 바로 "SwiftUI Clean Architecture"였습니다. 다행히도 이 아티클은 한국어 번역본도 제공하고 있어, SwiftUI의 클린 아키텍처에 대해 조금 더 깊이 이해할 수 있는 좋은 기회가 될 것 같아 천천히 읽어보았습니다. 이번 글에서는 아티클의 주요 내용을 요약하고, 제 개인적인 생각도 함께 나눠보고자 합니다.아래 링크는 해당 아티클의 한국어 번역본 링크입니다. SwiftUI를 위한 클린 아키텍처들어가기에 앞서gon125.github.ioUIKit과 SwiftUI, 그리고 아키텍처 패턴의..
-
[Framework] PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self) 터짐 현상이 에러에서 VC가 문제인지. coordinator패턴이 문제인지. 계속 삽질하다가 찾아냈습니다. 🥲iOS 17 버전에서 오류라고 합니다.16버전에서는 그냥 import로 된다고...*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PHPhotoLibrary presentLimitedLibraryPickerFromViewController:]: unrecognized selector sent to instance 0x10300fc60' 에러 해결 방법. Targets > Ge..
-
[Clean Architecture] Presentation(MVVM), Domain, Data
Clean Architecture and MVVM iOS에서 가장 유명한 Clean Layered Architecture and MVVM 클린 아키텍쳐에 대해서 얘기해 보려고 합니다. 여태까지 UIKit으로 진행한 프로젝트들은 거의 MVVM으로 진행 했었고 나름 이정도면 MVVM에 대해서 잘 알고 있다고 생각했었는데요. 그냥 우물안의 개구리였을 뿐이라는 것을 깨달았습니다. 여태까지 한 프로젝트들은 Presentation의 MVVM 까지 구현하고 VM에서 Business 로직을 실행하고 있었습니다. 도메인과 데이터는 Clean Layered가 아닌 그냥 제가 편한대로 구현하고 있었는데요. 이번에 개인 프로젝트를 진행하면서 정리를 해볼겸, 설명을 좀 쉽게 해서 이해해볼 겸 작성합니다.iOS 개발자라면..
-
[C++] Permutation, Combination
#include #include #define n 4#define r 2using namespace std;vector pArr(r, 0);vector check(n + 1, false);void printArray(vector arr) { for (int i = 0; i #include #include #define n 4#define r 2using namespace std;vector pArr(r, 0);void printArray(vector arr) { for (int i = 0; i #include #include #define n 4#define r 3using namespace std;vector cArr(r, 0);void printArray(vector arr) { for (i..
-
[Architecture] 프로젝트에 Modular Architecture를 적용하는 이유
https://github.com/chanheki/swifty-proteins/가장 큰 이유는 프로젝트에 모듈화를 적용해보고 싶었습니다.기존에 있던 프로젝트에 모듈화를 해보는 것도 좋겠지만, 그렇게 하는게 더 접근이 더 어려울것 같아서 처음부터 모듈화된 프로젝트를 만들어서 개발해보고 싶었습니다. 모듈화의 큰 장점인 수평적 확장이 가능하다는 점과 단위 테스트의 용이성을 경험해보고 싶어서 개발 방향을 잡았습니다.비교 요약특성모듈화모놀리식독립성높은 독립성, 모듈별로 독립적인 테스트 가능낮은 독립성, 모든 코드가 하나의 코드베이스에 있음재사용성높은 재사용성, 모듈별로 재사용 가능한 테스트낮은 재사용성, 코드베이스 전체에 적용되는 테스트설정 및 관리 복잡성높은 설정 및 관리 복잡성낮은 설정 및 관리 복잡성의존성 ..
-
[Architecture] Matching MVVM architecture in a modular architecture
Cocoa-MVC에 이어 MVVM 아키텍쳐 적용 방식에 대한 정리입니다. [Architecture] Matching Cocoa-MVC architecture in a modular architecturehttps://github.com/chanheki/swifty-proteins현재는 pirvate 이지만 완성 후 public으로 공개 예정 레포지토리입니다.위 프로젝트에서 Modular architecture를 적용하여 설계, 구현하고 있습니다.레이어별로 모듈화를chanhhh.tistory.com MVVM을 Modular architecture에 적용시 어떤 부분이 어떤 layer에 들어가는지 정리하기 위해서 작성한 글입니다.모듈러 아키텍처 설계App Layer앱의 진입점 및 전체적인 앱 라이프사이클 관..
-
[Architecture] Matching Cocoa-MVC architecture in a modular architecture
https://github.com/chanheki/swifty-proteins현재는 pirvate 이지만 완성 후 public으로 공개 예정 레포지토리입니다.위 프로젝트에서 Modular architecture를 적용하여 설계, 구현하고 있습니다.레이어별로 모듈화를 나누고 Cocoa-MVC 패턴을 적용하기 위해 정리한 내용입니다. 모듈러 아키텍처 설계App Layer앱의 진입점 및 전체적인 앱 라이프사이클 관리주요 앱 설정 및 초기화 코드Feature Layer사용자 인터페이스 및 사용자의 액션을 처리뷰(View) 및 뷰와 관련된 로직각 기능별로 독립적인 UI 및 로직 (AuthFeature, ProfileFeature 등)Domain Layer비즈니스 로직과 애플리케이션의 도메인 모델엔터티, 유스케이스..