미숙한 블로그 주인이 코딩테스트 문제를 풀어가는 과정을 담은 글입니다. 이 풀이가 효율적인 풀이가 아닐 수 있으며, 부정확한 정보가 많이 있을 수 있습니다. 보완해야할 점이 있다면 댓글로 남겨주세요!
https://school.programmers.co.kr/learn/courses/30/lessons/12904
가장 긴 팰린드롬
문제
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.
문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.
제한사항
- 문자열 s의 길이 : 2,500 이하의 자연수
- 문자열 s는 알파벳 소문자로만 구성
풀이
입출력 예시
풀이
두 부분을 나눠서 생각해줘야한다.
팰린드롬의 길이가 홀수라면 자신의 앞 뒤가 일치하는지를 체크,
팰린드롬의 길이가 짝수라면 자신과 앞이 일치하는지를 체크해줘야한다.
#include <string>
using namespace std;
int solution(string s) {
int answer = 0;
s += "0";
int s_len = s.length();
for (int i = 1; i < s_len; i++) {
int left = i - 1;
int right = i + 1;
int count_1 = 1;
int count_2 = 0;
bool check_1 = false;
bool check_2 = false;
while (left >= 0 && right < s_len) {
if (s[left] == s[right]) {
count_1 += 2;
}
else {
check_1 = true;
}
if (s[left] == s[right - 1]) {
count_2 += 2;
}
else {
check_2 = true;
}
if (check_1 && check_2) {
break;
}
left--;
right++;
}
answer = max(answer, max(count_1, count_2));
}
return answer;
}
'코딩 테스트(Coding test) > Lv. 3' 카테고리의 다른 글
[프로그래머스/C++] 다단계 칫솔 판매 (0) | 2022.07.18 |
---|---|
[프로그래머스/C++] 숫자 게임 (0) | 2022.07.18 |
[프로그래머스/C++] [1차] 셔틀버스 (0) | 2022.07.12 |
[프로그래머스/C++] 자물쇠와 열쇠 (0) | 2022.07.11 |
[프로그래머스/C++] 순위 (0) | 2022.07.11 |