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
- 코테
- Union-find
- 보석쇼핑
- 스마일게이트
- 식단
- 카카오
- 중반부
- BFS
- LIS #Algorithm #요소추적
- c++
- 투포인터
- BaekJoon
- 코딩테스트
- 카카오인턴
- 백준
- Algorithm
- 1편
- 삼성 #코테 #2020상반기 #c++
- Smilegate
- 서버개발캠프
- 알고리즘
- 소감
- 유니온파인드
- IBK기업은행 #기업은행 #디지털 #직무 #정리
Archives
- Today
- Total
짱아의 개발 기록장
백준 1254번. 팰린드롬 만들기(c++) / 문자열 본문
반응형
모기업 코드페스티벌에 참여했는데,,,, 유일하게 풀지 못했던 문제;;;; ㅂㄷㅂㄷ
팰린드롬인지 아닌지를 판별하는 문제는 쉽게 풀었었는데
만드는 문제는 처음 접해서 당황했다.... 끝나고 백준을 찾아보니 역시나 똑같은 문제가 있었다 ㅋㅋㅋ
그래서 다른 분의 코드를 참조해서 다시 풀어보았다!
[메인 로직]
해결방법은 인덱스가 0인 지점부터 차례대로 조사하며 팰린드롬이 되는 최소한의 시작 위치를 찾는 것이다.
어차피 중간에 팰린드롬이 생기는 것은 아무 의미가 없기 때문에특정 인덱스부터 문자열의 맨 마지막까지 팰린드롬이 되는 부분 문자열을 찾으면, (특정인덱스+원래 문자열의 크기)가 최소 팰린드롬의 길이가 되는 것이다.
aabcaa인 경우에는 맨 뒤의 aa만 팰린드롬이 가능하다 따라서 aa는 그대로 두고 나머지 aabc만 뒤집어서 추가해주면 가장 짧은 팰린드롬 문자열이 생성된다. => 길이는 4+6 = 10
aabcba를 생각해보자. 맨 앞의 a를 제외하고 나머지 abcba가 팰린드롬이므로 마지막에 a만 추가해주면 팰린드롬이 성립한다. => 길이는 1+6 = 7
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 | // 팰린드롬 만들기 #include <iostream> using namespace std; string s; int answer = 0; bool isPalindrom(string str) { int cnt = str.size()/2; for(int i=0; i<cnt; i++){ if(str[i]!=str[str.size()-1-i]){ return false; } } return true; } int main() { cin>>s; answer = s.size()*2-1; for(int i=0; i<s.size(); i++){ string temp = s.substr(i, s.size()-i); if(isPalindrom(temp)){ answer = s.size()+i; break; } } cout<<answer<<"\n"; return 0; } | cs |
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
백준 14501번. 퇴사(c++) / 그리디 (0) | 2021.02.10 |
---|---|
백준 1937번. 욕심쟁이 판다(c++) / DFS+DP (0) | 2021.01.09 |
백준 14002번. 가장 긴 증가하는 부분 수열 4(c++) / LIS (0) | 2020.09.23 |
백준 10775번. 공항(c++) / 유니온파인드 (0) | 2020.08.31 |
백준 1854번. K번째 최단 경로(c++) / 다익스트라 (0) | 2020.08.31 |
Comments