-
백준 3015번: 오아시스 재결합스택(Stack) 2018. 7. 1. 18:46반응형
https://www.acmicpc.net/problem/3015
1. 문제
오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 이 역사적인 순간을 맞이하기 위해 줄에서서 기다리고 있던 백준이는 갑자기 자기가 볼 수 있는 사람의 수가 궁금해 졌다. 두 사람 A와 B가 서로 볼 수 있으려면, 두 사람 사이에 A 또는 B보다 키가 큰 사람이 없어야 한다. 줄에 서있는 사람의 키가 주어졌을 때, 서로 볼 수 있는 쌍의 수를 구하는 프로그램을 작성하시오.
2. 알고리즘
키워드 - 스택
3. 코드
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <iostream>#include <sstream>#include <string>#include <algorithm>#include <functional>#include <vector>#include <list>#include <queue>#include <deque>#include <map>#include <set>#include <stack>using namespace std;#define MAX_SIZE 100#define INF 0x7fffffff#define CENDL "\n"/** @memory - 2380 kb* @time - 56 ms*/int main() {cin.tie(0);std::ios::sync_with_stdio(false);int n; cin >> n;stack<pair<int, int>> st;long long sol = 0;while(n--) {int d; cin >> d;while( !st.empty() && st.top().first < d) {sol += st.top().second;st.pop();}if( !st.empty() ) {if( st.top().first == d ) {pair<int, int> topElement = st.top();st.pop();sol += (topElement.second);if( !st.empty() ) {sol += 1;}topElement.second += 1;st.push(topElement);} else {pair<int, int> newElement(d, 1);sol += 1;st.push(newElement);}} else {pair<int, int> newElement(d, 1);st.push(newElement);}}cout << sol << "\n";return 0;}cs 반응형'스택(Stack)' 카테고리의 다른 글
monotone stack (0) 2019.08.24 스택/큐 > 다리를 지나는 트럭 (0) 2018.09.29 백준 10799번: 쇠막대기 (0) 2018.09.29 백준 9012번: 괄호 (0) 2018.06.14