Problem Solving/BOJ

[백준 / BOJ] C++ 28014 첨탑 밀어서 부수기

nageune 2023. 5. 8. 01:06
728x90
반응형

28014번: 첨탑 밀어서 부수기

 

문제

https://www.acmicpc.net/problem/28014

 

28014번: 첨탑 밀어서 부수기

첫째 줄에 첨탑의 개수 $N$이 주어진다. $(1\leq N\leq 5\,000\,000)$ 둘째 줄에는 앞에서부터 차례대로 첨탑의 높이 $H_1, H_2, \cdots, H_n (1\leq H_i\leq 1\,000\,000)$ 이 주어진다. 입력으로 주어지는 모든 수는 정

www.acmicpc.net

 

 

풀이

밀려 넘어지는 첨탑의 높이가 바로 그다음 첨탑의 높이보다 클 때만 그다음 첨탑도 밀려 넘어진다는 것은 밀려 넘어지는 첨탑의 높이가 바로 그다음 첨탑의 높이보다 작거나 같을 때 다음 첨탑을 밀어야 한다. 즉, i번째 첨탑과 i+1번째 첨탑의 높이를 비교해 i+1번째 첨탑의 높이가 같거나 클 때만 카운트를 증가시킨다. 단, 첫 번째 첨탑은 반드시 밀어야 하므로 카운트는 1부터 시작한다.

 

아래 코드는 첨탑의 뒤부터 탐색해서 i번째를 i-1번째, i+1번째를 i번째라고 생각하면 된다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, ans = 1;
  cin >> n;
  vector<int> v(n);
  for (int i = 0; i < n; i++)
    cin >> v[i];
  for (int i = n - 1; i > 0; i--)
    if (v[i] >= v[i - 1])
      ans++;
  cout << ans;
  return 0;
}

 

728x90
반응형