본문 바로가기

PS/boj

백준 3678 카탄의 개척자 (C++)

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

 

3678번: 카탄의 개척자

"카탄의 개척자"는 많은 사람들이 즐기는 보드게임이다. 게임을 시작하려면, 먼저 게임판을 랜덤으로 만들어야 한다. 게임판은 육각형 타일로 이루어져 있으며, 각 타일은 자원을 하나씩 포함하

www.acmicpc.net

육각형 모양의 경로를 생각해야하는 시뮬레이션 문제였습니다.

초기값 1을 넣어준후 주변 육각형 둘레로 감싸는 부분을 고려해서 풀었습니다. 바깥 육각형이 안쪽 육각형과 접하는 부분을 알아내야 하는데 저는 경로 순서를 좌표로 두고 각각 육각형의 변이 1씩 커지는걸 이용해서 안쪽과 바깥쪽 육각형 관계를 구했습니다.

육각형의 마지막을 이루는 타일은 첫 타일과 마주하므로 이에 주의하면 됩니다.

#include<stdio.h>
#include<vector>
#include<math.h>
#include<algorithm>
#include<bitset>
#include<string>
#include<iostream>
#include<map>
#include<set>
#include<stack>
#include<queue>
#include<functional>
using namespace std;
void fast_io() {
  cin.tie(0)->sync_with_stdio(0);
}
int solve[30001];
int cnt[6];
int main(){
    fast_io();
    int T;
    solve[0]=1;
    cnt[1]=1;
    int k=1;
    bool chk=false;
    for(int x=6;x<=5000;x+=6){
        int base=k-(x-6);
        for(int y=k;y<k+x;y++){
            if(y>=10002){
                chk=true;
                break;
            }       
            vector<int> v(6,0);
            v[solve[y-1]]++;
            if(y==k){
                v[solve[y-(x-6)]]++;
            }
            else{
                if(y==k+x-1) v[solve[k]]++;
                if(y%(x/6)==0){
                    v[solve[base]]++;
                }
                else{
                    v[solve[base]]++;
                    v[solve[base+1]]++;
                    base++;
                }
            }
            priority_queue<pair<int,int>> pq;
            for(int z=1;z<=5;z++){
                if(!v[z]){
                    //if(y==21) cout<<z<<" "<<cnt[z]<<'\n';
                    pq.push({-cnt[z],-z});
                }
            }
            solve[y]=-pq.top().second;
            cnt[solve[y]]++;
        }
        k+=x;
        if(chk) break;
    }
    cin>>T;
    while(T--){
        int N;
        cin>>N;
        cout<<solve[N-1]<<'\n';
    }
}

'PS > boj' 카테고리의 다른 글

백준 2069 보이는 산맥 (C++)  (0) 2022.07.15
백준 1994 등차수열 (C++)  (0) 2022.07.14
백준 1744 수 묶기 (C++)  (0) 2022.07.12
백준 23325 마법천자문 (C++)  (0) 2022.07.10
백준 10838 트리 (C++)  (0) 2022.07.09