티스토리 뷰

PS

백준 1343. 폴리오미노

tose33 2021. 8. 12. 15:47

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

 

1343번: 폴리오미노

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

www.acmicpc.net

 

연속된 X의 갯수를 카운트해서

홀수면 -1 출력후 종료하고

짝수면 적절하게 폴리오미노를 삽입한다.

 

주어진 문자열의 마지막을 식별하기 위해 마지막에 'Y'를 삽입했다.

 

#include <iostream>
#include <string>
using namespace std;

string s;
string ans = "";

int main()
{
    cin >> s;
    s.push_back('Y'); // 문자열의 마지막 표시

    int Xcnt = 0;
    // 연속된 X의 갯수를 카운트해서 홀수면 -1 출력 후 종료
    // 짝수면 적절한 폴리오미노 삽입
    for(int i = 0; i < s.size(); i++)
    {
        if(s[i] == 'X')
            Xcnt++;

        if(s[i] == '.' || s[i] == 'Y')
        {
            // X갯수 짝수일때
            if(Xcnt % 2 == 0)
            {
                while(Xcnt > 0)
                {
                    if(Xcnt >= 4)
                    {
                        for(int j = 0; j < 4; j++)
                            ans.push_back('A');
                        Xcnt -= 4;
                    }
                    else if(Xcnt == 2)
                    {
                        for(int j = 0; j < 2; j++)
                            ans.push_back('B');
                        Xcnt -= 2;
                    }
                }
            }
            else
            {
                cout << -1;
                return 0;
            }
            if(s[i] == '.')
                ans.push_back('.');
        }

    }


    cout << ans;
}

'PS' 카테고리의 다른 글

백준 11501. 주식  (0) 2021.08.13
백준 9237. 이장님 초대  (0) 2021.08.13
백준 1041. 주사위  (0) 2021.08.11
백준 11497. 통나무 건너뛰기  (0) 2021.08.11
백준 15903. 카드 합체 놀이  (0) 2021.08.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함