728x90
반응형
간단한 그리디 문제였다.
그래도 한번에 코드를 짜지는 못했는데, 내가 했던 실수는...
if (count == 2)
{
result += "BB";
count = 0;
}
else if (count == 4)
{
result += "AAAA";
count = 0;
}
반복문 안에 넣어주었던 코드의 일부이다.
input
XXXXXX
output
=> BBBBBB
answer
=> AAAABB
count가 2가 될 때 가장 먼저 체크해주고 초기화해주므로 AAAA가 나오지 않는 것이다. 바꿔준 코드는
// count가 2이면서
// 마지막 i이거나
// 다음 문자가 '.'일 때
if (count == 2 && ((i == input.size() - 1) || (i + 1 < input.size() && input[i + 1] == '.')))
{
result += "BB";
count = 0;
}
else if (count == 4)
{
result += "AAAA";
count = 0;
}
마지막 문자가 i라는 조건은
input
=> XX
answer
=> BB
를 충족시키기 위해 넣었고, 다음 문자가 '.'이라는 조건은
input
=> XXXXXX.XX.XXXX
answer
=> AAAABB.AAAA
를 충족시키기 위해 넣었다. '.'이 될 때 2인지 먼저 확인하는 것.
-1이 나올 조건은 '.'이 나왔을 때 count가 2나 4가 아니거나 마지막에 count가 0이 아닐 때이다.
전체 코드
#include<iostream>
using namespace std;
int main()
{
string result;
string input;
int count = 0;
cin >> input;
for (int i = 0; i < input.size(); ++i)
{
if (input[i] == 'X') count++;
// X가 2개이고
// 마지막 반복이거나
// 다음 문자가 '.'일 때 BB
if (count == 2 && ((i == input.size() - 1) || (i + 1 < input.size() && input[i + 1] == '.')))
{
result += "BB";
count = 0;
}
// 그렇지 않고 X의 개수가 4일 때
else if (count == 4)
{
result += "AAAA";
count = 0;
}
if (input[i] == '.')
{
// 바뀌지 못한 X가 있 으므로 실패
if (count != 0)
{
cout << -1;
return 0;
}
else
{
result.push_back('.');
}
}
}
if (count == 0)
cout << result;
// 바뀌지 못한 X가 있으므로 실패
else
cout << -1;
}
728x90
반응형
'알고리즘 문제풀이 > 그리디' 카테고리의 다른 글
[백준][C++] 11508 2+1 세일 (0) | 2022.11.04 |
---|---|
[백준][C++] 1758 알바생 강호 (0) | 2022.11.04 |
[백준][C++] 13305 주유소 (0) | 2022.11.04 |
[백준][C++] 2217 로프 (0) | 2022.11.04 |
[백준][C++] 14916 거스름돈 (0) | 2022.11.03 |