★ 28278 스택 2 ★
//28278
#include <iostream>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, order, num;
cin >> N;
stack<int> s;
while(N--){
cin>>order;
if (order==1){
cin>>num;
s.push(num);
}
else if(order==2){
if(!s.empty()){
cout << s.top() << '\n';
s.pop();
}
else{
cout << -1 << '\n';
}
}
else if(order == 3){
cout << s.size() << '\n';
}
else if(order == 4){
if(s.empty()){
cout << 1 << '\n';
}
else{
cout << 0 << '\n';
}
}
else{
if(!s.empty()){
cout << s.top() << '\n';
}
else{
cout << -1 << '\n';
}
}
}
return 0;
}
★ 18258 큐 2 ★
//18258
#include <iostream>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, num;
string order;
cin >> N;
queue<int> q;
while(N--){
cin >> order;
if(order == "push"){
cin >> num;
q.push(num);
}
else if(order == "pop"){
if (!q.empty()){
cout << q.front() << '\n';
q.pop();
}
else{
cout << -1 << '\n';
}
}
else if(order == "size"){
cout << q.size() << '\n';
}
else if(order == "empty"){
if (q.empty()){
cout << 1 << '\n';
}
else{
cout << 0 << '\n';
}
}
else if(order == "front"){
if (!q.empty()){
cout << q.front() << '\n';
}
else{
cout << -1 << '\n';
}
}
else{
if(!q.empty()){
cout << q.back() << '\n';
}
else{
cout << -1 << '\n';
}
}
}
return 0;
}
★ 2164 카드2 ★
//2164
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
queue<int> q;
for(int i=1;i<=N;i++){
q.push(i);
}
while(q.size()>1){
q.pop();
q.push(q.front());
q.pop();
}
cout << q.front() << '\n';
return 0;
}
🥦 queue를 for문으로 돌릴 때 while(!q.empty())를 활용해 q.front()로 출력해서 확인하면 된다.
★ 11866 요세푸스 문제 0 ★
//11866
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, K, cnt;
queue<int> q;
cin >> N >> K;
cnt = K;
for(int i = 1; i < N+1; i++){
q.push(i);
}
cout << '<';
while(q.size()>0){
cnt = K-1;
while(cnt--){
q.push(q.front());
q.pop();
}
if(q.size()>1){
cout << q.front() << ", ";
}
else{
cout << q.front();
}
q.pop();
}
cout << '>';
return 0;
}
🥦 원 순열 문제는 한 개를 기준으로 처음과 끝이 정해져 있으므로 queue 자료구조 많이 사용. 주어진 대로 front()와 push(), pop() 순서에 맞게 잘 구현하면 된다.
'C, C++ > 🥈 BOJ' 카테고리의 다른 글
(C++) ★Backtracking Intermediate I - 3 Solved★ (2) | 2024.11.15 |
---|---|
(C++) ★Set/Map Upper-Intermediate I - 1 Solved★ (0) | 2024.11.15 |
(C++) ★Number Theory Intermediate I - 2 Solved★ (0) | 2024.11.15 |
(C++) ★Set/Map Intermediate I - 5 Solved★ (2) | 2024.11.14 |
(C++) ★Sorting Intermediate I - 5 Solved★ (0) | 2024.11.14 |
댓글