✅ 문제차량의 진입~진출 구간은 범위로 주어집니다.이 범위들이 겹치는 구간을 찾고, 그 구간의 끝부분에 카메라를 설치하면, 겹치는 모든 차량을 한 번에 단속할 수 있어요.겹치지 않는 새로운 구간이 나오면, 새 카메라가 필요합니다.✅ 문제해결 (정렬 + 그리디)모든 차량 경로를 진출지점 기준으로 정렬현재 카메라의 설치 위치를 추적 (camera = -30001로 초기화)각 차량 경로를 보면서, 진입 지점 > camera라면 새로운 카메라 필요JAVA 코드import java.util.*;class Solution { public int solution(int[][] routes) { // 1. 차량 경로를 진출지점 기준으로 정렬 Arrays.sort(routes, (a, b)..
문제 설명n개의 섬이 있고, 몇몇 섬 사이에는 다리를 놓을 수 있습니다. 각 다리는 건설 비용이 있으며, 우리는 모든 섬을 연결하되 최소 비용으로 연결하고자 합니다.🔗 모든 섬은 하나의 네트워크로 연결되어야 하며, 간접적으로 도달 가능하면 OK입니다. 알고리즘: 최소 신장 트리 (MST)이 문제는 최소 신장 트리(MST) 를 만드는 전형적인 문제로, 대표적인 두 알고리즘이 있습니다.프림(Prim)크루스칼(Kruskal) ← 여기서는 이걸 사용크루스칼 알고리즘간선을 비용 순으로 정렬비용이 낮은 간선부터 하나씩 선택사이클이 생기지 않도록 연결모든 정점을 연결하면 종료사이클 여부는 Union-Find(Disjoint Set) 자료구조로 판별합니다.JAVA 코드import java.util.*;class So..
문제무인도에 사람들이 갇혀 있고, 이들을 구명보트를 이용해 구조해야 합니다.하지만 구명보트는 한 번에 최대 2명까지 탈 수 있고, 무게 제한도 있습니다.목표는?가능한 최소한의 구명보트를 사용해서 모든 사람을 구조하는 것입니다.예시사람들의 몸무게: [70, 50, 80, 50]구명보트 무게 제한: 100kg이때,50 + 50은 함께 탈 수 있음 → 보트 1대70과는 혼자 타야 함 → 보트 1대80도 혼자 타야 함 → 보트 1대총 3대의 구명보트가 필요합니다.접근 방식(그리디 + 투 포인터)사람들을 몸무게 기준으로 정렬한 뒤,가장 가벼운 사람과 가장 무거운 사람을 한 쌍으로 매칭합니다.무거운 사람부터 하나씩 처리하면서, 가벼운 사람과 같이 탈 수 있으면 같이 태우고, 아니면 혼자 태웁니다. JAVA 코드im..
문제주어진 숫자 문자열 number에서 k개의 숫자를 제거해 만들 수 있는 가장 큰 수를 구하는 문제입니다.예를 들어 number = "1924"이고 k = 2라면, 만들 수 있는 가장 큰 수는 "94"입니다. 문제 해결탐욕적(Greedy) 접근이 필요한 문제입니다.앞자리부터 가능한 한 큰 숫자를 남겨야 최종적으로 큰 수가 됩니다.이를 위해 Stack 자료구조를 활용하여 다음과 같은 조건으로 문자를 저장합니다:Stack이 비어있지 않고,k > 0이며,현재 스택의 top 숫자가 새로 들어올 숫자보다 작다면,스택의 top을 제거(pop)하여 더 큰 수가 앞으로 오도록 만듭니다.이 과정을 가능한 한 반복해야 하므로 while 루프로 구현합니다.Java 코드import java.util.*;class Solut..
문제이름을 만들기 위해 조이스틱을 조작하는 최소 횟수를 구하는 문제입니다.조이스틱은 ▲(위), ▼(아래), ◀(왼쪽), ▶(오른쪽)으로 움직입니다.▲: A부터 Z로, ▼: Z부터 A로 변경목표 문자열은 알파벳 대문자로 이루어져 있고, 처음에는 모든 문자가 A로 되어 있음커서를 좌우로 이동하며 알파벳을 변경해 원하는 이름을 만들어야 함핵심위/아래 조작 (▲▼)각 문자마다 A에서 목표 문자로 바꾸기 위해 최소 몇 번 이동해야 하는지를 계산Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1) 를 사용해서 위로 가는 경우와 아래로 가는 경우 중 더 작은 값 사용좌/우 조작 (◀▶)단순히 오른쪽으로만 이동하면 length - 1번이 필요하지만,중간에 A가 연속되는 ..
문제 설명이중 우선순위 큐는 다음과 같은 연산을 수행할 수 있는 자료구조입니다: 명령어 설명 I 숫자큐에 숫자를 삽입D 1큐에서 최댓값 삭제D -1큐에서 최솟값 삭제큐가 비어있을 때 삭제 연산이 들어오면 무시합니다.최댓값/최솟값이 여러 개여도 한 개만 삭제합니다. 목표모든 연산을 처리한 후,큐가 비어있다면 [0, 0]비어있지 않다면 [최댓값, 최솟값]을 반환합니다. 풀이 전략Java의 PriorityQueue는 기본적으로 **오름차순 정렬(최솟값 우선)**을 합니다.최댓값을 빠르게 제거하기 위해서는 내림차순 우선순위 큐가 추가로 필요합니다.따라서 우리는 다음과 같이 두 개의 우선순위 큐를 사용합니다:pq: 최소 힙 (PriorityQueue)reverse: 최대 힙 (PriorityQueue(Colle..