리뷰
https://www.acmicpc.net/problem/1863
스택을 활용해 건물이 최소한 몇 채 인지를 구해 출력하는 문제
전역 변수
- n : 건물의 개수를 저장할 변수
- stack : 스택으로 활용하기 위한 벡터
함수
없음
문제풀이
- n을 입력 받고, 변수 ans를 초기값 0으로 초기화한다.
- n개의 고도가 바뀌는 지점의 좌표를 변수 x, y에 각각 입력 받는다.
- 스택이 비지 않았고, 스택의 맨 뒤가 y이상일 경우를 조건으로 하는 while루프를 수행한다.
- 스택의 맨 뒤가 y보다 클 경우 ans를 증가시킨다. 스택의 맨 뒤 요소를 빼내어 준다.
- y가 0보다 클 경우 stack에 push해준다.
- while문이 종료된 후 stack의 size를 ans에 더해준다.
- ans에 저장된 값을 출력해 준다.
트러블 슈팅
없음
참고 사항
- 0인 경우엔 stack에 push해줄 필요가 없다.
정답 코드
#include<iostream>
#include<vector>
using namespace std;
int n;
vector<int> stack;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
int ans = 0;
while (n--) {
int x, y; cin >> x >> y;
while (!stack.empty() && stack.back() >= y) {
if (stack.back() > y) ans++;
stack.pop_back();
}
if (y) stack.push_back(y);
}
ans += stack.size();
cout << ans;
}
728x90
'알고리즘 공부 > C++' 카테고리의 다른 글
[G5] 백준 15558번 점프 게임 C++ 너비 우선 탐색 (0) | 2025.05.12 |
---|---|
[G4] 백준 3151번 합이 0 C++ 이분탐색, 정렬 (0) | 2025.05.09 |
[G5] 백준 17609번 회문 C++ 투 포인터, 문자열 (0) | 2025.05.07 |
[G4] 백준 14497번 주난의 난(難) C++ 너비 우선 탐색, 플러드 필 (0) | 2025.05.06 |
[P4] 백준 15816번 퀘스트 중인 모험가 C++ 세그먼트 트리, 값/좌표 압축, 오프라인 쿼리 (0) | 2025.05.05 |