알고리즘(백준 등) 공부
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);
}
}