반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 연결요소
- 6987
- Docker
- 기술면접
- 백트래킹
- BOJ
- upper_bound
- 성적평가
- 경력
- 물채우기
- 소프티어
- msSQL
- @P0
- 퇴사통보
- boj #19237 #어른 상어
- softeer
- 13908
- dfs
- OFFSET
- 매개변수탐색
- BFS
- 처우산정
- incr
- 파라메트릭
- compose
- 처우협의
- Kafka
- 백준
- 이분탐색
- 오퍼레터
Archives
- Today
- Total
기술 블로그
17609번 회문 본문
728x90
반응형
https://www.acmicpc.net/problem/17609
결국 완전한 회문이거나, 1개의 문자'만' 빼서 회문인지 판별하면 된다.
처음(0)과 끝(s.length() - 1)을 기준으로 같으면, ++left, --right 해주어 비교한다.
진행 중 s[left], s[right]가 다르다면(=13번 째 줄),
(코드에서는 변수명이 l, r로 바뀜. 설명 편의상 left, right로 말하는 것이다.)
그 기점을 기준으로 left + 1하여 ++left, --right하거나
right - 1하여 ++left, --right를 한다.
어차피 결국은 유사 회문은 단 1개만(달라진 기점) 무시하면 되기 때문이다.
위의 2가지 경우 모두 다르면, ret는 2가 될 것이다.
1개라도 같으면, ret는 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 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 52 | #include <bits/stdc++.h> using namespace std; int N; int palindrome(string s) { int ret = 0, left = 0, right = s.length() - 1; while (left <= right) { if (s[left] == s[right]) ++left, --right; else { int l = left, r = right; ++l; while (l < r) { if (s[l] != s[r]) { ++ret; break; } ++l; --r; } l = left, r = right; --r; while (l < r) { if (s[l] != s[r]) { ++ret; break; } ++l; --r; } return ret; } } return ret; } int main(void) { //freopen("C:\\Users\\park7\\Desktop\\sample_input.txt", "r", stdin); string s; scanf("%d", &N); getchar(); for (int i = 0; i < N; i++) { cin >> s; printf("%d\n", palindrome(s)); } return 0; } | cs |
728x90
반응형
'알고리즘 문제 > BOJ' 카테고리의 다른 글
5397번 키로거 (0) | 2019.10.21 |
---|---|
12865번 평범한 배낭 (0) | 2019.10.21 |
3190번 뱀 (0) | 2019.10.10 |
2529번 부등호 (0) | 2019.10.01 |
17505번 링고와 순열 (0) | 2019.09.30 |