0. [c++] 백준 |
https://www.acmicpc.net/problem/15927
1. 풀이 |
이 문제는 입력으로 들어온 문자열을 쪼개어 만들수 있는 문자열 중 가장 긴 회문이 아닌 문자열의 길이를 구하는 문제이다.
이 길이를 구하기 위해서는 3가지 경우에 수로 나뉜다.
1. 애초에 회문이 아닌 경우.
이 경우에는 바로 문자열의 길이를 출력하면 된다.
2. 회문인데 모든 글자가 일치하는 경우
이 경우는 어떠한 경우를 찾아보더라도 모두 회문이므로 -1을 출력한다.
3. 회문인데 모든 글자가 일치하지는 않는 경우
이 경우는 1자리만 줄이고 회문을 검사해보면 대칭이 깨지게되어 회문이 아니게 된다.
즉 (문자열의 길이 - 1)을 출력하면 된다.
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 | #include<iostream> #include<algorithm> #include<string> using namespace std; int check_not_palindrome(const string& N) { int size = N.size(); for (int i = 0; i < size / 2; i++) { if (N[i] != N[size - i - 1]) return size; } for (int i = 1; i < size; i++) { if (N[0] != N[i]) { return size - 1; } } return -1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); string N; cin >> N; cout << check_not_palindrome(N); return 0; } | cs |
3. 참고 |
질문이나 지적 있으시면 댓글로 남겨주세요~
도움 되셨으면 하트 꾹!
728x90
반응형
'<백준> > |c++| easy' 카테고리의 다른 글
[c++] 백준 15651 N과 M(3) (백트래킹인데 조금 수정) (0) | 2020.01.10 |
---|---|
[c++] 백준 10870 - 피보나치 수 5(재귀대신 반복) (0) | 2020.01.09 |
[c++] 백준 2630 - 색종이 만들기(분할 정복) (0) | 2019.08.29 |
[c++] 백준 2164 - 카드2(큐, 덱, deque) (0) | 2019.08.29 |
[c++] 백준 10773 - 제로(스택, vector) (0) | 2019.08.28 |