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


스택을 이용해서 풀었습니다.


만약에 입력된 플랫보다 큰 값이 있으면 계속 pop 합니다.

플랫보다 작은 값이 있으면 입력된 플랫을 push합니다.

같으면 아무것도 안합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <stack>
using namespace std;
 
int main(){
    ios_base::sync_with_stdio(false);
    int p, n;
    int count = 0, note, flat;
    stack<int> st[7];
    
    cin >> n >> p;
        
    for(int i = 0; i < n; i++){
        cin >> note >> flat;
        while(!st[note].empty()){
            if(st[note].top() == flat) break;
            else if(st[note].top() > flat){
                st[note].pop(); count +=1;
            }
            else{
                st[note].push(flat); count+=1;
            }
            
        }
        if(st[note].empty()){
            count +=1; st[note].push(flat);
        }
        
        
    }
    cout << count;
}
cs


반응형

'프로그래밍 > 문제풀이' 카테고리의 다른 글

[bfs] 백준 5014 스타트링크  (0) 2018.11.21
[etc] 백준 1350 진짜 공간  (0) 2018.11.21
[dp] 백준 9465 스티커  (0) 2018.11.19
[dps, dp] 백준 1520 내리막 길  (0) 2018.11.14
[Dp] 백준 11726 2xn타일링  (0) 2018.11.13

+ Recent posts