알고리즘 문제/BOJ
1802번 종이접기
parkit
2020. 3. 31. 18:56
728x90
반응형
https://www.acmicpc.net/problem/1802
복습 생각
비슷한 문제 : https://hsdevelopment.tistory.com/517
겹쳐지는 부분의 합은 반드시 1이다. 즉, 서로 같으면 안 된다.
이때, 가운데 값은 비교하지 않는다. 가운데 값은 0, 1 중 아무 숫자나 와도 상관없다.
그저 겹쳐지는 부분만을 비교하면 된다.
예를 들어,
1101100 일 때는
(인덱스 숫자로 나타내었음. [0] ~ [6])
[0] vs [6]
[1] vs [5]
[2] vs [4]
비교하고,
[0] vs [2]
를 비교하면 된다.
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include<bits/stdc++.h> using namespace std; int main() { //freopen("C:\\Users\\park7\\Desktop\\buba.in.6", "r", stdin); cin.tie(0); int tc; cin >> tc; for (int t = 0; t < tc; t++) { string s; cin >> s; if (s.length() == 1) { printf("YES\n"); continue; } int len = s.length(), idx = len / 2; bool stop = false; while (idx != 0) { for (int i = len - 1, j = 0; i > idx; i--, j++) { if (s[i] == s[j]) { stop = true; break; } } if (stop) { break; } len /= 2; idx /= 2; } if (stop) { printf("NO\n"); } else { printf("YES\n"); } } return 0; } | cs |
728x90
반응형