[알고리즘] 코드트리 청약 챌린지 5주차 - DP(동적계획법) 학습 후기
·
Programming/알고리즘, 자료구조
이 글은 코드트리 청약통장 챌린지에 참여하여 작성한 학습 후기입니다. 챌린지 링크 👉 https://www.codetree.ai/ko/no-free-lunch-20261. 5회차 미션 확인이번 5회차 미션은 "차근차근 약점 집중 돌파" 입니다.갭체크 진단 결과를 바탕으로 추천받은 챕터를 학습하거나, 평소 약했던 유형을 직접 선택해 레슨 1개 이상을 완료하는 것이 이번 주 핵심 목표입니다.이번 주는 동적 계획법(DP) 을 직접 선택해 집중적으로 학습했습니다. DP는 백엔드 개발을 하면서 실무에서 직접 쓸 일이 많지 않다 보니 계속 미뤄왔던 유형인데, 이번 기회에 제대로 잡아보기로 했습니다.2. 코드트리 커리큘럼 구조코드트리는 단순히 문제만 나열하는 방식이 아니라, 기본 → 연습 → 테스트 3단계로 구성된..
[알고리즘] 코드트리 청약 챌린지 4주차 후기
·
Programming/알고리즘, 자료구조
이 글은 코드트리 청약통장 챌린지에 참여하여 작성한 학습 후기입니다. 챌린지 링크 👉 https://www.codetree.ai/ko/no-free-lunch-20261. 챌린지 소개 및 참여 계기코드트리에서 진행하는 2026 청약통장 챌린지는 매주 꾸준히 알고리즘 문제를 풀고 블로그에 학습 기록을 남기는 방식으로 진행되는 코딩 챌린지입니다. 저는 이미 진행 중인 챌린지에 4주차부터 합류하게 되었습니다.백엔드 개발자로 일하다 보면 실무에서 알고리즘을 직접 쓸 일이 많지 않다고 느낄 수 있습니다. 그런데 어느 순간 문제를 효율적으로 해결하는 능력, 즉 사고하는 방식 자체가 코드 품질에 영향을 준다는 걸 체감하게 되었습니다. 쿼리 최적화, 데이터 구조 선택, 시스템 설계 등 결국 알고리즘적 사고가 바탕이 ..
[Spring] Spring Security로 중복 로그인 방지 구현하기 — DB 세션 ID 비교 방식
·
Programming/Spring
들어가며 — 이 기능을 왜 만들게 됐을까?시스템을 운영하다 보면 생각보다 자주 마주치는 상황이 있습니다.> "선생님, 저 지금 로그인이 안 돼요."> "어? 저도요."알고 보면 퇴근할 때 로그아웃을 안 하고 나간 직원 덕분에 세션이 살아있거나, 같은 아이디를 여러 대의 PC에서 공유해서 쓰고 있는 경우입니다. 특정 도메인의 업무 환경 특성상 여러 기기에서 동시 접속하려는 니즈가 있었고, 보안 기준 강화에 따라 동시 로그인 통제 요구사항이 추가되었습니다이번에 개발하는 시스템은 SSO(Single Sign-On) 연동해서 인증을 처리하는 구조였는데, "동일한 계정으로 여러 곳에서 동시 접속하는 것을 막아달라" 는 요구사항이 생겼습니다. 이 글에서는 그 과정에서 고민했던 것들과 최종적으로 선택한 구현 방식을 ..
[Docker] 도커란? - 도커 개념 정리
·
DevOps/Docker
도커란?도커(Docker)는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트 입니다. 도커는 일반적으로 도커 엔진(Docker Engine) 혹은 도커에 관련된 모든 프로젝트를 말합니다. 도커 엔진(Docker Engine)은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트 입니다. 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀더 효율적으로 사용하기 위한 것에 불과하기 때문에 도커의 핵심은 도커 엔진이라고 할 수 있습니다. Virtual Machine(가상머신) vs Docker Container(도커 컨테이너)기존에도 가상화 기술은 존재해..
백준 11866 - 요세푸스 문제 0 (Java)
·
Programming/알고리즘, 자료구조
📌 문제문제명백준 11866 - 요세푸스 문제 0Linkhttps://www.acmicpc.net/problem/11866분류미정난이도S4풀이 일자2025-06-08 📌 문제 탐색하기문제 접근 방법Queue의 자료구조만 이해하고 있다면 쉽게 풀 수 있는 문제Queue는 list형태이지만 뒤로 삽입이 가능하다는 특징이 있기 때문에뽑아낼 숫자가 아니면 다시 뒤로 넣어주고 찾는 숫자만 뽑아내면 된다.동작N과 K가 주어졌을 때 1부터N까지 Queue에 숫자를 담아 만들고징검다리를 건너듯 K번째에 해당하는 값만 poll()처리를 하는 것이다.K번째가 아닌 값은 poll()처리를 하되 변수 temp에 저장 하고 다시 que.add(temp)를 실행📌 코드 설계하기1. n과 k 입력받기2. queue에 숫자를 ..
백준 2193 - 이친수 (Java)
·
Programming/알고리즘, 자료구조
📌 문제문제명백준 2193 - 이친수Linkhttps://www.acmicpc.net/problem/2193분류미정난이도미정풀이 일자2025-06-07 📌 문제 탐색하기문제 접근 방법점화식 기반의 DP로 문제 풀기 /* * dp[i]는 i자리 이친수의 개수 * 이친수는 '1'이 연속해서 두 번 나올 수 없으므로, * i번째 자리에 1이 오는 경우 → i-1번째 자리에 반드시 0이 있어야 함 → dp[i-2] * i번째 자리에 0이 오는 경우 → i-1번째 자리에 0 또는 1이 가능 → dp[i-1] * 따라서 점화식: dp[i] = dp[i-1] + dp[i-2] */📌 코드 설계하기1. 자리수 입력 받기2. 점화식 세우기3. 반복문 생성 4. 결과값 출력📌 시도 회차 수정 사항 (Optional..
백준 2303 - 숫자 게임 (Java)
·
Programming/알고리즘, 자료구조
📌 문제문제명백준 2303 - 숫자 게임Linkhttps://www.acmicpc.net/problem/2303분류미정난이도미정풀이 일자2025-06-06 📌 문제 탐색하기문제 접근 방법이 문제는 완전탐색(브루트포스)에 대한 문제이고 아래와 같이 접근하기1. 모든 사람에 대해 5장의 카드 중 3장을 선택하는 모든 조합을 구하기2. 각 조합마다 합의 일의 자리(즉, % 10)를 계산3. 각 사람의 최고 점수를 저장한 뒤, 전체 사람 중 가장 높은 점수를 가진 사람의 번호 찾기📌 코드 설계하기1. 사람의 수 및 카드 입력 받기2. 반복문을 통해 완전탐색(브루트포스) 3. 각 사람마다 최고 점수를 비교해 가장 높은 사람(동점일 땐 번호 큰 사람)을 선택 📌 시도 회차 수정 사항 (Optional)없음..
백준 5567 - 결혼식 (Java)
·
Programming/알고리즘, 자료구조
📌 문제문제명백준 5567 - 결혼식Linkhttps://www.acmicpc.net/problem/5567분류미정난이도S2풀이 일자2025-06-05 📌 문제 탐색하기문제 접근 방법초대 조건 1. 상근이의 친구2. 상근이의 친구의 친구그래프를 구성하여 BFS(너비우선탐색)으로 구현하면 될것 같다. BFS 구현시 조건으로 상근이의 친구의 친구까지만 초대 카운트를 세우는 방향으로!📌 코드 설계하기1. 사람의 수, 리스트 길이 입력 받기2. 그래프를 구현하기 위해 list 초기화 및 간선 연결3. BFS 구현4. 중복 방지 배열을 체크하면서 카운트 증가5. 결과값 출력📌 시도 회차 수정 사항 (Optional)없음📌 정답 코드package org.example.day18;import java.io...
백준 2204 - 도비의 난독증 테스트 (Java)
·
Programming/알고리즘, 자료구조
📌 문제문제명백준 2204 - 도비의 난독증 테스트Linkhttps://www.acmicpc.net/problem/2204분류미정난이도B1풀이 일자2025-06-04 📌 문제 탐색하기문제 접근 방법문제 핵심은 대소문자 구분없이 정렬은 하는것인데..자바에서는 Comparator에 String.CASE_INSENSITIVE_ORDER 를 전달하면 대소문자 구분없이 정렬합니다.String.CASE_INSENSITIVE_ORDER📌 코드 설계하기1. 무한루프 반복문 생성2. 테스트 케이스 수 입력 받기3. 단어를 입력할 배열을 초기화하고 배열에 삽입4. 대소문자 구분없이 정렬5. 0일때 반복문 탈출하고 결과값 출력📌 시도 회차 수정 사항 (Optional)없음📌 정답 코드package org.examp..
백준 2644 - 촌수계산 (Java)
·
Programming/알고리즘, 자료구조
📌 문제문제명백준 2644 - 촌수계산 Linkhttps://www.acmicpc.net/problem/2644분류그래프이론난이도S2풀이 일자2025-06-03 📌 문제 탐색하기문제 접근 방법지난 문제와 비슷하게 그래프의 거리를 구하는 문제이다 사람들 간의 부모- 자식 관계를 입력 받고, 두 사람 사이의 촌수(그래프 상의 거리) 구하기1. 입력을 통해 그래프를 구현하고 2. 방문 확인을 위한 visited 배열 필요3. 그래프의 거리를 구하기 위해선는 BFS 또는 DFS 알고리즘을 구현해야하는데 거리 계산(최단 거리를 찾는것)는 BFS(너비 우선 탐색)이 적합 하기에 BFS를 사용하기 📌 코드 설계하기1. 입력 받기(전체 사람의 수 - n, 촌수 계산 번호 - start end, 관계대수 - m )..