문제출처 : https://www.acmicpc.net/problem/21557
code
#include<stdio.h> int main() { int N, i, A[200000] = { 0 }; scanf("%d", &N); for (i = 0; i < N; i++) scanf("%d", &A[i]); i = N - 2; while (i) { if (i == 1) { A[0]--; A[N - 1]--; } else { if (A[0] >= A[N - 1]) A[0]--; else A[N - 1]--; } i--; } if (A[0] >= A[N - 1]) printf("%d", A[0]); else printf("%d", A[N - 1]); return 0; }
작업 과정 중간에 폭죽을 다터트리고 양옆 더미의 높이 1씩감소는 중요한조건이 아니다.
왜냐하면 어차피 나중에는 2개밖에 안남을것이고, 어차피 양쪽 끝에것만 남기 때문이다.
최솟값을 구해야하기 때문에 무조건 2번째 폭죽 아니면 N-1번째 폭죽을 쓰기 때문에
A[0]와 A[N-1]의 크기를 비교해서 더 큰쪽을 -1씩해주고, 만약 폭죽이 3개남으면 A[0],A[N-1]모두 -1을 해주는 반복문을 짜면된다.진짜 이때까지풀면서 제일 쉽게 풀었던 것 같다. 10분도 안걸렸으니까