[항해 플러스 LITE 1기] 서버 구축(3주차)
·
TIL
알게 된 점아키텍처란?코드의 큰 그림이자, 팀 전체가 공유해야 할 변경 난이도 높은 의사결정의 집합임을 실감했다.속도가 느려지는 원인프로젝트가 커질수록 구조적 부채가 누적되고, 설계 원칙과 패턴을 활용해야 유지보수가 수월해진다.SOLID & TDD‘유지보수하기 쉬운 구조’를 위한 최소 단위 습관이다. 원칙을 인지하고 적용해야 의미가 있다는 점을 배웠다.아키텍처 진화Layered → Hexagonal → Clean 아키텍처로 갈수록 도메인 독립성이 높아지고, 테스트와 확장 편의성도 함께 커진다.현실적으로는 기존 구조(Layered) 위에 Clean 원칙을 점진적으로 도입하는 리팩터링 전략이 많이 쓰인다.SOLIDSRP : 한 클래스는 하나의 이유로만 변경해야 한다.OCP : 기존 코드 변경 없이 확장이 가..
[항해 플러스 LITE 1기] 서버 설계(2주차)
·
TIL
콘서트 예약 서비스 설계2주 차에는 콘서트 예약 서비스의 설계와 초기 세팅, 그리고 문서화 작업을 진행했다.이번 프로젝트의 주요 요구사항과 설계 과정에서 고민했던 점, 그리고 앞으로의 개선 방향을 정리했다프로젝트 요구사항이번 과제에서는 아래와 같은 기능을 구현해야 합니다.유저 토큰 발급 API서비스를 이용하기 위해 유저별 대기열 토큰을 발급한다. 이 토큰에는 유저의 UUID와 대기 순서, 잔여 시간 등 대기열 관리에 필요한 정보가 포함된다. 모든 API는 이 토큰을 통해 대기열 검증을 통과해야 이용할 수 있다.예약 가능 날짜/좌석 API예약 가능한 날짜 목록과, 각 날짜별로 예약 가능한 좌석(1~50번)을 조회하는 기능을 제공한다.좌석 예약 요청 API날짜와 좌석 정보를 입력받아 좌석을 임시로 예약한다...
[TIL] 백준 11060 - 점프 점프 ( python )
·
TIL
📌 문제 탐색하기N : 배열의 크기 ( 1 ≤ N ≤ 1,000 )A : 크기가 N인 배열 (0 ≤ Ai ≤ 100) 인덱스 i에 있는 숫자 A[i]는 최대 A[i]칸까지 오른쪽으로 점프 가능합니다.시작점은 0번 인덱스이고, 도착점은 N-1번 인덱스이며, 가장 오른쪽 칸에 도달하기 위한 최소 첨프 횟수를 구하는 것이 핵심입니다. 가능한 시간복잡도각 칸에서 가능한 점프 범위만큼 다음 칸들을 순회하면서 최소 점프 횟수를 갱신합니다.이 과정에서, 각 칸에서 최대 A[i]번 반복하게 되며, 문제 조건에 따라 A[i]는 최대 100입니다.외부 반복문은 0부터 N-1까지 순회하므로 O(N)내부 반복문은 각 i마다 최대 A[i]번 수행하므로, O(A[i])전체 시간복잡도는 O(N × K)이며, 여기서 K는 max(..
[TIL] 백준 13702 - 이상한 술집 ( python )
·
TIL
📌 문제 탐색하기N : 막걸리 주전자 개수 ( 1 ≤ N ≤ 10,000)K : 친구 수 ( N ≤ K ≤ 1,000,000 )막걸리 용량 : 0 ≤ 용량 ≤ 2³¹ - 1 K명의 사람에게 각 주전자의 막걸리를 섞지 않고 동일한 용량(x ml)씩 나눠주려고 할 때, 가능한 용량(x)의 최댓값을 구하는 것이 핵심입니다.가능한 시간복잡도이분탐색각 주전자마다 serving 가능한 개수를 계산 → O(N)가능한 용량(x)의 범위는 1부터 max(rice_wines) (최대 약 2³¹)까지 → 대략 O(log(max(rice_wine)))총 시간 복잡도 : O(N × log(max(rice_wine)))N 최대 10,000, max(rice_wine)가 2³¹ 정도이므로, log(2³¹) = 약 31회 정도 반..
[TIL] 백준 25418 - 정수 a를 k로 만들기 ( python )
·
TIL
📌 문제 탐색하기A, K : 양의 정수 조건연산 1: A에 1을 더한다.연산 2: A에 2를 곱한다.위의 조건을 반복적으로 적용하여 A를 K로 만드는 최소 연산 횟수를 구하는 것이 핵심입니다. 1 ≤ A  K ≤ 1,000,000가능한 시간복잡도A부터 조건 탐색A에서부터 연산을 적용한 결과들을 차례대로 탐색하면서 최소 횟수로 K에 도달하는 경로를 찾습니다.K와 A의 차이가 커질수록, A가 작고 K가 1,000,000에 가까운 경우에는 탐색해야 할 상태의 수가 많아집니다.최악의 경우 O(K - A) 이상의 노드를 탐색할 수 있습니다.K부터 조건 탐색K가 항상 A보다 큰 값이기 때문에 분할 연산을 적용할 수 있는 경우가 많습니다.여러 번 K를 절반으로 줄여 빠르게 A에 접근할 수 있습니다.K가 지수적으로 ..
[TIL] 백준 2467 - 용액 ( python )
·
TIL
📌 문제 탐색하기N = 전체 용액의 수solutions = 용액의 특성값 저장하는 배열 산성 용액과 알칼리성 용액 각각에 대해 정수값(산성: 양수, 알칼리: 음수)이 있습니다.두 개의 서로 다른 용액을 혼합했을 때 그 합이 0에 가장 가까운 두 용액을 찾는 것이 핵심입니다. 찾은 두 용액의 특성값을 오름차순으로 출력해야 합니다.산성 용액끼리 혹은 알칼리성 용액끼리 혼합하는 경우도 고려해야 합니다. 2 ≤ N ≤ 100,000-1,000,000,000 ≤ 각 용액의 특성값 ≤ 1,000,000,000가능한 시간복잡도브루트 포스(완전 탐색):모든 가능한 쌍을 계산하면 N(N-1) / 2 입니다.N이 최대 100,000이면 대략 100,000 * 99,999 = 10^10 이고, 2로 나누면 5 * 10^9..
[TIL] 백준 2805 - 나무 자르기 ( python )
·
TIL
📌 문제 탐색하기 N : 나무 개수, )M : 가져가야 할 나무 길이trees : N개의 나무 높이 리스트  상근이는 최소 M미터의 나무를 가져가기 위해 나무를 일정 높이에서 잘라야 합니다.필요한 나무를 가져갈 수 있는 절단기 높이의 최댓값을 구하는 것이 핵심입니다.잘린 나무의 길이의 합이 M 이상이어야 하며, 절단기의 높이를 조정하면서 가장 높은 값을 찾아야 합니다.  1 ≤ N ≤ 1,000,0001 ≤ M ≤ 2,000,000,0001 ≤ 나무 높이 ≤ 1,000,000,000가능한 시간복잡도완전탐색0부터 제일 길이가 긴 나무(max(trees)까지 모든 절단기가 자를 나무의 높이를 순회하면서 자른 나무의 길이를 계산합니다.최악의 경우max(trees) = 1,000,000,000N = 1,000..
[TIL] 백준 17266 - 어두운 굴다리 ( python )
·
TIL
📌 문제 탐색하기N : 굴다리의 길이M : 가로등의 개수x : 가로등의 위치 길이 N인 일직선 상에서 M개의 특정 지점이 주어집니다. 각 지점을 중심으로 일정한 거리를 덮을 수 있는 가로등이 있습니다.모든 구역(0 ~ N)을 덮을 수 있도록 가로등을 설치할 때, 최소한의 가로등 길이를 구하는 것이 핵심입니다. 1 ≤ N ≤ 100,0001 ≤ M ≤ 100,0001 ≤ x[i] ≤ N가능한 시간복잡도브루트 포스 ( 완전 탐색 )최악의 경우: N * M = 100,000 * 100,000 = 10^10 (시간 초과)완전 탐색은 O(N * M), 시간 초과 가능성이 매우 큽니다.이진 탐색 접근최솟값과 최댓값을 기준으로 이진 탐색을 수행합니다.중간값에 대해 모든 가로등의 지점을 순회하면서 영역을 덮을 수 있..