개인공부/알고리즘

BOJ 28014 [첨탑 밀어서 부수기]

Dev_Camp 2023. 9. 19. 01:42

문제

 

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

 

 

풀이

#include <iostream>
using namespace std;

int count = 0;

int main(){
	
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	
	int n;
	int n1 = 0;
	int n2;
	cin >> n;
	for(int i = 0; i<n; i++){
		cin >> n2;
		if(n2>=n1){
			count++;
		}
		n1=n2;
	}
	cout << count;
	return 0;
}

다음 첨탑이 전 첨탑보다 작을 경우 넘어가고, 전 첨탑보다 클 경우 count를 올려 풀 수 있다.

처음에는 시간초과가 발생했지만

 

ios::sync_with_stdio(false);
cin.tie(NULL);

위 코드를 추가하여 해결할 수 있었다.

 

ios::sync_with_stdio(false) 는 'cin'과 'cout'을 'stdio'와의 동기화를 해제함으로써 입출력을 빠르게 한다.

또한 보통은 cin 작업 이후에 자동으로 cout이 버퍼를 비우는데, cin.tie(NULL)은 cin과 cout이 독립적으로 수행될 수 있게 하여 입출력 작업의 성능을 향상시킨다.