티스토리 뷰
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
deque<bool> deq;
int q, rotate=0; //덱의 앞의 위치 3시 0 6시 1 9시 2 12시 3
int ball=0, window=0; //공, 가림막 개수
char c;
cin >> q;
char s[10] = {};
while(q--) {
cin >> s;
if(s[2] == 's') { //push 뒤로 집어넣습니다.
cin >> c;
if(c == 'b') { //공
++ball;
deq.emplace_back(true);
}
else { //가림막
++window;
deq.emplace_back(false);
}
}
else if(s[2] == 'u') { //count 개수를 셉니다.
cin >> c;
if(c == 'b') cout << ball << '\n';
else cout << window << '\n';
}
else if(s[2] == 'p') { //가장 앞에 요소를 제거합니다.
if(!deq.empty()) {
if(deq.front()) --ball; //공
else --window; //가림막
deq.pop_front(); //덱에서 제거
}
}
else if(s[2] == 't') { //rotate 회전시킵니다.
cin >> c;
if(c == 'l') { //반시계 방향
--rotate;
if(rotate < 0) rotate = 3;
}
else { //시계방향
++rotate;
if(rotate > 3) rotate = 0;
}
}
if(rotate == 1) { //만약 앞부분이 아래를 가리키고 있다면
while (!deq.empty()) { //덱에 요소들이 있다면, 덱이 비워질 때까지 또는
if(!deq.front()) break; //가림막이 나타나기 전까지 제거합니다.
deq.pop_front();
--ball;
}
}
if(rotate == 3) { //만약 뒷부분이 아래를 가리키고 있다면
while (!deq.empty()) { //덱에 요소들이 있다면, 덱이 비워질 때까지 또는
if(!deq.back()) break; //가림막이 나타나기 전까지 제거합니다.
deq.pop_back();
--ball;
}
}
}
}
풀이 : 덱
1. 쿼리의 개수를 입력 받습니다.
2. bool 변수들을 담을 덱을 준비합니다. true는 공 이며, false는 가림막입니다.
3. push => 덱의 뒤로 삽입
pop => 덱의 가장 앞의 요소를 제거
count => 덱에 있는 공의 개수나, 가림막의 개수를 출력
주의 : count가 입력 될 때마다, 덱의 모든 요소들을 탐색해서 개수를 출력하는 것은 너무 오래걸리기에, 미리 변수를 준비해 둔다음 삽입하면 증가, 제거되면 1감소하도록 따로 만들어 놓습니다.
rotate => 회전시킵니다. 위 코드에선 rotate라는 변수를 따로 만들어서 앞이 3시에 있다면 0, 6시는 1, 9시는 2, 12시는 3으로 두고, 명령이 떨어 질 때마다 값을 증가시키거나, 감소시켰습니다.
4. 만약 덱이 세로로 서있다면 (앞이 6시, 12시 방향을 가리키고 있음)
앞이 아래 일 때는, 덱에 요소가 없게되거나, 가림막이 나오기 전까지 가장 앞에서 부터 공을 제거하며
앞이 맨 위 (즉 뒤가 아래) 인 경우, 덱에 요소가 없게되거나, 가림막이 나오기 전까지 가장 뒤에서 부터 공을 제거합니다.
28078번: 중력 큐
처음에 왼쪽이 큐의 뒤, 오른쪽이 큐의 앞인 가로 방향의 빈 큐가 존재한다. 이 큐에서 공이나 가림막을 하나씩 큐의 뒤에 삽입하거나, 큐의 가장 앞에 있는 공이나 가림막을 꺼낼 수 있으며, 큐
www.acmicpc.net
'c++ > BAEKJOON' 카테고리의 다른 글
c++ 11725 트리의 부모 찾기 (백준) (0) | 2023.09.17 |
---|---|
c++ 19591번 독특한 계산기 (백준) (0) | 2023.09.08 |
c++ 14897번 서로 다른 수와 쿼리 1 (백준) (0) | 2023.07.14 |
c++ 26086번 어려운 스케줄링 (백준) (0) | 2023.07.09 |
c++ 2912번 백설공주와 난쟁이 (백준) (0) | 2023.07.08 |
- Total
- Today
- Yesterday
- C언어
- 1835
- XOR
- 세그먼트 트리
- 최대공약수
- 누적합
- 그래프
- 덱
- BFS
- find
- 최소 스패닝 트리
- Segment Tree
- java
- 그리디
- Lazy Propagation
- 정렬
- DP
- C++
- 백준
- 플로이드
- union
- 오프라인 쿼리
- Krustal
- 기하학
- 누적 합
- 브루트포스
- 1835번
- DFS
- 스택
- PASCAL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |