728x90
반응형
https://www.acmicpc.net/problem/2493
2493번: 탑
첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1
www.acmicpc.net
#include <iostream>
#include <stack>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
stack <pair<int, int>> s;
int num;
for (int i = 0; i < n; i++) {
cin >> num;
while (!s.empty()) {
if (s.top().second > num) {
cout << s.top().first << " ";
break;
}
s.pop();
}
if (s.empty()) {
cout << 0 << " ";
}
s.push({ i + 1, num });
}
return 0;
}
높이가 더 높은 탑 중 가장 오른쪽에 있는 탑이 수신하므로 스택을 사용한다.
탑의 높이를 하나씩 입력받을 때마다 다음 과정 반복
1. 스택의 top에 있는 탑의 높이와 현재 탑의 높이를 비교하여
top에 있는 탑의 높이가 더 높으면 - 해당 탑의 번호를 출력
현재 탑의 높이가 더 높으면 - pop하고 1번 반복
2. 스택이 비어있으면(현재 탑보다 높은 탑이 없으면) 0 출력
3. 스택에 현재 탑의 번호와 높이를 쌍으로 저장
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 20126번 교수님의 기말고사 (C++) (0) | 2022.03.04 |
---|---|
[BOJ] 24523번 내 뒤에 나와 다른 수 (C++) (0) | 2022.03.03 |
[BOJ] 15988번 1, 2, 3 더하기 3 (C++) (0) | 2022.02.25 |
[BOJ] 10868번 최솟값 (C++) (0) | 2022.02.22 |
[BOJ] 20115번 에너지 드링크 (C++) (0) | 2022.02.21 |