본문 바로가기

분류 전체보기188

[알고리즘] 카드 짝 맞추기(프로그래머스) 코드 동작 및 알고리즘 설명1. 최단 경로 탐색 (firstRoute 함수)카드 선택 과정에서 커서 이동은 매우 중요합니다.이동은 두 가지 방식으로 가능하는데, 한 칸씩 이동하는 방법과 Ctrl+방향키를 이용해 한 번에 여러 칸 이동하는 방법입니다.이를 위해 **BFS(너비 우선 탐색)**를 사용하여 현재 위치에서 목표 위치까지의 최소 이동 횟수를 구합니다.1-1. 행 이동 (goRow)목적: 현재 위치의 행에서 목표 행까지 이동할 때, 한 칸 이동과 Ctrl 이동(빈 칸 건너뛰기)을 모두 고려합니다.동작 방식:시작점에서 시작하여, 상하 두 방향(dir이 1 또는 -1)으로 인접한 칸으로 이동할 수 있는지 확인합니다.또한, 연속된 빈 칸들을 뛰어넘어 카드가 있는 칸 또는 보드 끝까지 이동할 수 있도록 w.. 2025. 2. 8.
[알고리즘] 징검다리 건너기 (프로그래머스) 징검다리 건너기 - 프로그래머스 Level 3문제 접근 방식이 문제의 핵심은 "k 크기의 구간에서 최대값을 찾고, 그 최대값들 중 최소값을 찾는 것"입니다. 이는 다음과 같은 의미를 가집니다:k 크기 구간의 최대값: 해당 구간을 건널 수 있는 최대 인원 수모든 구간의 최대값들 중 최소값: 전체 징검다리를 건널 수 있는 최대 인원 수해결 방법 - 최적화된 풀이import collectionsdef solution(stones, k): if len(stones) == k: return sum(stones) d = collections.deque() res = float('inf') for ind in range(len(stones)): # 1. 현재 윈도우를 벗.. 2025. 2. 7.
[SpringBoot] BE관점에서 채팅에 관련한 고민들 (설 맞이 해커톤 2일차) 채팅과 관련된 기능을 구현할때 생겼던 고민들을 정리한 블로그 입니다.  1. 채팅은 항상 WebSocket으로 진행되어야 할까?채팅은 웹 소켓으로 만진행되지 않아도 될 것입니다. 이유는 Polling같은 실시간성을 갖게 하는 방법을 추가하면 된다고 생각했습니다. 근본적으로 어떤 DataSource를 서버에 요청하게 되면 서버는 적절한 자원을 Client에게 전달해 줄 것입니다. 이러한 Feature를 근본으로 두면 꼭 WebSocket으로 하지 않아도 됩니다.  (1) Polling으로 해결할 수 있는 채팅의 장단점장점으로서는 간편한 구현, 단점으로서는 주기가 짧으면 서버에 오버헤드 발생, 주기가 길다면 실시간성이 떨어짐. 명확한 장단점을 갖고 있습니다. 이를 해결하기 위해 LongPolling이라는 기.. 2025. 1. 30.
[SpringBoot] 폴더링에 관련해서 (설 맞이 해커톤 1일차) 이번에 프로젝트하면서 폴더링 고민을 했습니다. 고민내용은 다음과 같습니다.   1. 폴더링을 어떻게 가져갈까?일단 폴더링을 어떻게 가져갈까에 대해서 고민했습니다. 정통적인 방식인 controller, domain, service로 분리를 하였습니다. 실제로 분리하면 다음과 같은 폴더 구조가 생성됩니다.  (1) 진입 폴더에 Controller, Domain, Dto, Service, Repository, Entity 분리  상기 폴더링은 이전 프로젝트에서 했던 폴더링이었습니다. 위와같은 폴더링은 폴더 하나에 너무많은 파일이 응집되어 있어 찾기 불편하다는 점 이었습니다. 예를 들어 HealthCheck Controller 와 TODO Controller를 하나의 폴더에서 관리하는 것이 응집성을 떨어뜨린다고.. 2025. 1. 29.
[Spring] Spring IoC 컨테이너와 빈에 대한 소개 (day2) Spring IoC 컨테이너와 빈에 대한 소개이 장에서는 Inversion of Control(IoC) 원칙에 대한 Spring Framework의 구현 방식을 다룹니다. Dependency Injection(DI)은 IoC의 특화된 형태로, 객체가 자신의 의존성(즉, 함께 작동하는 다른 객체)을 생성자 인자, 팩토리 메서드 인자, 또는 객체 인스턴스가 생성된 이후나 팩토리 메서드에서 반환된 후에 설정되는 속성을 통해 정의합니다. 그런 다음 IoC 컨테이너가 빈을 생성할 때 이러한 의존성을 주입합니다. 이 과정은 본래의 객체가 클래스의 직접적인 생성이나 Service Locator 패턴과 같은 메커니즘을 사용해 의존성의 생성 또는 위치를 제어하는 방식과 반대되기 때문에 Inversion of Contro.. 2025. 1. 24.
[Java] @FunctionalInterface를 활용해서 깔끔한 코드 작성해보기 짧 주의 문제 상황: swift 처럼 callback함수를 통해 코딩하고 싶었는데 어떻게 할 방법이 없었음, 그래서 Function이라는 함수를 사용했는데 다음과 같은 문제점이 있었음1. callback에서 직접 throw를 처리해야함. 즉 callback에서 throw를 넘기지 못하는 문제가 발생ㅎ2. 너무나 많은 try - catchblock때문에 정신없음  As is실제 어지럽게 작성한 코드. Function로 어거지로 해결하려다가 가독성 및 제대로 수행하지 못하고 에러가 난 모습을 볼 수 있습니다. private T createPreparedStatement(String sql, Function executor) throws SQLException { try ( Conn.. 2025. 1. 23.