알고리즘(백준 등) 공부

SWEA 20551. 증가하는 사탕 수열

posite 2026. 4. 26. 12:51

상자 A, B, C에 각각 사탕이 자연수인 a, b, c 개 들어있을 때, C가 B보다 사탕이 많고, B가 A보다 사탕이 많게하여 사탕의 갯수가 A~C로 순증하게 하기 위해 상자의 사탕을 먹을 때 상자에는 최소 1개의 사탕이 있어야 한다. 순증하게 만들 수 없다면 -1을 출력하고 가능하다면 사탕을 먹는 최소 횟수를 출력한다.

 

순증하게 하기 위해서 c가 3 이상이어야 하며, b는 2 이상이어야 한다. 아니라면 다른 상자의 사탕을 먹더라도 순증할 수 없으므로 -1을 출력한다.

if(c < 3 || b < 2) {
    sb.append("-1").append('\n');
    continue;
}

 

 

이후 B~C 구간에서 순증하기 위해서 b >= c 라면 b를 c-1로 만들어주어야 하므로 B의 사탕을 b - c + 1 개 먹은 후 b는 c-1이 된다. 마찬가지로 A~B 구간에서 순증하기 위해 a >= b 라면 a를 b-1로 만들기 위해 a - b + 1개를 먹어야 한다.

int count = 0;
if(b >= c) {
    count += b - c + 1;
}
b = c - 1;
if(a >= b) {
    count += a - b + 1;
}

 

 

결과 코드는 다음과 같다.

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());
            int a = Integer.parseInt(st.nextToken()), b = Integer.parseInt(st.nextToken()), c = Integer.parseInt(st.nextToken());
            if(c < 3 || b < 2) {
                sb.append("-1").append('\n');
                continue;
            }
            int count = 0;
            if(b >= c) {
                count += b - c + 1;
            }
            b = c - 1;
            if(a >= b) {
                count += a - b + 1;
            }
            sb.append(count).append('\n');
        }
        br.close();
        System.out.print(sb);
    }
}