baekjoon 142

백준 14943번 : 벼룩 시장 [자바]

🧫 문제 분석 ✔️ 출처벼룩 시장 골드 3 📖 문제 두사람의 거리 * 배달하는 벼룩의 수 의 합을 구하고, 그 중 최소가 되는 합을 구하는 그리디 문제제일 좋은 것은 가장 가까운 곳에 배달하는게 이득이다.따라서 판매자 즉, 가게와 고객을 따로 순서대로 받고 하나하나씩 거래하면된다. 투포인터로 풀었다. 🔅 문제 풀이import java.io.*;import java.util.*;public class Main { // 계산은 long public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ..

baekjoon/Greedy 2025.07.03

백준 16565번 : N포커 [자바]

🧫 문제 분석 ✔️ 출처N포커 골드 2 📖 문제 포함 배제 원리에 대해 배우게 되었다. 말그대로 여러 집합을 합칠때 중복을 빼는 것이다. 짝수 집합일 경우 빼주고홀수 집합일 경우 더한다.세 집합 A,B,CA, B, CA,B,C 면:→ 더하고 빼고 반복. 벤다이어그램으로 봤을때2번째 짝수번째 빼기를 보면3번 빼서 AnBnC가 없어진다따라서 세 집합의 교집합을 더한다. 최종적으로 중복ㅇ벗는 하나의 영역만 계산된다.|B| + |C| + |D| 이경우 BnC가 2개AnB 2개AnC 2개 때문에 1개씩 빼줌 하지만 이러면 AnBnC가 사라짐AnBnC 더함 최종적으로 중복없는 합 집합 생성 🔅 문제 풀이import java.io.*;import java.sql.SQLOutput;import java.uti..

baekjoon/DP 2025.07.01

백준 14725번 : 개미굴 [자바]

🧫 문제 분석 ✔️ 출처개미 골드 3 📖 문제 트리로 풀어야하는데 Set이랑 문자열로 풀었다. 레벨 별 Set을 만들고 Set에 현재 레벨의 문자열을 체크하면서 추가한다. Tree 를 이용한 풀이를 꺼렸던게 정렬때문이였는데 생각해보니 TreeMap이 있었다.노드 만들어서 자식을 TreeMap에 넣고 진행하면 될 것 같다. 🔅 문제 풀이 [Set 풀이]import java.io.*;import java.util.*;public class Main { static final int MAX_LEVEL = 15; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRe..

baekjoon/String 2025.06.28

백준 2533번 : 사회망 서비스 (SNS) [자바]

🧫 문제 분석 ✔️ 출처사회망 서비스 (SNS) 골드 3 📖 문제 DP 문제트리를 이용한 DP 문제는 처음이라 좀 어려웠다 처음에는 엣지가 많은 노드 순으로 연결 해제 여부를 따지며 선정하면 되지않나 싶었는데불가능한 케이스가 있어서 바꿨다. 현재 노드를 얼리 아답터로 선정할지 안할지에 대해서 탐색하면된다.DFS+DP 식으로 풀어서 별로일 수 있다. 또한 입력을 받을 때 주의해야한다.방향성을 가지면 안되며 양방향으로 트리를 만들어야한다.그 이유는 단방향시 루트를 가지는 트리가 되는데 이러면 방향에 따라 값이 달라진다. 51 52 12 32 4이런 입력이 들어오면 1을 루트로 설정시2를 탐색할 수 없다. 때문에 양방향으로 설정해야한다. 루트를 1 기준으로 입력이 들어온다는 생각때문에이런 실수를 했다...

baekjoon/DP 2025.06.27

백준 9328번 : 열쇠 [자바]

🧫 문제 분석 ✔️ 출처열쇠 골드 1 📖 문제 BFS 탐색 + 구현 상근이가 빈 공간을 다니면서 문서를 훔친다.열쇠는 줍고 열쇠가 있는 문이라면 연다. 처음풀이시도에서는열쇠를 얻자마자 해당하는 문에 이동하고그 문의 상하좌우를 탐색해서 한번이라도 방문한 빈 공간이 있다면 이 문은 이동 가능한 문으로 판단하여 탐색했는데 이 풀이의 문제점은 문의 상하좌우의 빈 공간이 방문이 가능함에도 열쇠를 얻은 시점이 더 빨라서 해당 열쇠가 있음에도 이동 할 수 없는 문이라 판단하여 열지 않는다. 따라서 우선 빈 공간을 먼저 다 탐색하면서갖고 있는 열쇠가 있다면 문을 열고 열 수 없는 문은 따로 저장해두고새로운 열쇠는 추가한다. 기존에 갖고 있는 열쇠로 다 탐색을 끝냈다면추가된 키로 열 수 있는 문이 있는지 확..

백준 1766번 : 문제집 [자바]

🧫 문제 분석 ✔️ 출처문제집 골드 2 📖 문제 위상정렬 + 우선순위 큐 문제 먼저 푸는게 좋은 문제들은 위상정렬로 진입차수를 저장해준다. a b 로 a가 먼저 푸는게 좋은 문제면b의 진입차수 1을 늘려준다. 그리고 진입차수가 0인 문제들을 전부 우선순위 큐에 저장하고 하나씩 꺼내서 문제를 푼다. (우선순위 큐 기본 정렬을 사용했으므로 오름차순 정렬되어 난이도가 낮은 순으로 나온다.)풀고 해당 문제가 먼저 푸는게 좋은 문제였다면 연결되어있는 뒤 문제들의 진입차수를 -1 해준다. 이때 연결된 문제들의 진입차수가 0이 되었다면 더이상 먼저 푸는게 좋은 문제는 존재하지 않으므로해당 문제도 우선순위 큐에 저장한다. 🔅 문제 풀이import java.io.*;import java.util.*;import..

백준 1202번 : 보석도둑 [자바]

🧫 문제 분석✔️ 출처보석 도둑 골드 2 📖 문제 우선순위 큐 문제 주어진 가방을 무게 기준 오름차순 정렬하여 가장 작은 가방부터 보석을 담는다. 가장 작은 가방이 담을 수 있는 보석들 중 최대 값어치인 보석을 해당 가방에 담는식으로 하면 된다. 우선순위 큐를 가격이 높은순으로 사용한다.현재 선택한 가방이 담을 수 있는 보석들을 우선순위 큐에 다 담고하나를 꺼낸다. 이때 꺼낸 보석이 현재 가방이 담을 수 있는 최대 가격의 보석이 된다. 그리고 정답 범위가 30만 * 100만이기에 long타입으로 가격을 계산해야한다. 🔅 문제 풀이import java.io.*;import java.util.*;import java.util.stream.IntStream;public class Main { st..

백준 16566번 : 카드 게임 [자바]

🧫 문제 분석 ✔️ 출처카드 게임 플래티넘 5 📖 문제 이분탐색 + 유니온 파인드 (서로소 집합)문제 문제의 핵심은철수는 카드를 조작해서 낼 수 있고, 같은 수여러개를 낼 수 도 있음민수는 철수의 카드를 미리 알고 철수가 낸 카드 중 더 큰 수에서 가장 작은 수를 낸다. 문제에서 민수가 카드를 내지 못하는 경우가 없다고 가정하였으므로철수가 낸 카드보다 작거나 같은 카드만 남을 경우가 없다는 의미이다.즉, 철수보다 항상 더 큰 카드 k 개 만큼 내어 항상 승리한다 철수가 낸 카드에 맞게 민수는 자신의 카드에서 적절한 카드를 이분탐색으로 찾아서 낸다.찾은 카드가 철수가 낸 카드와 같다면 그 다음 카드를 가리킨다. 사용한 카드는 그 다음 카드의 대표 집합에 연결한다. 다음 카드의 대표 집합을 연결하는 ..

백준 14003번 : 가장 긴 증가하는 부분 수열 5 [자바]

🧫 문제 분석 ✔️ 출처가장 긴 증가하는 부분 수열 5 플래티넘 5 📖 문제 LIS 시리즈중 마지막 문제기존 이분탐색 LIS에 역추적이 추가된 문제다. 실제 LIS를 구하려면 LIS를 기록해야한다.단순히 덮어씌운 값이 아닌 실제 증가하는 부분수열을 구해야하기에이전 값의 위치를 기록할 필요가 있다. 예제를 보면 10 20 10 30 20 50 이 입력되는데여기서 실제 LIS는 10 20 10 30 20 50이렇게 된다. 그럼 어떻게 추적을 해야하나 LIS 내에서 이분탐색을 하면서 새로운 값 추가가 아니면 기존 LIS 원소 내에 덮어씌운다. 때문에 LIS에 기록될 때 LIS에 기록된 위치에서 이전 위치의 값을 기록하는 것이다.단순히 -1~순차적으로 올릴 수 있지만 여기서는 prev만으로 바로 위치를 ..

백준 2887번 : 행성 터널 [자바]

🧫 문제 분석 ✔️ 출처행성 터널 플래티넘 5 📖 문제 최소 비용 MST 문제크루스칼로 풀면된다. 문제에서 x길이, y길이, z길이중 가장 작은 값을 비용으로 사용하고터널 N-1개를 생성한다. 이때 연결에 필요한 최소 비용 구하기 어떤 수열에서 오름차순 정렬시 자신의 인접 수가 가장 자신과 가까운 값이 된다. x, y, z 각각 기준으로 정렬하고인접 노드와의 거리를 구한후 우선순위 큐에 저장한다. 우선순위 큐에서 가장 작은 비용의 터널 건설 정보를 꺼내서 union-find set 을 사용하여 터널의 건설 여부를 체크하고 union으로 터널을 건설한 두 행성을 합치고 최종 비용을 더한다. 🔅 문제 풀이import java.io.*;import java.util.*;import java.u..