일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- it 이슈
- 신문스크랩
- IT 트렌드
- 프로그래머스
- 신문 스크랩
- 리얼클래스
- 인앱결제
- 카카오
- KT
- 백준
- SSAFYcial
- 네트워크 관리사 2급 실기
- 구글
- 네트워크 관리사 2급
- IT 동향
- 싸피
- 코딩테스트
- 네트워크 관리사
- 우테코
- it 뉴스
- python
- 코딩테스트 연습
- 싸피셜
- SSAFY 7기
- java 객체지향 프로그래밍
- html
- 코테
- 백준위
- Java
- SSAFY
- Today
- Total
개발자일걸요..?
18258번 큐2 본문
문제링크 : www.acmicpc.net/problem/18258
18258번: 큐 2
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
버전 1. vector를 이용해 Q class를 만들어서 진행(시간 초과)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Q {
public:
vector<int> v;
void push(int x) { v.push_back(x); }
void pop() {
if (v.size() == 0) { cout << "-1\n"; }
else {
cout << v.front() << "\n";
vector<int>::iterator iter = v.begin();
v.erase(iter);
}
}
void size() {cout << v.size() << "\n";}
void empty() {
if (v.size() == 0) { cout << "1\n"; }
else { cout << "0\n"; }
}
void front() {
if (v.size() == 0) { cout << "-1\n"; }
else { cout << v[0] << "\n"; }
}
void back(){
if (v.size() == 0) { cout << "-1\n"; }
else { cout << v[v.size()-1] << "\n"; }
}
};
int main() {
int N = 0;
cin >> N;
Q q;
while (N--) {
cin.tie(0);
cin.sync_with_stdio(0);
string commend = "";
cin >> commend;
if (commend == "push") {
int a = 0;
cin >> a;
q.push(a);
}
else if (commend == "pop") { q.pop(); }
else if (commend == "size") { q.size(); }
else if (commend == "empty") { q.empty(); }
else if (commend == "front") { q.front(); }
else if (commend == "back") { q.back(); }
}
return 0;
}
버전 2. main에서 vector로 queue 구현(시간 초과)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int N = 0;
cin >> N;
vector<int>v;
while (N--) {
cin.tie(0);
cin.sync_with_stdio(0);
string commend = "";
cin >> commend;
if (commend == "push") {
int a = 0;
cin >> a;
v.push_back(a);
}
else if (commend == "pop") {
if (v.size() == 0) { cout << "-1\n"; }
else {
cout << v[0] << "\n";
v.erase(v.begin());
}
}
else if (commend == "size") { cout << v.size() << "\n"; }
else if (commend == "empty") {cout << v.empty() << "\n";}
else if(commend == "front"){
if (v.size() == 0) { cout << "-1\n"; }
else { cout << v.front() << "\n"; }
}
else if (commend == "back") {
if (v.size() == 0) { cout << "-1\n"; }
else { cout << v.back() << "\n"; }
}
}
return 0;
}
버전 3. STL <queue>사용 (메모리 : 8412KB 시간 : 384ms)
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main() {
cin.tie(0);
cin.sync_with_stdio(0);
int N = 0;
cin >> N;
queue<int> q;
int a = 0;
while (N--) {
string commend = "";
cin >> commend;
if (commend == "push") {
cin >> a;
q.push(a);
}
else if (commend == "pop") {
if (q.empty()) { cout << "-1\n"; }
else{
cout << q.front() << "\n";
q.pop();
}
}
else if (commend == "size") { cout << q.size() << "\n"; }
else if (commend == "empty") { cout << q.empty() << "\n"; }
else if (commend == "front") {
if (q.empty()) { cout << "-1\n"; }
else {cout << q.front() << "\n";}
}
else if (commend == "back") {
if (q.empty()) { cout << "-1\n"; }
else { cout << q.back() << "\n"; }
}
}
return 0;
}
cin.tie(0); 와 cin.sync_with_studio(0);는 입출력 시간을 덜어주는 코드이다.
+) 참고 : su-m.tistory.com/7
ios::sync_with_stdio(false), cin.tie(NULL) 사용법과 설명
1. ios::sync_with_stdio(false); C 표준 stream과 C++ 표준 stream의 동기화를 끊습니다. 기본적으로, 모든 표준 stream들은 동기화 되어있습니다. 그래서 우리는 C와 C++의 입출력방식을 자유롭게 혼용할 수 있..
su-m.tistory.com
버전 4. STL <deque> 사용 (메모리 : 8416KB 시간 : 412ms)
#include <iostream>
#include <deque>
#include <string>
using namespace std;
int main() {
int N = 0;
cin >> N;
deque<int>dq;
int a = 0;
string commend = "";
while (N--) {
cin.tie(0);
cin.sync_with_stdio(0);
cin >> commend;
if (commend == "push") {
cin >> a;
dq.push_back(a);
}
else if (commend == "pop") {
if (dq.empty()) { cout << "-1\n"; }
else {
cout << dq.front() << "\n";
dq.pop_front();
}
}
else if (commend == "size") { cout << dq.size() << "\n"; }
else if (commend == "empty") { cout << dq.empty() << "\n"; }
else if (commend == "front") {
if (dq.empty()) { cout << "-1\n"; }
else { cout << dq.front() << "\n"; }
}
else if (commend == "back") {
if (dq.empty()) { cout << "-1\n"; }
else { cout << dq.back() << "\n"; }
}
}
return 0;
}
+) 참고 : hyeonstorage.tistory.com/325
[STL] deque 정리 및 예제
[STL] deque 정리 및 예제 deque 컨테이너는 vector 컨테이너와 기능과 동작이 비슷한 컨테이너로 vector의 단점을 보완하는 몇가지 특징을 갖는다. deque도 vector 컨테이너와 같이 시퀀스 컨테이너이며 배
hyeonstorage.tistory.com
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
11866 요세푸스 문제0 (0) | 2021.02.25 |
---|---|
2164번 카드2 (0) | 2021.02.24 |
17298번 오큰수 (0) | 2021.02.23 |
1874번 스택 수열 (0) | 2021.02.22 |
4949번 균형잡힌 세상 (0) | 2021.02.22 |