알고리즘 문제 해결/BOJ

[그리디] BOJ 1343 폴리오미노

jmkimmessi 2021. 10. 16. 00:00
반응형

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

 

1343번: 폴리오미노

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

www.acmicpc.net

 

문제 해결 알고리즘

 

X가 연달아 있는 부분에서 X의 개수가 홀수이면 -1을 출력해주고 짝수이면 4개씩 A로 채우다 2개가 남으면 B로 채워준다. '.'은 그대로 출력해준다.

 

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

int main(){
  string str, result = ""; cin >> str;
  string A = "AAAA", B = "BB";

  int cnt = 0;
  for(int i=0;i<str.size();i++){
    if(str[i] != 'X') {
      if(cnt % 2 != 0) {
        cout << -1;
        return 0;
      }
      for(int j=0;j<cnt/4;j++) result += A;
      if(cnt%4==2) result += B;
      
      result = result + '.';
      cnt = 0;
    }
    else cnt++;
  }

  if(cnt % 2 != 0) {
    cout << -1;
    return 0;
  }
  for(int j=0;j<cnt/4;j++) result += A;
  if(cnt%4==2) result += B;

  cout << result;

}
반응형