PS

BOJ 31421 : 호떡 뒤집기

lickelon 2024. 2. 23. 22:38
  • 문제 링크 : boj.kr/31421
  • 난이도 : G1
  • 태그 : 애드혹, 해 구성하기
 

31421번: 호떡 뒤집기

프라이팬 위에는 $N$개의 호떡이 일렬로 놓여 있다. 각각의 호떡은 앞면이 흰색, 뒷면이 갈색이다. 처음에 모든 호떡은 앞면이 보이는 상태이다. 이때, 호떡 요리사인 현준이는 다음 절차에 따른

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;
    cin >> n;
    string s;
    cin >> s;
    if(s[n-1] == 'B') {
        vector<pii> arr;
        for(int i = 0; i < n; i++) {
            if(s[i] == 'W') {
                arr.push_back({i, -1});
                while(i < n && s[i] == 'W') {
                    i++;
                }
                arr[arr.size()-1].second = i;
            }
        }
        if(arr.size() == 0) {
            cout << -1;
        }
        else if(arr[0].first == 0) {
            if(arr.size() == 1) {
                cout << -1;
            }
            else {
                cout << arr.size() * 2 - 1 << "\n";
                cout << arr[1].second << "\n";
                cout << arr[0].second << "\n";
                cout << arr[1].first << "\n";
                for(int i = arr.size() - 1; i > 1; i--) {
                    cout << arr[i].second << "\n";
                    cout << arr[i].first << "\n";
                }
            }
        }
        else {
            cout << arr.size() * 2 << "\n";
            cout << arr[0].second << "\n";
            cout << arr[0].first << "\n";

            for(int i = arr.size() - 1; i > 0; i--) {
                cout << arr[i].second << "\n";
                cout << arr[i].first << "\n";
            }
        }
    }
    else {
        vector<pii> arr;
        for(int i = 0; i < n; i++) {
            if(s[i] == 'B') {
                arr.push_back({i, -1});
                while(i < n && s[i] == 'B') {
                    i++;
                }
                arr[arr.size()-1].second = i;
            }
        }
        if(arr.size() == 0) {
            cout << 0;
        }
        else {
            if(arr[0].first == 0) {
                cout << arr.size() * 2 - 1 << "\n";
                cout << arr[0].second << "\n";
            }
            else {
                cout << arr.size() * 2 << "\n";
                cout << arr[0].first << "\n";
                cout << arr[0].second << "\n";
            }
            for(int i = 1; i < arr.size(); i++) {
                cout << arr[i].first << "\n";
                cout << arr[i].second << "\n";
            }
        }
    }
    return 0;
}

풀이

케이스 별로 나눠서 풀었다.

 

한 번의 작업을 수행했을 때, 양 쪽의 호떡의 색이 달라진다는 것을 발견한다면 더 나은 풀이를 찾을 수 있다.

'PS' 카테고리의 다른 글

BOJ 1788 : 피보나치 수의 확장  (1) 2024.02.25
BOJ 2559 : 수열  (0) 2024.02.24
BOJ 31418 : 스펀지  (0) 2024.02.22
BOJ 31423 : 신촌 통폐합 계획  (0) 2024.02.21
BOJ 6504 : 킬로미터를 마일로  (0) 2024.02.20