(C++) 백준 2346 풍선 터뜨리기

mnaz·2022년 2월 12일

문제 및 풀이

https://www.acmicpc.net/problem/2346

평소에 별로 인풋이 없으니까 항상 비슷하게만 푸는거같다;;;;;ㅠ 공부점..
나는 첨에 풀땐 쉽게 deque 으로 구현했는데 다른풀이 보다가 괜찮은 풀이같아보여 복기한다 ~

vector랑 위치 나타내는 변수 pos 정의해서 구현하는 방법이다 .
이동하는 위치가 양수이면 현재위치 + (종이 숫자 -1) % 벡터 크기가 다음 위치이고
이동위치가 음수이면 현재 위치-종이 숫자 한것이 다음 위치이다. (음수면 양수 될떄까지 더한다.)

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

int N, x;
vector<pair<int ,int>> v;

int main(){

    cin>>N;

    for(int i=1; i<=N; i++) {
        cin>>x;
        v.push_back({x,i});
    }

    int pos=0;

    while(1){

        cout<<v[pos].second<<" ";
        int next = v[pos].first;
        v.erase(v.begin()+pos);

        if(v.empty()) break;

        if(next>0) pos = (pos+(next-1))%(int)v.size();
        else {
            pos += next;
            while(pos<0) pos+=v.size();
        }

    }

}

0개의 댓글