혜랑's STORY

[BOJ_C++] 1343번 : 폴리오미노 본문

무지성 공부방/알고리즘 해결

[BOJ_C++] 1343번 : 폴리오미노

hyerang0125 2021. 8. 8. 16:06

code

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <vector>
#include <cmath>
#include <string>

using namespace std;

int sum(int list[], int start, int end) {
    int sum = 1;
    for (int i = start; i <= end; i++)
        sum *= list[i];
    return sum;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    string str; cin >> str;
    int cnt;
    for (int i = 0; i < str.length(); i++) {
        if (str[i] == '.') continue;
        
        cnt = 0;
        for (int j = i; j < str.length() && str[j] == 'X'; j++)
            ++cnt;
        
        if (cnt % 2) {
            printf("-1"); return 0;
        }

        while (cnt != 0) {
            if (cnt >= 4) {
                for (int j = 0; j < 4; j++)
                    str[i + j] = 'A';
                i += 4;
                cnt -= 4;
            }
            else {
                for (int j = 0; j < 2; j++)
                    str[i + j] = 'B';
                i += 2;
                cnt -= 2;
            }
        }
    }

    cout << str;

    return 0;
}
  • str을 입력받고 str의 길이만큼 for문을 실행한다.
  • 만약 str[i]의 값이 '.'과 같다면 폴리오미노로 덮으면 안되므로 continue를 통해 넘어간다.
  • 이후 '.'이 다시 나오기 전 까지 'X'의 개수를 세고, 그 수가 홀수라면 'AAAA' 또는 'BB'로 덮을 수 없다는 것을 의미하므로 '-1'을 출력하고 프로그램을 종료한다.
  • cnt가 0이 되기 전까지 만약 4보다 크다면 'AAAA'로 str의 값들을 바꿔주고, 작다면 'BB'로 바꿔준다.
  • 이때 잊지 않고 i의 값도 교환한 폴리오미노의 값(크기)만큼 증가시켜주어야 한다.

결과