728x90
처음엔 이분탐색을 통해 풀이하려 했는데 쉬운 그리디 or 구현 문제이다.
경우를 나누어 볼 수 있다.
1. 처음부터 사탕 주머니가 오름차
2. 둘 중 하나라도 3번째 주머니보다 많이 차있음
만약 4 7 4 순서로 되어있다면 -> 2 3 4 순서로 만들어야한다. 즉, 최댓값이 정해져있다.
첫번째 값은 candy[2] - 2
두번째 값은 candy[2] - 1
그러므로 만약 지금 사탕의 값이 위 임계값보다 크다면 임계값으로 바꿔주고 먹은 사탕을 샌다.
단 1 1 7 의 경우처럼 임계값에 걸리지 않지만 오름차가 아닌 경우가 있으므로 오름차가 맞는지 확인하는 로직까지 추가해주면 쉽게 답을 맞출 수 있다.
#include <iostream>
using namespace std;
int main(){
int T; cin >> T;
for(int t = 0; t < T; t++){
bool flag = true;
int arr[3];
for(int i = 0; i < 3; i++) cin >> arr[i]; // 2 1 7
if(arr[2] < 3) flag = false;
int firstValue = arr[2] - 2;
int secondValue = arr[2] - 1; // 1 1 3
int answer = 0;
if(firstValue < arr[0]){
answer += (arr[0] - firstValue);
arr[0] = firstValue; // 7 4 3
}
if(secondValue < arr[1]){
answer += (arr[1] - secondValue);
arr[1] = secondValue;
}
for(int i = 0; i < 2; i++){
if(arr[i] >= arr[i + 1]) flag = false;
}
if(flag) cout << '#' << t + 1 << ' ' << answer << '\n';
else cout << '#' << t + 1 << ' ' << -1 << '\n';
}
}
'SWEA' 카테고리의 다른 글
SWEA - 창용 마을의 개수 (C++) (0) | 2024.05.19 |
---|---|
SWEA - 백만 장자 프로젝트 (C++) (0) | 2024.05.18 |
SWEA - 공평한 분배2 (0) | 2024.05.16 |
SWEA - 영어 공부(C++) (0) | 2024.02.02 |
SWEA - 10806번 수 만들기 (C++) (0) | 2024.01.19 |