fork download
  1. #include <stdio.h>
  2.  
  3. int main() {
  4. int n = 1;
  5. do {
  6. scanf("%d ", &n);
  7. if (n == 0) break; // 입력이 0이면 종료
  8.  
  9. int arr[n];
  10. for (int i = 0; i < n; i++) {
  11. scanf("%d ", &arr[i]);
  12. }
  13. //히스토그램 핵심 아이디어 ㅡ 이어진 것끼리 뺀다
  14. // 1. 이어진 거를 체크
  15. // 2. 뺀다
  16. // 3. 반복.
  17.  
  18. int max = 0, end;
  19. for (int start = 0; start < n; start++) {
  20. int minHeight = arr[start];
  21. for (end = start; end < n + start; end++) {
  22. minHeight = (minHeight < arr[end % n]) ? minHeight : arr[end % n];
  23. int area = minHeight * (end - start + 1);
  24. max = (max < area) ? area : max;
  25. }
  26. start = end;
  27. }
  28. //이전에 이어진 뺀값을 넘기지 않아야함
  29. // 즉 두가지 경우일 때
  30. // 1. 이전 뺀값보다 클 경우 end만 증가 (즉, 계속 진행)
  31. // 2. 이전 뺀값보다 작을 경우 = 종료 (이 경우를 조건식으로)
  32. printf("%d\n", max);
  33. } while (n != 0);
  34.  
  35. return 0;
  36. }
  37.  
Success #stdin #stdout 0.01s 5280KB
stdin
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0
stdout
7
4000