Wing Pointer - Text Select
[BOJ | Java] 2696 - 중앙값 구하기
·
Problem Solving/Online Judge
💬 문제 설명주어진 수열을 앞에서부터 한 개씩 읽을 때, 읽은 숫자의 개수가 홀수일 때마다 중앙값을 출력하는 문제📌 핵심 포인트중앙값을 효율적으로 찾기 위해 두 개의 힙(heap)을 사용한다.`maxHeap` (왼쪽 절반): 중앙값 이하의 값들 → 최대힙`minHeap` (오른쪽 절반): 중앙값 초과의 값들 → 최소힙이 두 힙을 적절히 유지하면, 항상 `maxHeap.peek()`이 중앙값이 된다. 💫 문제 풀이왼쪽 힙에 우선 삽입힙 크기 균형 맞추기왼쪽이 오른쪽보다 최대 1개만 더 많게 유지해야 중앙값이 올바르게 유지됨홀수 번째 입력마다 중앙값 저장 💻 코드import java.util.*;import java.io.*;class Main { public static void main(St..
[BOJ | Java] 20168 - 골목 대장 호석(기능성, 효율성)
·
Problem Solving/Online Judge
💬 문제 설명`N`개의 마을과 `M`개의 골목이 있으며, 각 골목에는 통행 비용이 있다.시작점 `A`에서 도착점 `B`까지 이동할 때, 총예산 `C`를 넘지 않으면서 경로 상의 최대 간선비용을 최소화해야 한다.📌 핵심 포인트단순한 최단거리 문제가 아니므로, `dist` 배열 대신 현재까지의 최대 간선비용을 관리해야 한다.예산 C를 넘으면 안 되기 때문에, 방문 조건에 누적비용 ≤ C를 반드시 넣어야 한다.무작정 모든 경로를 탐색하면 시간 초과 → 우선순위 큐(PriorityQueue)로 최대비용이 작은 경로부터 탐색해야 한다.💫 문제 풀이그래프 구성인접 리스트(`List[] graph`) 형태로 저장양방향 간선이므로 두 방향 모두 추가우선순위 큐 기반 탐색PQ에는 (현재 노드, 누적비용, 현재까지의..
[programmers | Java] 합승 택시 요금
·
Problem Solving/Online Judge
💬 문제 설명두 사람이 같은 출발지에서 택시를 타고 가다가 중간에 어느 지점까지는 함께 가고,그 이후엔 각자의 목적지로 가는 최저 요금을 구하는 문제이다. (따로 가는 것이 최저 요금일 수도 있음)📌 핵심 포인트양방향 그래프이므로 `graph[u][v]`와 `graph[v][u]`를 모두 추가해야 한다.택시를 함께 타는 구간의 분기점(`k`)을 기준으로 나눠야 한다.s → k : 함께 이동k → a : A 혼자 이동k → b : B 혼자 이동최소요금 = dist[s][k] + dist[k][a] + dist[k][b]💫 문제 풀이다익스트라, 플로이드-워셜 2가지 풀이가 가능하다.1) 다익스트라 방식한 노드에서 다른 모든 노드까지의 최단 거리 계산에 효율적이다.해당 그래프는 양방향 그래프이기 때문에 ..
[programmers] 단어 변환
·
Problem Solving/Online Judge
💬 문제 설명주어진 `begin` 단어를 `target` 단어로 변환하려고 한다. 한 번에 한 글자만 바꿀 수 있고, 변환 과정에서 나오는 모든 단어는 미리 주어진 `words` 배열 안에 있어야 한다.이러한 변환 과정에서 최소 단계를 구하는 것이 목표이다.📌 핵심 포인트한 번에 한 글자만 바꿀 수 있다.변환된 단어는 반드시 `words`에 포함되어야 한다.`target`이 `words`에 없다면 변환이 불가능하므로 0을 반환해야 한다."최소 변환 횟수"를 구하는 문제 → BFS가 더 적합하지만, DFS로도 가능하다.💫 문제 풀이DFS 풀이DFS는 모든 가능한 변환 경로를 탐색하면서 최소 변환 횟수를 갱신하는 방식이다.한 단어에서 다음으로 바꿀 수 있는 단어를 재귀적으로 탐색하고, 방문 배열(`vi..
[programmers | MySQL] 즐겨찾기가 가장 많은 식당 정보 출력하기
·
Problem Solving/Online Judge
💬 문제 설명각 음식 종류(`FOOD_TYPE`) 별로 즐겨찾기 수(`FAVORITES`)가 가장 많은 식당의 정보를 출력해야 한다.출력 컬럼은 `FOOD_TYPE`, `REST_ID`, `REST_NAME`, `FAVORITES`이며, `FOOD_TYPE` 기준 내림차순으로 정렬한다.📌 핵심 포인트단순히 GROUP BY로 묶고 MAX(FAVORITES)를 쓰면 그 음식 종류의 최대 즐겨찾기 수까지만 구할 수 있다.하지만 문제는 그 수를 가진 식당의 다른 정보(이름, ID 등) 도 함께 출력해야 한다는 점이다. 즉, 그룹별 최대값을 가진 행 전체를 찾아야 하는 문제이다.(이건 SQL에서 꽤 자주 등장하는 패턴이다!)💫 문제 풀이서브쿼리 + JOIN 활용먼저 각 `FOOD_TYPE`별로 `MAX(FA..
[programmers] 체육복
·
Problem Solving/Online Judge
💬 문제 설명학생 중 체육복을 잃어버린 학생이 있고, 여벌 체육복을 가진 학생이 있을 때 최대한 많은 학생이 체육 수업을 들을 수 있도록 체육복을 빌려주는 문제다.👉 한 학생은 자기 앞번호 또는 뒷번호 학생에게만 체육복을 빌려줄 수 있다. 👉 자기 체육복이 도난당했지만 여벌이 있다면, 먼저 본인 옷을 입어야 한다.📌 핵심 포인트교집합(도난 + 여벌 모두 있는 학생)은 자기 옷을 먼저 입어야 하기 때문에→ `lost`와 `reserve` 양쪽에서 제거해야 한다.HashSet은 순서가 없기 때문에→ 빌려주는 순서는 반드시 작은 번호(오름차순) 부터 확인해야 한다.💫 문제 풀이도난 / 여벌 목록을 `Set`으로 변환→ 중복 제거와 빠른 조회를 위해 `HashSet` 사용교집합 처리→ 자기 체육복을 잃..