분류 전체보기 319

주사위 고르기 [자바]

🧫 문제 분석✔️ 출처주사위 고르기 level 3📖 문제 많은 공부가 된 문제다.. 문제 풀이 방법까지는 잘 도출했는데 정작 최대 5개를 뽑았을때주사위의 눈의 합을 구하는 법에서 막혔다. 문제는 너무 많은 생각이라고 생각한다. 나오는 모든 합에 대하여 카운트를 해주려다가 이건 또 너무 복잡하고머리가 잘 안돌아갔다. 이번에 알게된 것 N개의 조합의 모든 합 구하기dfs로 짜는 것 까진 했는데 정작 어떻게 더해야할지 감이 안잡혔다. 근데 그냥 하나하나씩 주사위를 건드리면 됐다.1번 주사위의 i번째 + 2번 주사위의 i번째.. 이런식으로 잘 기억해두자.. 이분 탐색최대 개수를 구할때는 size() 까지 해줘해한다는 것 처음에 탐색 범위를 0 ~size()-1 까지로 했는데12번 테스트 케이스가 계속..

programmers/Kakao 2025.09.05

Real MySQL 8.0 [실행계획 : Extra 칼럼]

내용이 많아 따로 글을 나눠서 작성한다. Extra 칼럼쿼리 실행 계획에서 성능에 관련된 중요한 내용이 자주 표시됨 const row not foundconst 접근 방법으로 테이블을 읽었지만 실제로 해당 테이블에 레코드가 1개도 없다면 표시Deleting all rows 테이블의 모든 레코드를 삭제하는 기능을 제공하는 경우 (Where 없이 모두 삭제)8.0부터 삭제되고, where 없이 삭제를 권장하지 않음, Truncate Table 사용distinct중복제거, 중복된 값들은 읽지 않고 무시함 FirstMach(table)IN(subquery) 형태의 세미 조인 을 EXISTS(subquery) 형태로 튜닝한 것과 비슷하게 실행되며, 서브 쿼리를 조인으로 처리하며, 일치하는 레코드 1건만 찾으면 더..

Back-End/DB 2025.09.03

Real MySQL 8.0 [실행계획]

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

Back-End/DB 2025.09.01

백준 2253번 : 점프 [자바]

🧫 문제 분석 ✔️ 출처점프 골드 4 📖 문제 dp 문제갈 수 없는 돌들이 있으므로 여러가지 경우의 수가 있기에 가장 먼저 출발한 것이 먼저 도착하는 것이 아니다.각 돌에 도착할때 몇 점프로 도달했는지를 체크해줄 필요가 있다. 따라서 2차원 DP로 풀어야하는데 N*N 은 너무 커서 문제 조건에 맞지 않는다. 점프를 해도 결국 연속으로 누적된 x + 1이 가장 클 것이므로 연속으로 x + 1 이 누적되었을때 1만까지의 값은 142 정도이다.넉넉하게 150으로 잡았다. 따라서 2차원 DP는 몇칸으로 현재 번호의 돌에 도착했는지 체크하면서 몇 번 점프했는지 값을 찾는다.dp[현재 돌][몇 칸 점프해서 왔는지 점프 길이 : x] 탐색에는 BFS 탐색을 사용한다. x-1, x, x+1 칸으로 점프하는 각각..

baekjoon/DP 2025.08.30

백준 1520번 : 내리막 길 [자바]

🧫 문제 분석 ✔️ 출처내리막 길 골드 3 📖 문제 나의 가장 약한 부분인 DP 연습 기간을 잡아 DP문제를 풀어보려한다. DFS + DP로 풀었다.중복 탐색 방지를 위해 static으로 방문처리 배열을 만들어서 처리했다.약간 백트래킹 느낌으로 BFS + 우선순위 큐 풀이도 있다고 한다.생각해보면 탐색은 점점 높이가 낮은 곳으로 이동하므로 높이가 낮은 순으로 큐에 넣으면중복없이 풀어낼 수 있다는 것이다. 탐색 조건에 뭔가 우선순위를 매길 수 있다면 우선순위 큐를 떠올려 보자 🔅 문제 풀이import java.io.*;import java.util.*;public class Main { static int N, M; static int[][] dp; static int[][] ..

baekjoon/DP 2025.08.29

백준 23290번 : 마법사 상어와 복제 [자바]

🧫 문제 분석 ✔️ 출처마법사 상어와 복제 골드 1 📖 문제 어려웠던 문제 처음에 상어들을 List[][] 로 하나하나 관리했는데 시간초과가 났다 따라서 방향별로 물고기수를 담아3중 배열로 처리했다. r행, c열, d방향, 해당 인덱스의 값은 물고기의 개수 핵심상어 이동시 중복이동이 가능하다. 즉, 지나갔던 곳을 다시 지나갈 수 있는데이때 이동한 칸의 물고기 제외를 중복 연산할 수 있으므로 따로 방문 처리를 한다. 그리고 항상 동시 이동 같은 문제는따로 배열을 만들어서 변동값을 저장하고원본 배열을 갱신하자.. 이것때문에 자꾸 틀렸다. 🔅 문제 풀이import java.io.*;import java.util.*;public class Main { static int[] dr = {0, ..

락에 대하여

흔히 DB에서 동시성 제어를 위해 사용하는 락에 대해서 다시 공부할 필요가 있어정리하고 이해한다. 락은 말 그대로 잠금이다. 동시성 제어를 위해 사용되며 3가지 종류가 있다.비관적 락(Pessimistic Lock)낙관적 락(Optimistic Lock)분산 락(Distrubuted Lock) 비관적 락DB나 멀티 스레드 환경에서 여러 사용자가 동시에 동일 레코드에 접근할 때 충돌을 방지하기 위해미리 락을 거는 방식으로, 사실상 의미그대로 잠금을 거는 것이다. 동시 접근이 많을 경우, 충돌이 많이 일어날 경우 사용한다. 비관적 락 종류Shared Lock(공유 락, S-Lock)데이터 읽기 시 사용 하는 락여러 트랜잭션이 동시 공유락 가능 (동시 읽기 허용)배타 락이 걸리면 동시 접근 불가Exclusi..

Back-End/DB 2025.08.20

백준 23289번 : 온풍기 안녕! [자바]

🧫 문제 분석 ✔️ 출처온풍기 안녕! 플래티넘 5 📖 문제 벽 체크하는게 너무 어려웠다. 그냥 하드코딩해서 벽체크하면 되는데 자꾸 다른 방법이 있을 거같아서 그것만 파다가 시간 다보냈다. 벽 체크의 경우 boolean[][] 이중 배열로 up 일때 벽,right을 때 벽 두가지를 체크하는 방식으로 풀어나간다. 3차원 배열도 생각해봤는데 너무 복잡할거 같아서 버렸다. 좀 헷갈린게 여기인데 대각선 이동 시 벽체크에서상대적 위치에서 양 옆으로 이동했다가 앞으로 전진하는 식으로 생각해야한다. 온도조절의 경우동시 발생이기에 따로 임시배열 생성해서 처리해야한다. 상하좌우 처리후 현재 위치를 방문처리해서 중복 연산되지 않게 막는다. 초콜릿이 100개를 넘어버리면 바로 중지한다.이것때문에 시간초과도 났다...

백준 23288번 : 주사위 굴리기 2 [자바]

🧫 문제 분석 ✔️ 출처주사위 굴리기 2 골드 3 📖 문제 주사위 문제에 좀 약했는데 잘 풀었다.좀 헷갈릴 수 있는데 '칸 (x, y)에 대한 점수' 는 문제 설명에 있는 공식을 사용해야하고'칸 (x,y)에 있는 정수' 는 지도에 있는 (x,y) 위치의 정수를 의미한다. 이동방향을 회전할때도 주사위를 회전해야 하나 싶어서 구현했는데할 필요없었다. 그냥 그 방향으로 굴리는 로직만 짜면 된다. 🔅 문제 풀이import java.io.*;import java.util.*;public class Main { // 동 남 서 북 static int[] dr = {0, 1, 0, -1}; static int[] dc = {1, 0, -1, 0}; static int[] dice = {2..

백준 21611번 : 마법사 상어와 블리자드 [자바]

🧫 문제 분석 ✔️ 출처마법사 상어와 블리자드 골드 1 📖 문제 요구사항이 많아서 시간이 오래걸리지 구현자체는 어렵지 않았다. 구현해야할 것은 총 4가지로1. 얼음 파편 던지기 (직선 거리 삭제)2. 구슬 폭팔3. 구슬 변화4. 각 삭제에 대하여 빈칸이 없도록 당기기 사실상 4번이 핵심이였던 것 같다. 정해진 규칙대로 꺾이는 2차원 배열에서 어떻게 빈칸을 채울 것인가방향성과 연속된 빈칸의 크기, 또한 꺾인 곳이 연속되어 있다면 , 예를 들면 N = 5일 때 3, 4, 5 가 빈칸일시 채우려면 생각보다복잡하다. 이때 생각해낸게 1차원 배열로 구슬들을 처리해보자 였다.1차원 배열로 하면 빈칸 당기기도 쉽고 방향성을 고려하지 않아도 된다. 3번까지 다 처리후 1차원 배열에서 처리된 구슬들을 2차원 배열에 ..