전체 글403 [백준] 15903번 : 카드 합체 놀이 – JAVA [자바] https://www.acmicpc.net/problem/15903 문제 해결 방법 이 문제는 그리디 알고리즘(Greedy Algorithm)을 이용하여 해결할 수 있다. 항상 가장 작은 두 수를 합치는 것이 최적의 선택이 되므로, 우선순위 큐(Priority Queue, 최소 힙)를 사용하면 효과적으로 풀 수 있다. 1. 처음에 주어진 n장의 카드를 우선순위 큐(최소 힙)에 넣는다. 2. m번 동안 다음 과정을 반복한다. - 가장 작은 두 개의 카드를 꺼낸다. - 두 값을 더한 뒤, 해당 값을 두 카드에 덮어쓴다. - 새로운 값을 다시 큐에 삽입한다. 3. 모든 합체가 끝난 후, 큐에 남아있는 값들의 합이 최종 점수가 된다. 코드 import java.io.*;import java.util.*;.. 2025. 3. 12. [백준] 12904번 : A와 B – JAVA [자바] https://www.acmicpc.net/problem/12904 문제 해결 방법이 문제는 그리디 알고리즘(Greedy Algorithm)을 사용하여 해결할 수 있다. 왜냐하면 특정 상황에서 선택할 수 있는 연산이 항상 하나로 정해져 있기 때문이다. 일반적으로 문자열 S에서 T로 변환하는 방식으로 접근하면 여러 경우의 수를 고려해야 하지만, T에서 S로 변환하는 방식으로 접근하면 연산이 명확하게 결정된다. S에서 T로 변환하는 방법은 밑에 그림처럼 여러 경우의 수가 있다. 하지만, 문자열 T의 마지막 문자가 'A'라면 그 이전 상태는 반드시 'A'를 추가하기 전의 상태이므로 'A'를 제거하면 된다. 반면 마지막 문자가 'B'라면 그 이전 상태는 반드시 문자열을 뒤집고 'B'를 추가하기 전의 상태이므.. 2025. 3. 11. [백준] 16953번 : A → B – JAVA [자바] https://www.acmicpc.net/problem/16953 문제 해결 방법이 문제는 BFS(너비 우선 탐색) 를 활용하여 해결할 수 있다. BFS는 최단 경로를 찾는 데 유용한 알고리즘이기 때문에, 최소 연산 횟수를 구하는 데 적합하기 때문이다. 만약에 다른 방법을 이용해서 이 문제를 풀었다면 댓글로 공유해주기 바란다. 1. 큐 (Queue)를 활용하여 탐색을 진행한다.2. 시작 값 A를 큐에 넣고, 연산을 수행하며 다음 숫자들을 큐에 추가한다. 다음 숫자들은 2를 곱한 숫자나 뒷자리에 1을 추가한 숫자를 뜻한다.3. 새로운 숫자가 B보다 작다면 계속 진행하고, B와 같다면 연산 횟수를 출력하고 종료한다. 새로운 숫자가 B보다 크면 B가 절대로 될 수 없다 (새로운 숫자는 2를 곱한 값이나 .. 2025. 3. 10. [백준] 25206번 : 너희 평점은 – JAVA [자바] https://www.acmicpc.net/problem/25206 문제 해결 방법 1. 입력 처리: 20줄에 걸쳐 주어지는 과목명, 학점, 등급을 입력받는다.2. P/F 과목 제외: 등급이 'P'인 경우 계산에서 제외한다.3. 전공평점 계산:(학점 × 과목평점)의 합과 총 학점의 합을 누적한다.위 공식을 이용해 최종 전공평점을 계산한다.코드 1: 백준 기준 자바 11 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { double totalPoints = 0.0; // (학점 × 과목평점)의 합 double tot.. 2025. 3. 7. [백준] 1541번 : 잃어버린 괄호 – JAVA [자바] https://www.acmicpc.net/problem/1541 문제문제 풀이문제 해결 방법:1. '-'를 기준으로 나누기 '-' 연산자는 큰 숫자를 빼는 것이므로, 이를 기준으로 나누면 최솟값을 만들기 쉬워진다.2. 각 그룹의 숫자를 더하기 '-'를 기준으로 나눈 각 부분은 '+' 연산자로 연결된 숫자 그룹이다. 따라서, 각 그룹을 먼저 더한다. 3. 첫 번째 그룹을 시작값으로 설정하고 나머지 그룹을 빼기 첫 번째 그룹은 그대로 사용하고, 이후의 그룹들은 모두 빼주면 된다. 코드import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { .. 2025. 2. 25. [백준] 28278번 : 스택 2 – JAVA [자바] https://www.acmicpc.net/problem/28278 문제문제 풀이문제 해결 방법:1. 스택 자료구조 활용주어진 명령어가 스택과 밀접한 연관이 있으므로 Stack 클래스를 사용하면 쉽게 구현할 수 있다.2. 조건문을 활용한 명령어 처리명령어를 하나씩 읽고 해당하는 동작을 수행한다.명령어 1 X인 경우 stack.push(X)를 수행한다.명령어 2는 stack.pop()을 수행하며, 비어 있다면 -1을 출력한다.명령어 3은 stack.size()를 출력한다.명령어 4는 stack.isEmpty()를 이용하여 출력값을 결정한다.명령어 5는 stack.peek()을 출력하며, 비어 있으면 -1을 출력한다.코드import java.io.*;import java.util.*;public class.. 2025. 2. 25. [백준] 1374번 : 강의실 – JAVA [자바] https://www.acmicpc.net/problem/1374 문제 문제 풀이문제 접근 방법:1. 수업을 정렬하여 집행 순서 정하기수업 시작 시간을 기준으로 오름차순 정렬한다.같은 시작 시간이면 종료 시간을 기준으로 정렬한다2. 우선순위 큐를 활용한 강의실 배정종료 시간이 가장 빠른 수업부터 관리하여 강의실을 재사용할 수 있는지 확인한다.종료 시간이 가장 빠른 수업을 추적하기 위해 우선순위 큐(Priority Queue, Min-Heap) 를 사용한다3. 그리디 알고리즘현재 진행 중인 강의 중 가장 빨리 끝나는 강의와 새 강의의 시작 시간을 비교한다.만약 현재 진행 중인 강의가 끝난 후 새 강의를 배정할 수 있다면, 기존 강의실을 재사용한다.그렇지 않다면 새로운 강의실을 추가해야 한다.4. 강의실 개.. 2025. 2. 21. [백준] 11000번 : 강의실 배정 – JAVA [자바] https://www.acmicpc.net/problem/11000 문제문제 풀이문제 접근 방법:1. 수업을 정렬하여 집행 순서 정하기수업 시작 시간을 기준으로 오름차순 정렬한다.같은 시작 시간이면 종료 시간을 기준으로 정렬한다2. 우선순위 큐를 활용한 강의실 배정종료 시간이 가장 빠른 수업부터 관리하여 강의실을 재사용할 수 있는지 확인한다.종료 시간이 가장 빠른 수업을 추적하기 위해 우선순위 큐(Priority Queue, Min-Heap) 를 사용한다3. 그리디 알고리즘현재 진행 중인 강의 중 가장 빨리 끝나는 강의와 새 강의의 시작 시간을 비교한다.만약 현재 진행 중인 강의가 끝난 후 새 강의를 배정할 수 있다면, 기존 강의실을 재사용한다.그렇지 않다면 새로운 강의실을 추가해야 한다.4. 강의실 개.. 2025. 2. 21. 이전 1 2 3 4 5 6 ··· 51 다음 반응형