우당탕탕 개발일지

[SWEA] 20551. 증가하는 사탕 수열(Java, D3) 본문

카테고리 없음

[SWEA] 20551. 증가하는 사탕 수열(Java, D3)

ujin302 2024. 5. 17. 15:57
반응형

문제

첫 번째 상자에는 사탕 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

 

반응형