사고쳤어요
[백준] 1343 폴리오미노(C++) 본문
링크: https://www.acmicpc.net/problem/1343
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
문제
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.
출력
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
풀이
보드판을 앞에서부터 'X'일 경우에는 카운터에 +1을 시킨다. 이후 카운터가 4가 될 때마다 'AAAA'를 추가해준다. (사전순으로 가장 앞서기 위해선 AAAA가 우선적으로 출력되어야 한다.)
이외에 '.'이 나올 때는 카운터가 0이면 '.'을, 2면 'BB.'을 추가하고 0 또는 2가 아니라면 -1을 출력한뒤 리턴해준다.
#include <iostream>
#include <string>
using namespace std;
int main(){
char board[51];
string answer;
cin >> board;
int counter = 0; // counter로 X의 개수 측정
for (int i = 0; i < 51; i++){
if (counter == 4){ // X가 4개이면 정답에 AAAA 추가 후 counter값 초기화
answer += "AAAA";
counter = 0;
}
if (board[i] == 'X'){ // X 이면 counter에 1 추가 후 진행
counter++;
continue;
}
else if (board[i] == '.'){ // . 이면 counter의 개수에 따라 진행
if (counter == 0){
answer += ".";
}
else if (counter == 2){
answer += "BB.";
counter = 0;
}
else{
cout << -1;
return 0;
}
}
else{ // board가 끝났을 때
if (counter == 0){
break;
}
else if (counter == 2){
answer += "BB";
break;
}
else{
cout << -1;
return 0;
}
}
}
cout << answer;
}
'백준 > Silver' 카테고리의 다른 글
[백준] 1012 유기농 배추(C++) (0) | 2023.03.08 |
---|---|
[백준] 1402 아무래도이문제는A번난이도인것같다(C++) (0) | 2023.02.10 |
[백준] 1340 연도진행바(C++) (0) | 2023.02.09 |
[백준] 1331 나이트 투어 (C++) (0) | 2023.01.19 |
[백준] 1064 평행사변형 (C++) (0) | 2023.01.18 |