분류 전체보기
-
완전탐색(Brute Force)알고리즘 (코딩테스트) 2024. 10. 21. 22:51
특징: 가능한 모든 경우의 수를 탐색하는 방법. 작은 데이터셋에서 유용하며, 시간이 허락되는 한 최적해를 찾는 데 유리함.자주 나오는 문제 유형: 1) 가능한 모든 경우를 시도하여 해를 찾는 문제2) 순열 및 조합 문제 1. 백준 - 부분수열의 합https://www.acmicpc.net/problem/1182 부분수열이란? 배열에서 일부 원소를 선택하여 순서는 유지하되, 연속하지 않아도 되는 수열ex. [-7, -2, 3, 4] 의 부분수열: [-7] [-2] [3] [4] [-7, -2] [-7, 3] [-7, 4] [-2, 3] [-2, 4] [3, 4] [-7, -2, 3] [-7, -2, 4] 이처럼 연속하지 않아도 순서만 유지하면 됨 아이디어)각 원소는 선택 하거나, 선택하지 않거나 두..
-
DP 실전문제알고리즘 (코딩테스트) 2024. 10. 20. 14:50
1. 프로그래머스 - N으로 표현https://school.programmers.co.kr/learn/courses/30/lessons/42895 아이디어)dp[i] = N을 i번 사용해서 만들 수 있는 숫자들의 집합i번 사용했을때 가능한 숫자들은, i-1번까지 사용한 숫자들과 사칙연산을 통해 계산ex)- dp[1] = { 5 } : 5를 한번만 사용- dp[2] = N을 2번 이어붙인 수+ 이전연산과의 사칙연산 조합{ 55, 5+5, 5-5, 5/5, 5*5 } : 55, dp[1]과의 사칙연산조합- dp[3]은 dp[1]과 dp[2]의 조합{ 555, 55+5, 55-5, 55*5, 55/5, 10+5, 10-5, 10*5, 10/5, ..... }- dp[4]는 dp[1]과 dp[3]의 조합..
-
DP (다이나믹 프로그래밍) 기본개념/기본문제알고리즘 (코딩테스트) 2024. 10. 17. 10:18
[ 1차원DP 기본문제 ] 거스름돈 문제11원을 만들 때 최소한의 동전 개수를 찾고 싶습니다.사용할 수 있는 동전은 [1, 2, 5]입니다. dp[x] : x원을 만들기 위한 최소 동전 개수 1을 사용하면 dp[10] + 1 (10원을 만드는 방법에 동전1 추가) 2를 사용하면 dp[9] + 2 (9원을 만드는 방법에 동전2 추가) 5를 사용하면 dp[6] + 5 - dp[6] = dp[5] + 1 (5원을 만드는 방법 동전1 추가) >> 각 경우 중 가장 작은 경우 dp[x] = min(dp[x-1] + 1, dp[x-2] + 1, dp[x-5] + 1) "x원을 만들기 위해 필요한 최소 동전 개수는, 그보다 작은 금액들을..
-
다익스트라와 MST(최소신장트리)알고리즘 (코딩테스트) 2024. 10. 16. 15:03
다익스트라 대표 문제 : https://www.acmicpc.net/problem/1753 (백준 1753 최단경로)def dijkstra(V, graph, start): distance = [float('inf')] * (V + 1) # 모든 노드의 최단 경로를 무한대로 초기화 distance[start] = 0 # 시작 노드의 거리는 0으로 설정 q = [(0, start)] # (거리, 노드)를 우선순위 큐에 삽입 while q: current_distance, current_node = heapq.heappop(q) # 현재 노드까지의 거리가 이미 더 짧다면 무시 if current_distance > distance[current_..
-
[디자인패턴 변환 코드 리팩토링 - 최종 선택 패턴과 그 이유]취준(자소서,면접)/프로젝트 정리 2024. 9. 16. 20:18
가장 중요한점. 기존의 MVC패턴을 "점진적"으로 변환해야 한다 !! [선택 과정]1) 각 아키텍쳐 별 장단점 파악 (Clean Architecture, RIBs, VIPER)2) 기존의 MVC패턴에서 변환하기에 적합한 패턴이어야 한다>> 최종으로 VIPER를 선택함VIPER(최종선택)1. 화면단위 모듈화화면단위로 분리하여 리팩토링할 수 있기 때문에 기존 코드를 크게 수정하지 않고 새로운 구조 도입 가능2. 점진적 변환기존의 ViewController를 VIPER의 View로 변환하고, 비즈니스 로직을 Interactor로 이동시키는 방식으로 점진적이고 부분적인 전환 가능 => 전체적인 구조를 바꿀필요 없음RIBs1. RIBs는 기능 단위의 독립성을 강조하여 각 RIB이 독립적인 모듈로 작동 (부모RIB..
-
[디자인패턴 변환 코드 리팩토링- 클린아키텍쳐가 필요한 이유]취준(자소서,면접)/프로젝트 정리 2024. 8. 19. 10:40
[ MVVM과 클린아키텍쳐의 차이 ] 1. 의존성역전원칙 1) MVVM은 여전히 상위계층인 ViewModel이 하위계층인 Service와 Repository에 직접 의존 API가 변경되면 Service뿐만 아니라 ViewModel도 수정이 필요할 수 있다 [예제1] 종종 요청이 오는 에러코드 세분화를 예제로 살펴보자. * 기존에는 에러코드를 하나로 엮어서 처리함// 1. Model 정의/// 이체한도금액 조회public struct AC4192Q1OutRec: Codable { /// 등록해지구분코드-1.등록2.해지3.변경 - 1 public var RGST_CCLC_SCD: String = "" /// 1회이체한도금액 - 19 public var TM1_T..
-
[디자인패턴 변환 코드 리팩토링 - 도입배경 및 고민사항들]취준(자소서,면접)/프로젝트 정리 2024. 7. 31. 14:01
* 내가 생각해본 도입배경 (MVVM -> RIBs)1. MVVM 패턴을 도입한 이유 * 기존소스의 문제점: VC가 너무 많은 역할을 하고있다. 역할 분리가 하나도 안됨. API호출, 비즈니스로직, UI관련 작업이 전부 들어있음. 주식현재가 ViewController만 4800줄 -> 1) 소스파악: 운영업무는 잘못된 부분을 빠르게 확인해서 로직을 파악해야하는데, 특정 비즈니스로직을 확인하려면 VC를 전부 뒤져야함. 2) 수정범위: 특정 로직에 수정요청이 오면 해당 로직을 사용하는 모든 화면을 찾아서 수정해야함. ex) 주식매매부적합 확인 로직은 주식/elw/rp등 모든 상품매매..
-
[RIBs아키텍쳐를 사용한 코드 리팩토링 - 개념정리(1)]취준(자소서,면접)/프로젝트 정리 2024. 7. 30. 14:08
* 도입 배경:단순하게 데이터 조회 > 뷰에뿌려주는 조회성 화면은 MVVM패턴으로 충분하다.하지만 주문, 이체 등 비즈니스로직이 복잡하게 얽힌 화면들은 MVVM의 ViewModel이 결국 거대해지는 Massive ViewController와의 유사한 문제가 발생...>> Clean Architecture의 필요성 RIBs 아키텍처의 구성 요소Router: 네비게이션과 라우팅 로직을 처리합니다.Interactor: 비즈니스 로직을 담당합니다.Builder: 모든 구성 요소를 조립하고 의존성을 주입합니다.Dependency: 각 모듈 간의 의존성을 정의합니다.Component: Dependency의 구체적인 구현체로, 의존성을 해결합니다.Presenter: 사용자 인터페이스와 상호작용을 담당합니다.View..