본문 바로가기

백준322

[백준] 1145번 : 적어도 대부분의 배수 – JAVA [자바] https://www.acmicpc.net/problem/1145  문제  해결 방법 이 문제는 최소 공배수(LCM, Least Common Multiple) 개념을 활용하여 해결할 수 있다. 다섯 개의 수 중에서 적어도 세 개로 나누어지는 가장 작은 자연수를 찾아야 하므로, 세 개의 숫자를 조합하여 최소 공배수를 구하고, 그중 최솟값을 선택하면 된다. 문제 해결 과정 1. 다섯 개의 자연수를 입력받는다. 2. 다섯 개 중 세 개를 선택하는 모든 조합을 찾는다. 3. 선택한 세 개의 수의 최소 공배수(LCM)를 구한다. 4. 모든 조합의 LCM 중에서 최솟값을 출력한다. 최대 공약수(GCD, Greatest Common Divisor)는 두 수의 공통된 약수 중 가장 큰 값을 의미하며, 유클리드 호제법을.. 2025. 3. 14.
[백준] 12852번 : 1로 만들기 2 – JAVA [자바] https://www.acmicpc.net/problem/12852  문제  해결 방법 이 문제는 DP 방법을 이용하여 해결할 수 있다. 1. dp[i]를 i를 1로 만들기 위한 최소 연산 횟수 라고 정의한다. 2. 초기값을 설정한다: dp[1] = 0 (1은 연산 없이 1이므로 연산 횟수가 0) 3. dp[i] 값을 dp[i-1], dp[i/2], dp[i/3] 중 최소값 +1로 설정한다. 4. dp[n]을 통해 최소 연산 횟수를 구한 후, 역추적(backtracking)을 이용하여 경로를 출력한다.  코드  import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOEx.. 2025. 3. 14.
[백준] 1439번 : 뒤집기 – JAVA [자바] https://www.acmicpc.net/problem/1439  문제  해결 방법 이 문제는 그리디 알고리즘(Greedy Algorithm)을 사용하여 해결할 수 있다. 1. 0과 1이 각각 몇 번 그룹으로 나뉘는지 계산한다. 예를 들어 0001100의 경우, 000 / 11 / 00으로 0 그룹 2개, 1 그룹 1개가 된다. 11001100110011000001의 경우, 11 / 00 / 11 / 00 / 11 / 00 / 11 / 00000 / 1로 0 그룹 4개, 1 그룹 4개가 된다. 2. 0과 1의 그룹 수 중 작은 값을 선택하면 최소 뒤집기 횟수가 된다. 예를 들어 0001100의 경우 0 그룹 2개, 1 그룹 1개이므로 최소 1번 뒤집으면 해결 가능하다. 110011001100110000.. 2025. 3. 13.
[백준] 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.
반응형