우당탕탕 개발일지
[SWEA] 20551. 증가하는 사탕 수열(Java, D3) 본문
문제
첫 번째 상자에는 사탕 A개, 두 번째 상자에는 사탕 B개, 세 번째 상자에는 사탕 C개가 들어 있다.
조건 1. a < b < c
각 상자에 들어 있는 사탕의 개수가 순증가하기를 원한다.
즉, 두 번째 상자에 들어 있는 사탕의 개수가 첫 번째 상자에 들어 있는 사탕의 개수보다 더 많기를 원하고, 세 번째 상자에 들어 있는 사탕의 개수가 두 번째 상자에 들어 있는 사탕의 개수보다 더 많기를 원한다.
조건 2. 모든 상자가 비어 있지 않아야 한다.
즉, 모든 상자에 1개 이상의 사탕이 들어 있어야 한다.
위의 조건을 만족시키기 위해 할 수 있는 일은, 상자 속에 들어 있는 사탕을 (0개 이상) 먹어 없애 버리는 것이다. 모든 조건을 만족시킬 수 있는지 판단하고, 만족시킬 수 있다면 최소 몇 개의 사탕을 먹어야 하는지 구하는 프로그램을 작성하라.
입출력 예
풀이
1. a, b, c를 box 배열에 저장
2. 조건 충족 판단 & 최소 사탕 개수
2-1. 조건 충족 판단
가운데 박스, box[1]은 2 이상이어야 한다.
box[1]이 1 혹은 0 일경우 box[0]은 0 혹은 -1 이어야 하지만 조건 2에 충족하지 않게 된다.
마지막 박스, box[2] 은 3 이상이어야 하는 이유도 위와 동일하다.
2-2. 최소 사탕 개수
box[1] >= box[2]
예를 들어 2 5 3 으로 가정하겠다.
5 >= 3으로 해당 조건에 부합한다
그러면 2번째 박스에서 마지막 박스의 3보다 1개 적어야 한다.
따라서 2번째 박스에서 5 - 3 + 1 = 3개를 먹어야 2번째 박스에 2개 남는다.
그렇기에 아래와 같은 작업을 하게 된다.
코드
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();
for(int tc =1; tc<1+t; tc++) {
int result = 0;
int[] box = new int[3];
for(int i=0; i<3; i++) {
box[i] = sc.nextInt();
}
if(box[1] >= 2 && box[2] >= 3) {
// 최소 사탕 개수 && 이미 완성
if(box[1] >= box[2]) {
result += box[1] - box[2] + 1;
box[1] = box[2] -1;
}
if(box[0] >= box[1]) {
result += box[0] - box[1] + 1;
box[0] = box[1] -1;
}
}else {
// 불가능한 경우
result = -1;
}
System.out.println("#"+tc+ " " + result);
}
SWEA 문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AY4XhKTKU0IDFARM
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com