PS

BOJ 23085 : 판치기

lickelon 2024. 4. 6. 22:49
 

23085번: 판치기

판치기는 \(N\)개의 동전을 바닥에 놓고, 임의의 동전들을 뒤집는 것을 반복하여 모두 뒷면이 보이는 상태로 바꾸면 이기는 게임이다. 판치기 경력 20년에 빛나는 치훈이는 판치기 최고의 극의, "\

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n, k;
    cin >> n >> k;
    vector<int> visit(n+1, -1);

    string s;
    cin >> s;
    int cnt = 0;
    for(auto u : s) {
        if(u == 'H') cnt++;
    }
    visit[cnt] = 0;
    
    queue<int> _q;
    _q.push(cnt);
    while(!_q.empty()) {
        int h = _q.front(); _q.pop();
        int t = n - h;
        for(int i = 0; i <= k; i++) {
            if(t >= i && h >= k-i) {
                if(visit[h + i*2-k] != -1) continue;
                visit[h + i*2-k] = visit[h]+1;
                _q.push(h + i*2-k);
            }
        }
    }
    cout << visit[0];

    return 0;
}

풀이

앞면의 갯수를 기준으로 BFS를 해준다.

'PS' 카테고리의 다른 글

BOJ 20159 : 동작 그만. 밑장 빼기냐?  (0) 2024.04.08
BOJ 26651 : 팬램그  (1) 2024.04.07
BOJ 28449 : 누가 이길까  (0) 2024.04.05
BOJ 29810 : 배신자  (0) 2024.04.04
BOJ 10589 : 마법의 체스판  (0) 2024.04.03