728x90
[c++] 백준 1343 : 폴리오미노
🥈실버 5
https://www.acmicpc.net/problem/1343
접근
입력값을 순회하면서 X를 만나면 count 변수를 1씩 증가시킨다.
XX를 처리해야 하는 경우는 크게 두가지가 있다.
1. XX 다음 X가 오지 않을때(.이 오거나 맨 끝의 경우)
-> AAAA가 들어갈 때까지 더 기다릴 필요가 없으므로 BB를 박는다.
2. XX 다음 X가 올 때
-> 더 기다리면 AAAA를 박을 수 있으므로 처리하지 않는다.
이렇게 진행하다가 count가 4가 되면 AAAA를 박는다.
.이 오는 경우의 처리
count가 홀수가 되는 경우 -1 출력하고 프로그램을 종료한다. (XXX. 같은 경우에는 AAAA나 BB를 박을 수 없는 상황이기 때문)
정답으로 출력할 변수에 .을 더한다.
count를 0으로 초기화한다.
입력받은 반복문의 순회가 끝나고 난 후
예제 케이스처럼 X가 입력값으로 오는 경우를 생각해보면, 단순히 count를 1만 시키고 반복문을 빠져 나왔기 때문에
count변수가 0이 아닌 경우에도 -1을 출력하도록 해주어야 한다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
string input;
cin >> input;
int cnt = 0;
string result;
input += ' ';
for (int i = 0; i < input.size()-1; i++) {
if (input[i] == 'X') {
cnt++;
}
if (cnt == 2 && (input[i+1] != 'X')) { // BB박기
result += "BB";
cnt = 0;
}
if (cnt == 4) {
result += "AAAA";
cnt = 0;
}
if (input[i] == '.') {
if (cnt % 2 == 1) {
cout << -1;
return 0;
}
result += '.';
cnt = 0;
}
}
if (cnt != 0) cout << -1;
else cout << result;
return 0;
}
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[c++] 백준 1758: 알바생 강호 (0) | 2023.04.08 |
---|---|
[c++] 백준 2217: 로프 (0) | 2023.04.08 |
[c++] 백준 21919 : 소수 최소 공배수 (0) | 2023.04.06 |
[c++] 백준 2075 : N번째 큰 수 (0) | 2023.04.04 |
[c++] 백준 11286 : 절댓값 힙 (0) | 2023.04.03 |