전체 글 280

백준 21610번 : 마법사 상어와 비바라기 [자바]

🧫 문제 분석 ✔️ 출처마법사 상어와 비바라기 골드 5 📖 문제구현이 확실히 재밌는 것 같다. 이동 문제에서 거리가 주어지면 방향이 -방향일때 거리가 N을 넘어가는 경우이를 나머지연산 처리해주지않으면 - 인덱스가 된다. 그외에는 구름을 삭제한 칸 체크만 해주면아주쉽게 풀 수 있는 문제다. 🔅 문제 풀이import java.beans.Customizer;import java.io.*;import java.util.*;public class Main { static int N, M; static int[][] map; static int[] dr = {0, -1, -1, -1, 0, 1, 1, 1}; static int[] dc = {-1, -1, 0, 1, 1, 1, 0, -..

백준 21609번 : 상어 중학교 [자바]

🧫 문제 분석 ✔️ 출처상어 중학교 골드 2 📖 문제 알고리즘은 잘짰는데 1번 조건을 만족하는 그룹 위치 갱신할때 최대 무지개 블록수를 한 조건문에서 안해서 계속 틀렸다. 중력은 좀 복잡하게 짰다. 아래 행부터 위로 올라가서 빈 공간을 체크하고 일반 블록을 끌어 당기는 방식이다.배열 회전은 이전 문제에서 배운대로 회전 공식을 사용하여 간단하게 구현하였다. 🔅 문제 풀이import java.beans.Customizer;import java.io.*;import java.util.*;public class Main { static int N, M; static int[][] map; static int[] dr = {0, 1, 0, -1}; static int[] dc = {-..

백준 21608번 : 상어 초등학교 [자바]

🧫 문제 분석✔️ 출처상어 초등학교 골드 5 📖 문제빈 N*N에 순서대로 학생들을 하나씩 배치한다 3번 조건을 쉽게 해결하기 위해(0,0) 부터 (N,N)까지 -> 방향으로 탐색을 시작하여 따로 조건 처리하지 않게 한다. 인접하다는 결국 상하좌우를 뜻하며빈 공간과 현재 인접한 좋아하는 학생 수를 비교해나가면서 탐색하면 된다. 인접한 좋아하는 학생을 1명도 발견 못했다면 빈칸이 제일 많은 곳을 선점한다. 인접한 좋아하는 학생수가 1명 이상이면서 탐색중 보다 더 많다면 그 자리를 선점한다. 만약 같다면 빈칸이 더 많은 곳을 선점한다. 문제 및 해결탐색하면서 기록하는 curEmpty와 curLike를 0으로 초기화해서 잘못된 자리배치가 되었다.-1로 초기화해주어 해결하였다. 🔅 문제 풀이impor..

백준 20058번 : 마법사 상어와 파이어스톰 [자바]

🧫 문제 분석 ✔️ 출처마법사 상어와 파이어스톰 골드 3 📖 문제 모든 칸을 격자로 나누고 90도 회전 후 인접한 얼음이 있는 칸이 3개 미만이면 얼음의 양이 - 1로 줄어든다 (이는 동시다발로 일어난다.) 격자 나누는걸 좀 복잡하게 구현했더니 좀 느리긴한데(700ms) 회전하는 로직만 바꾸면 충분히 빠르게 될거라고 생각된다. 찾아보니 2차원 배열 회전 공식이 있어 공부했다.참조: https://taaewoo.tistory.com/10🔅 문제 풀이import java.beans.Customizer;import java.io.*;import java.util.*;public class Main { static int N, Q, size; static int[][] map; stat..

detached entity passed to persist 해결

org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: zypt.zyptapiserver.domain.Member 테스트 코드에서BeforeEach로 Member를 생성하고 연관관계 설정후 @Test를 하던 중이상하게 JdbcTemplate에서는 발생하지않고 JPA를 사용하면 해당 예외가 터졌다. 알고보니 멤버 엔티티를 생성할때 엔티티의 ID 전략을 따로 설정해놓고 생성자에 id값을 따로 넣어주어서 충돌되어 생긴 문제였다.. JDBC는 해당 ID전략이나 엔티티에 대한 설정은 안먹히니 상관없지만JPA의 경우는 다르다. 때문에 ID 전략에 맞춰서 생성자를 쓰지 않고 롬복의 @Builder 로 생..

문제해결 2025.08.11

백준 20056번 : 마법사 상어와 파이어볼 [자바]

🧫 문제 분석 ✔️ 출처마법사 상어와 파이어볼 골드 4 📖 문제 뭔가 생각보다 어려웠다. 항상 짜잘한거에서 틀려서 그렇지 전체적인 로직은 잘 짰다. 어려웠던것중첩 파이어볼을 어떻게 저장해놓을까 -> List[][] 로 처리하면 시간복잡도는 괜찮은가, K만큼 재생성해야함 -> O(K)중첩 파이어볼은 어떻게 처리할까-> 위에 저장한 파이어볼 식별값을 사용해 한번에 더한 다음 연산후 처리 소멸조건에서if (sumM/5 == 0)을 비교해야하는데 sumM을 비교해서 틀렸다. 이것만 빼면 다른 로직은 다 정상작동했다. 🔅 문제 풀이import java.beans.Customizer;import java.io.*;import java.util.*;public class Main { static int ..

JPA OneToOne LAZY 미적용 문제

JPA를 사용해서 Member를 조회하는데이상하게 fetch LAZY로 설정한 연관관계 엔티티까지 전부 left join으로 가져오는 현상이 발생했다. 도저히 모르겠어서 인터넷을 좀 찾아본 결과 한 블로그에서 해답을 찾을 수 있었다. OneToOne 연관관계에 해당하는 문제였다.OneToOne은 연관관계 주인은 연관관계 대상 엔티티의 key를 알고있지만대상인 엔티티는 연관관계 주인의 key 값을 알 수 없다. 따라서 Member는 연관관계 주인인 SocialToken 이나 Level_exp 의 키 값을 알 수 없기에각각 select 쿼리를 보내야하는데 JPA가 최적화하여 한번에 조인해서 가져오는 것이다. 즉, 이때문에 LAZY로 설정해도 무시되고 EAGER로 처리되는 것이다. 해결방법은 단방향 사용 o..

문제해결 2025.08.10

백준 20061번 : 모노미노도미노 2 [자바]

🧫 문제 분석 ✔️ 출처모노미노도미노 2 골드 2 📖 문제 게임 개발하는 거 같아 좀 재밌었다. 빨간 칸에 입력으로 주어지는 좌표와 도형 형태를오른쪽, 아래로 2개의 도형이 내려가는 형태의 테트리스 같은 게임이다. boolean 2차원 타입으로 현재 테트리스 상태를 저장한 라인이 전부 도형 즉, 가득 찬 상태는& 연산자를 통해서 확인 연한 색의 부분은 라인 개수를 세고 그 개수만큼 띄어서 옮기기 🔅 문제 풀이import java.io.*;import java.util.*;import java.util.stream.IntStream;public class Main { // 20061번 모노미노도미노 2 // 블록은 한번 보드 위에 놓이면 다른 블록과 합쳐지지 않음 // 1. 점수를..

백준 17822번 : 원판 돌리기 [자바]

🧫 문제 분석 ✔️ 출처원판 돌리기 골드 2 📖 문제 문제가 이해가 되는듯 안되는 문제였다. 진행 프로세스인데2번줄부터 이해가 안간다. 인접하면서 수가 같은 것을 모두 찾는다 -> 돌려진 상태에서 모든 원판의 인접하면서 수가 같은 것을 모두 찾는다.그러한 수가 있는 경우 -> 인접하면서 수가 같은 게 1개라도 있는 경우없는 경우 -> 인접하면서 수가 같은게 1개도 없는 경우원판에 적힌 수의 평균 -> 모든 원판에 적힌 수의 평균 평균보다 큰 수에서 -1, 작은거에서 +1문제에서는 당연히 소수점을 버린다는 말이 없었는데 내 멋대로 소수점을 버려서 예제 마지막이 실패했다.평균을 소수점을 포함해서 비교해야한다. 🔅 문제 풀이import java.io.*;import java.util.*;public..

Real MySQL 8.0 [실행계획]

대부분 DBMS는 많은 데이터를 안전하게 저장 및 관리 사용자가 원하는 데이터 빠르게 조회가 주 목적 이를 달성하기 위해 옵티마이저가 사용자의 쿼리를 최적으로 처리될 수 있게 하는 쿼리의 실행 계획을 수립할 수 있어야함 EXPLAIN 명령으로 옵티마이저가 수립한 실행 계획 확인 MYSQL 5.7버전까지 테이블과 인덱스에 대한 개괄적인 정보를 가지고 실행계획을 수립함 8.0부터 히스토그램 도입 히스토그램 : 인덱스되지 않은 칼럼들, 인덱스된 칼럼들의 데이터 분포도 통계 정보는 단순히 인덱스된 칼럼의 유니크한 값의 개수 정도만 가져 옵티마이저가 최적의 실행계획을 수립하기에는 많이 부족 실제 인덱스의 일부 페이지를 랜덤으로 가져와 참조하는 방식 사용 8.0부터 칼럼 데이터 분포도를 참조 가능한 히스토그램 정보..

Back-End/DB 2025.07.28