※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts