Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 풀이
- 게리멘더링2
- 백준 17779
- 구현
- 스택의 특징
- heap
- 버킷 정렬
- 5397
- 백준 17471
- dfs
- 원판 돌리기
- 자료구조
- 시간 복잡도
- 백준 1406
- 해시 구현
- 백준 17822
- 백준 1158
- ㅣ풀이
- 해시구현
- Stack 이란
- 1764
- qorwns
- 백준 2447
- 별 찍기 10
- C/C++ 구현
- 조세퍼스 순열
- 백준 5397
- c#
- AVL 시간 복잡도
- 백준
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 1021]회전하는 큐 본문
https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 순서대로 주어진다. 위치는 1보다 크거나 같고, N보다 작거나 같은 자연수이다.
www.acmicpc.net
요구사항
1. 최소 연산으로 주어진 숫자를 꺼내기
풀이
1. 현재 뽑고자 하는 수가 어디에 있는지 찾기
2. 최소가 될 수 있도록 뽑는다
- size/2보다 클 경우 뒤에서 앞으로 이동 시켜주고, 아닐 경우 앞에서 뒤로 이동시킨다.
3. 정답 출력
#include <iostream>
using namespace std;
int q[10000];
struct queue {
int head = 5000;
int tail = 5000;
int size = 0;
int pop_front()
{
size--;
return q[head++];
}
int pop_back()
{
size--;
return q[--tail];
}
void push_back(int data)
{
q[tail++] = data;
size++;
}
void push_front(int data)
{
q[--head] = data;
size++;
}
int front()
{
return q[head];
}
int back() {
return q[tail];
}
};
int cnt = 0;
queue Myq;
void solve(int f)
{
int num = 0;
//cout << "solove" << endl;
// cout << endl;
for (int i = Myq.head; i < Myq.tail; i++)
{
num++;
if (q[i] == f)
{
break;
}
}
double size = Myq.tail- Myq.head;
// cout << "num " << num <<" "<< size<< endl;
if (num < size/2+1)
{
// cout << "low" << endl;
for (int i = 1; i < num; i++)
{
cnt++;
int now= Myq.pop_front();
Myq.push_back(now);
// cout << "now" << now << endl;
}
Myq.pop_front();
}
else {
// cout << "high" << endl;
for (int i = 0; i <= size-num; i++)
{
cnt++;
int now = Myq.pop_back();
Myq.push_front(now);
// cout << "now" << now << endl;
}
Myq.pop_front();
}
}
int main()
{
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
Myq.push_back(i);
}
for (int i = 0; i < m; i++)
{
int x;
cin >> x;
solve(x);
}
cout << cnt << endl;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 1976] 여행 가자 (0) | 2020.01.02 |
---|---|
[백준 1717] 집합의 표현 (0) | 2020.01.02 |
[백준 1427] 소트인사이드 (0) | 2019.12.19 |
[백준 10989] 수 정렬하기3 (0) | 2019.12.18 |
[백준 2750] 수 정렬하기 (0) | 2019.12.17 |
Comments