도저히 생각나지 않아서 솔루션을 찾아봤다.
1.
xx010xx xx010xx xx101xx xx101xx
xx010xx xx101xx xx010xx xx101xx
이 경우에 중간에 있는 세로 두개만 바꾸는게 변환횟수를 최소화 하는 방법
2.
xx01xx
을 만나면 +1
저걸 보고 나서 직접 해보니 저게 최소한의 횟수를 구하는 방법인 건 알겠지만 이상하게 납득이 안간다. 나중에 다시 풀어봐야겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <iostream> #include <string> using namespace std; int n, ans; string s[2]; int main() { cin >> n; for (int i = 0; i < 2; i++) { cin >> s[i]; s[i] = '0' + s[i] + '0'; } for (int i = 0; i < n; i++) { if (((s[0][i] == '0' && s[0][i + 1] == '1' && s[0][i + 2] == '0') || (s[0][i] == '1' && s[0][i + 1] == '0' && s[0][i + 2] == '1')) && ((s[1][i] == '0' && s[1][i + 1] == '1' && s[1][i + 2] == '0') || (s[1][i] == '1' && s[1][i + 1] == '0' && s[1][i + 2] == '1'))) { s[0][i + 1] ^= 1; s[1][i + 1] ^= 1; ans++; } if (s[0][i] == '0' && s[0][i + 1] == '1') ans++; if (s[1][i] == '0' && s[1][i + 1] == '1') ans++; } cout << ans << '\n'; return 0; } | cs |
'BOJ' 카테고리의 다른 글
2149 암호 해독 (0) | 2017.10.30 |
---|---|
12835 삼거리 (0) | 2017.10.30 |
5619 세 번째 (0) | 2017.10.30 |
3758 KCPC (0) | 2017.10.30 |
1898 이전 수열은 어떤 수열일까 (0) | 2017.10.30 |