전체 글 366

[PCCP 기출문제] 3번 / 충돌위험 찾기 [자바]

🧫 문제 분석✔️ 출처[PCCP 기출문제] 3번 / 충돌위험 찾기 📖 문제 그래프 탐색, 충돌 감지 문제간단하게 매 초마다 로봇을 움직이고 충돌난 곳을 찾아서 횟수를 추가하면된다.충돌의 여부는 int 배열 맵을 만들고 매 초마다 현재 위치에 +1을 한 후현재 초에 로봇이 다 움직였다면 map을 다 돌아서 1을 초과한 위치가 있다면 answer++을 해줬다. 다만 매 초마다 map을 생성한점, 매 초마다 map을 전체 순회한 점이 처리시간을 많이 잡아먹었다. 따라서 아래 리팩토리에 적었듯이 따로 queue를 만들어 개선하였다.🔅 문제 풀이import java.util.*;class Solution { // 0초 동시 출발 // r, c 둘 중 하나 이동 /// r 먼저 이동 가능 ..

programmers/Lv 2 2026.06.25

601. Human Traffic of Stadium

🧫 문제 분석 ✔️ 출처601. Human Traffic of Stadium 📖 문제+---------------+---------+| Column Name | Type |+---------------+---------+| id | int || visit_date | date || people | int |+---------------+---------+ visit_date는 이 테이블의 기본키(Unique values)입니다.이 테이블의 각 행은 경기장 방문 날짜, 방문 ID, 그리고 해당 날짜의 방문자 수를 포함합니다.id가 증가함에 따라 visit_date도 함께 증가합니다. 방문자 수(people)가 100명 이상인 날이 3일 ..

LeetCode 2026.06.21

우아한객체지향

우아한 테크 세미나중 19년도에 진행했던 우아한객체지향 by 우아한형제들 개발실장 조영호님 영상을 봤다.https://youtu.be/dJ5C4qRqAgA?si=PwXfP73Wnns32rCi 옛날 영상이지만 정말 좋은 영상이였다.객체 지향 설계를 어떻게 해야하는가? 결국에는 의존성, 연관관계가 정말 중요하다는 것을 깨달았다. 아래는 보면서 정리한 내용이다.좀 중구난방할 수도 있지만 핵심은 일단 코드를 작성하고 런타임 객체 흐름을 그려보고 연관관계를 끊어내라 의존성 관리를 위한 4가지 기본 원칙양방향 의존성을 피하라: A가 바뀔 때 B도 바뀌고, B가 바뀔 때 A도 바뀌는 양방향 관계는 사실상 하나의 클래스를 억지로 찢어놓은 것과 같다. 단방향으로 바꿔야함다중성이 적은 방향을 선택하라: 컬렉션(List..

Back-End 2026.06.19

도메인 주도 개발 시작하기 리뷰 : DDD와 의존성 역전(DIP)으로 진정한 개발자의 시선 배우기

도메인 주도 개발 시작하기를 읽고원래는 책 내용을 장별로 정리하려고 했지만, 이미 깔끔하게 정리된 자료들이 존재하여 이번 글에서는 책을 읽으며 느낀 점과 내 프로젝트를 돌아본 내용을 중심으로 작성하려고 한다. 이 책은 DDD를 통해 나와 같은 개발 초보에게 조금 더 개발자다운 시선을 열어준 책이었다. 단순히 기능을 구현하는 것을 넘어, 도메인을 어떻게 나누고 어디에 핵심 규칙을 둘 것인지 고민하게 만들었다. DDD에서는 표현, 응용, 도메인, 인프라스트럭처와 같이 관심사를 나누고, 핵심 비즈니스 규칙은 도메인 영역에 위치시킨다. 특히 애그리거트라는 개념이 인상 깊었다. 애그리거트는 관련된 엔티티와 밸류 객체를 하나의 일관성 단위로 묶은 것이며, 애그리거트 루트는 그 내부의 일관성을 지키는 책임을 가진다...

도서 2026.06.17

호텔 방 배정 [자바]

🧫 문제 분석✔️ 출처호텔 방 배정📖 문제 서로소 집합(union-find set)을 알면 매우 쉬운 문제다.k 결국에는 룸 요청은 최대 20만개이며, 우리에게는 map이 있다. map을 이용해서 서로소 집합을 만든다.단, 문제 조건에서 이미 배정되었다면 원하는 방 보다 번호가 크면서 가장 번호가 작은 방을 배정해야한다고 한다.즉, 방을 배정하고 항상 다음 방을 가리키도록하고find로 경로 압축을 하면 O(N)에 해결이 가능하다. 잘 모르겠다면 서로소 집합에 대해서 공부하자 🔅 문제 풀이import java.util.Map;import java.util.HashMap;class Solution { Map map; public long[] solution(long k, long[] ..

programmers/Kakao 2026.06.17

지게차와 크레인 [자바]

🧫 문제 분석✔️ 출처지게차와 크레인📖 문제 오랜만에 그래프 탐색 문제를 풀었다.흔한 바깥영역 판단 문제이런 문제를 풀때는 항상 주어진 맵보다 1칸 더 크게 만들면 쉽다. 원본이ABAB 이면 AB AB 이런식으로 바깥을 만들고 그래프 탐색을 해서 현재 위치가 바깥이고, 탐색한게 현재 요청한 컨테이너이면 지운다. 🔅 문제 풀이import java.util.*;class Solution { char[][] map; int n, m; int[] dr = {0, 0, 1, -1}; int[] dc = { 1, -1, 0, 0}; public int solution(String[] storage, String[] requests) { ..

programmers/Lv 2 2026.06.16

도메인 주도 개발 시작하기 - 1

최근 프로젝트를 하면서 DDD를 탑다운으로 해보았다.하지만 구현해보면서 무슨 느낌인지 알것같지만, 계속된 검증을 통해서 DDD를 하고 있지않다는 것을 알게되었다. 따라서 오늘부터'도메인 주도 개발 시작하기 : DDD 핵심 개념 정리부터 구현까지' 해당 도서로 원리부터 이해해보려고한다. 해당 책은 입문서로 가볍게 읽기 좋다고 후기들을 봤다.간단하게 어떤식인지 알아보고 더 깊게 공부하기 위해서는 Eric Evans저자의 DDD를 읽어봐야할 것 같다. 책에서 배운 내용을 간략하게 정리한다. 도메인 : 소프트웨어로 해결하고자 하는 문제 영역한 도메인은 다시 하위 도메인으로 나눌 수 있음특정도메인을 모두 구현할 필요 없고 외부 시스템을 사용할 수도 있다. 도메인 모델 : 특정 도메인을 개념적으로 표현, 도메인 자..

도서 2026.06.14

수식 최대화 : 2020 카카오 인턴십 [자바]

🧫 문제 분석✔️ 출처수식 최대화📖 문제해당 문제 설명을 직접 작성했으나 본인이 읽어도 이해가 안되게 설명했으므로 ai에게 내 설명을 넘겨 정리하여 작성하였습니다. 수식에 포함된 연산자(+, -, *)의 우선순위를 자유롭게 재정의하여 계산했을 때 나올 수 있는 결과의 최대 절댓값을 구하는 문제다.연산자 우선순위의 모든 경우의 수는 총 6가지(3!)가 존재한다. 나는 좀 특이하게 접근한거같은데 먼저 숫자와 연산자를 배열로 나눈다. 1. 인덱스 매칭의 규칙성숫자와 연산자를 분리해 각각 배열로 만들면 매우 직관적인 규칙이 성립한다.idx01234숫자10020030050020연산자-*-+Xi번째 연산자를 계산하려면, 항상 i번째 숫자와 i+1번째 숫자를 꺼내서 연산하면 된다. 2. 연속 연산 시 발생하..

programmers/Kakao 2026.06.13

괄호 변환 2020 KAKAO BLIND RECRUITMENT [자바]

🧫 문제 분석✔️ 출처괄호 변환📖 문제 구현 문제 주어진 괄호 문자열을 올바른 괄호 문자열로 변환한다.1. 주어진 문자열이 올바른 문자열 검증2. 최소 균형잡힌 괄호 범위를 구하여 u, v로 나눔2-1. u가 올바른 문자열이라면 v를 다시 1번부터 반복하고 더이상 쪼개기가 불가능하다면 u + v를 반환2-2. u가 올바르지 않다면 u의 맨 앞과 맨 뒤를 없애고, u의괄호를 다 뒤집은 뒤 '(' + v + ')' + reverseU 로 반환2-3. v는 1번부터 반복 재밌는 문제였다. 어떻게하면 괄호가 올바른 문자열인지 빠르게 구할까, 미리 메모이제이션해놓을까 했지만문자열 길이가 1000이하 이므로 굳이 하지 않았다. 실수하기 좋은게 내 풀이에서 시작을 v메서드로 시작하고, 탐색 범위를 s, e..

programmers/Kakao 2026.06.11

컨텍스트 스위칭

컨텍스트 스위칭은 쉽게 말해서 cpu에 새로운 프로세스를 등록하고 기존 것을 저장하는 것이다. 단순히 컨테스트 자체에만 오버헤드가 발생할 것이라 생각했는데이번에 공부하면서 알게된 것이 있어 정리한다.다만 이것은 멀티 프로세스에 한한다. 1. 레지스터와 PCB 교환 : 기존 프로세스의 레지스터 상태를 PCB에 저장, 새로운 프로세스의 PCB를 레지스터에 복원2. 순수 OS 오버헤드 : 교환 작업 도중 CPU는 실제 사용자 코드 실행 불가, 자원낭비 (오버헤드)발생3. 캐시 오염 : 기존 프로세스가 채워둔 캐시 데이터가 무효화되면서 쓸모가 없어짐4. 캐시 미스 발생 : 새로운 프로세스는 캐시에 데이터가 없으므로 실행 초기 많은 캐시 미스 발생, 느린 메인 메모리에 접근, 성능 저하 즉, 기존 프로세스가 c..

CS 2026.06.02