※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1343번 문제인 폴리오미노이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1343
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
문제에서 사전순으로 가장 앞서는 답을 출력할 것을 요구하고 있으므로, greedy하게 X 4개가 연속으로 써진 것이 발견되면 A를, 4개를 채우지 못했지만 2개의 X가 연속으로 있고 .이 나왔다면 B를, 홀수개를 채워야 하는 상황이 나오면 -1을 출력해주자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string s; cin >> s;
s.push_back('.');
int slen = s.length();
bool chk = 0;
int cnt = 0;
int idx = 0;
while (idx < slen) {
if (s[idx] == '.') {
if (cnt == 2) {
cnt = 0;
s[idx - 2] = s[idx - 1] = 'B';
}
else if (cnt != 0) {
chk = 1;
break;
}
}
else {
cnt++;
if (cnt == 4) {
cnt = 0;
s[idx - 3] = s[idx - 2] = s[idx - 1] = s[idx] = 'A';
}
}
idx++;
}
s.pop_back();
if (chk) cout << -1;
else cout << s;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 20040 // C++] 사이클 게임 (0) | 2021.06.17 |
---|---|
[BOJ 17131 // C++] 여우가 정보섬에 올라온 이유 (0) | 2021.06.16 |
[BOJ 10422 // C++] 괄호 (0) | 2021.06.14 |
[BOJ 1670 // C++] 정상 회담 2 (0) | 2021.06.13 |
[BOJ 1057 // C++] 토너먼트 (0) | 2021.06.12 |