문제링크 : https://www.acmicpc.net/problem/1343
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
string s, result;
int cnt;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> s;
for(int i=0; i<s.size(); i++)
{
if(s[i]=='X') cnt++;
if(s[i]=='.') //.인 경우
{
result += '.';
if(cnt%2) break; //앞이 홀수면 불가능
}
if(cnt==2 && s[i+1]!='X') //2칸 덮기
{
result += "BB";
cnt=0;
}
if(cnt==4) //4칸 덮기
{
result+="AAAA";
cnt = 0;
}
}
if(cnt%2) cout << -1; //뒤가 홀수면 불가능
else cout << result;
return 0;
}
문자열 내의 X의 갯수를 카운팅하며 체크해준다.
만약 현재 X의 갯수가 2개인데, 뒤에가 .이라면 2칸을 BB로 교체가 가능하므로 교체해준다.
만약 현재 X의 갯수가 4개라면 4칸을 AAAA로 교체가 가능하므로 교체해준다.
만약 현재 .인 상태라면 앞에 X의 갯수가 홀수인지 체크가 필요하다.
만약 홀수라면 교체가 불가능하기 때문에 바로 종료시킨다.
비슷한 경우로 뒤가 홀수인 경우도 불가능하다.
따라서 반복문을 마치고 X의 갯수가 홀수인지 다시 체크를 해주고 홀수면 -1을, 아니면 앞서 교체한 값이 담긴 result를 출력해준다.
'백준 > 실버' 카테고리의 다른 글
[백준 1495번] 기타리스트 (C++) (0) | 2024.02.11 |
---|---|
[백준 155991번] 1, 2, 3 더하기 6 (C++) (0) | 2024.02.10 |
[백준 9711번] 피보나치 (C++) (0) | 2024.02.07 |
[백준 1402번] 아무도이문제는A번난이도인것같다 (C++) (0) | 2024.02.05 |
[백준 17390번] 이건 꼭 풀어야 해! (C++) (0) | 2024.02.03 |