구현 7

백준 5639번 : 이진 검색 트리 [자바]

🧫 문제 분석 ✔️ 출처이진 검색 트리 골드 4 📖 문제 노드가 최대 1만개 이며, 완전 이진 트리가 아니기 때문에 한쪽으로 치우쳐진 트리가 될 수 있다.이때 최대 인덱스는 iₙ = 2 * iₙ₋₁ + 1 점화식으로 증가하며, 1만번 반복되므로 상상을 초월하는 값이 나오기 때문에  절대로 배열로 해서는 안된다.  1~10까지를 순서대로 넣게되면1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047로 약 2^11 - 1 까지 커진걸 확인할 수 있다.  즉, 최대 1만개 노드라면 2^10000 - 1 까지 커질 수 있다. 따라서 노드 객체를 만들고 좌우에 노드를 연결하는 방식으로 접근해야한다. 자바에서는 객체의 주소 값을 복사하기 때문에 . 연산자로 접근해서 객체를 생성하여 ..

백준 14719번 : 빗물 [자바]

🧫 문제 분석 ✔️ 출처빗물 골드 5 📖 문제 좀 헤맸던 문제다. 높이가 같거나 큰 것 중 작은 거를 기준으로 빗물을 담으면 되는데뭐를 기준으로 할 지가 문제였고, 높이가 줄어드는 형태에서도 문제였다.예제의 4 1 1 2 이 줄어드는 형태다. 각 블록을 기준으로왼쪽 오른쪽으로 같거나 큰 것을 찾는 거로 할려다가 중복 문제가 있어서 깔끔하게 버리고 왼쪽에서부터 기준을 잡고 오른쪽 포인터를 움직이면서왼쪽 포인터의 실제 값보다 작으면 스택에 담아두고 오른쪽 포인터의 실제값이 왼쪽보다 크거나 같으면  왼쪽 값과 오른쪽 값중 더 작은 것을 min값으로 설정하고스택에 넣었던 작은 블록들을 꺼내서 min - stack.pop() 한 값을 answer에 누적합한다.  문제는 높이가 줄어드는 형태인데이 경우 스택을 ..

baekjoon 2025.03.13

다리를 지나는 트럭 [자바]

🧫 문제 분석✔️ 출처다리를 지나는 트럭 level 2📖 문제 2번 재시도 끝에 풀은 문제다.  처음 시도에는 다리 위에 올라간 트럭이 경과한 시간을 잘 못 설계해서 계속 틀렸다.  두 번째 시도는 조건문 하나를 추가하지 않아서 틀렸었다. 4,5,6,9번  다리위에 있는 트럭을 제거해야하는 경우의 수는1. 다리에 트럭이 현재 올라갈 수 있는 트럭 최대 갯수만큼 있는 경우2. 새로운 트럭이 올라간다 했을 때 무게 하중을 넘어가는 경우3. 위 두 경우와는 별개로 다리의 맨 앞 트럭이 다리를 다 건너(시간이 지나) 빠져나가는 경우 이 세가지 경우에 대해서 트럭을 잘 빼준다면 문제없이 쉽게 풀 수 있을 것이다.  나는 3번을 안해서 계속 틀렸었다.. 🔅 문제 풀이import java.util.*;class..

programmers/Lv 2 2025.02.04

혼자서 하는 틱택토 [자바]

🧫 문제 분석✔️ 출처혼자서 하는 틱택토 level 2📖 문제 단순 구현 문제인듯 하다. 간단하다. 머쓱이가 잘못 둔것과 별개로 그저 현재 주어진 게임판이 나올수 있는 게임 상황인지 아닌지만 판단하면 된다.  내가 생각했을 때 나올 수 없는 상황을 생각해봤다.  나올 수 없는 상황O의 개수 - 2 >= X 개수 O의 개수 O가 빙고했는데 X의 개수가 O와 같거나 클때X가 빙고했는데 O의 개수가 클때O 빙고가 우선권을 가짐 (O 빙고와 X빙고 둘다 있을 경우)  처음 O와 X의 개수를 구하고 위 2가지 경우에 대해서 체크한다음 이상이 없다면가로, 세로, 대각선 빙고를 체크해서 아래 2가지 경우에 대해서 체크한다.  🔅 문제 풀이class Solution { // 나올 수 없는 상황 // O..

programmers/Lv 2 2025.01.14

스프링 고급편 - 스프링 AOP 구현

✔️ 구현@Slf4j@Aspectpublic class AspectV1 { @Around("execution(* hello.aop.order..*(..))") public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[log] {}", joinPoint.getSignature()); return joinPoint.proceed(); }}AspectV1을 만든다. @Around : 포인트 컷 부분에 해당* 모든 타입, hello.aop.order 패키지와 그 하위 패키지(..)를 지정 // 자세한건 다음 포스트에서 설명@Around가 달린 메서드 doLog는 어드바이스가 된다.  ..

백준 16918번 : 봄버맨 자바

🧫 문제 분석 ✔️ 출처봄버맨 실버 1 📖 문제 그래프를 써야할것 같은 느낌이 솔솔 느껴진다.그러나 DFS / BFS 문제는 아니다. 문제에서 '연쇄 반응이 없다' 하였다. 문제 실행 단계0. 초기상태 (폭탄이 미리 심어져있음)1. 아무것도 안한다.2. 모든칸에 폭탄 설치3. 3초전 설치된 폭탄 모두 폭파  4. 2번 부터 반복  초로 예시를 보면  0초 : 초기 상태1초 : 아무것도 안함2초 : 모든 칸에 폭탄 설치3초 : 3초전에 설치된 폭탄 모두 폭파 (0초 때 설치한 폭탄들)         - 이때 폭파되지 않은 부분이 다음 초기상태 (0초때 설치한 폭탄들)가 된다.4초 : 모든 칸에 폭탄 설치5초 : 3초전 설치된 폭탄 모두 폭파    0 과 1로 폭탄을 구분하여 설명하자면먼저 0초때에 초기..

baekjoon 2024.07.03

큐(queue)와 덱(deque)

✔️ 큐(queue)먼저 들어온 데이터가 먼저 나가는 자료구조선입 후출 : FIFO First-In Frist-Out  예시 : 식당에서 먼저 주문한 사람이 먼저 음식을 받는다. 큐에는 선형 큐와 원형 큐가 있다. 선형 큐는 배열처럼 일자 데이터 구조이고 원형 큐는 처음과 끝이 연결되어있는 데이터 구조이다.  ❗ 선형 큐의 문제점    dequeue()로 요소를 꺼내면 맨 앞자리가 비어있기 때문에 이를 채우기위해 뒤의 모든 요소들을 한 칸씩 앞으로 땡겨야    하기에 효율적이지 않다.   프로그램 상에서 어떻게 원형 큐를 구현할까?우리는 아주 좋은 %(나머지 연산)을 알고 있다. (마지막인덱스 + 1) 자리로 인덱싱 접근이 오면 % (큐의 크기) 연산을 해주어서 다시 맨 앞자리에 접근하게 한다. 이를 통..

CS/자료구조 2024.07.02