[algorithm] 백준 1021번 회전하는 큐

2026. 1. 17. 21:27·algorithm/덱
반응형

 

#include <iostream>
#include <deque>
#include <vector>
using namespace std;

int main() {
    int n,m,x;
    cin >> n >> m;
    int cnt=0;
    vector<int> v2;
    deque<int> d;
    for(int tmp=1; tmp<n+1; tmp++) d.push_back(tmp);
    for(int tmp=0; tmp<m; tmp++)
        {
            cin >> x;
            v2.push_back(x);
        }

    for(int tmp : v2)
        {
            int count = 1;
            for(int tmp2 : d)
                {
                    if(tmp2 == tmp) break;
                    else count++;
                }

            while(1)
                {
                    if(d.front() == tmp)
                    {
                        d.pop_front();
                        break;
                    }

                    if(d.size()%2 == 0) // 짝수크기일 때
                    {
                        if(count <= (d.size()/2))
                        {
                            d.push_back(d.front());
                            d.pop_front();
                            cnt++;
                        }
                        else
                        {
                            d.push_front(d.back());
                            d.pop_back();
                            cnt++;
                        }
                    }
                    else // 홀수일 때
                    {
                        if(count <= (d.size()/2)+1)
                        {
                            d.push_back(d.front());
                            d.pop_front();
                            cnt++;
                        }
                        else
                        {
                            d.push_front(d.back());
                            d.pop_back();
                            cnt++;
                        }
                    }
                    
                }            
        }
    cout << cnt;
    return 0;
}

 

우선 뽑아내려고 하는 수를 벡터에 넣고

1 ~ N까지의 원소를 가진 덱을 만든다

 

뽑아내려고 하는 수의 위치에 따라

2번 연산을 사용할 지 3번 연산을 사용할 지가 결정되므로

뽑아내려고 하는 수의 처음 위치를 count 변수로 지정한다

 

그 후 뽑아내려고 하는 수가 맨 앞에 올 때까지

2번 혹은 3번 연산을 반복해서 수행하는데

덱의 크기가 짝수일 때와 홀수일 때  가운데 쪽에 위치한 원소를

2번 연산쪽으로 처리할지 3번 연산쪽으로 처리할 지 나뉘므로 유의해서 구현해야한다

연산을 한 번 수행할 때마다 cnt 변수를 1씩 증가시켜

최종적으로 몇 번의 연산을 하였는 지 도출해낼 수 있다.

 

덱의 크기가 짝수일 때와 홀수일 때를 구분지어서 구현해야하는 부분에서

오류가 많았고 발상적인 실수도 많았던 것이 아쉬웠다

조금 더 차분히 생각하고 머릿속을 정리해가면서

발상을 떠올리고 구현해야할 것 같다.

반응형

'algorithm > 덱' 카테고리의 다른 글

[algorithm] 백준 10866번 덱  (0) 2026.01.17
'algorithm/덱' 카테고리의 다른 글
  • [algorithm] 백준 10866번 덱
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    게시판
    오프라인 학습
    주성분변환
    알고리즘
    git
    DL
    github
    AI
    ML
    연결리스트
    인공지능
    그레디언트 클리핑
    Java
    딥러닝
    Spring Boot
    머신러닝
    홀드아웃 검증
    list
    Aimers
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[algorithm] 백준 1021번 회전하는 큐
상단으로

티스토리툴바