알고리즘(백준 등) 공부

SWEA 17642. 최대 조작 횟수

posite 2026. 5. 1. 12:16

주어진 두 자연수 a, b에 A에 소수를 더하거나 B에 소수를 빼는 연산 둘 중 하나를 선택해서 수행하는 작업을 하여 두 수가 같게 할 때 최대한 많이 작업을 수행할 때 수행 횟수를 구하는 문제이다. 같게 할 수 없다면 -1을 출력한다.

 

a가 더 크면 a에서 빼거나 b에 더할 수 없어 같게 할 수 없다. b - a 가 1 이어도 1이 소수가 아니기 때문에 같게 할 수 없다.

b - a 가 2 이상이라면 두 수의 차이가 홀수면 2*x + 3 의 형태로 작업 횟수가 x+1이 되며 짝수는 2*x가 된다. 이 경우에 작업 횟수가 가장 크다. 즉 (두 수의 차이 ) / 2 가 최대 작업 횟수가 된다.

if(a > b || b - a == 1) {
    sb.append("-1").append('\n');
    continue;
}
            
sb.append((b - a) / 2).append('\n');

 

 

결과 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int tc = 1; tc <= T; tc++) {
            sb.append('#').append(tc).append(' ');
            StringTokenizer st = new StringTokenizer(br.readLine());
            long a = Long.parseLong(st.nextToken()), b = Long.parseLong(st.nextToken());
            if(a > b || b - a == 1) {
                sb.append("-1").append('\n');
                continue;
            }
            
            sb.append((b - a) / 2).append('\n');
        }
        
        br.close();
        System.out.print(sb);
    }
}