https://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는 알파벳 소문자로만 구성
입출력 예
s | answer |
abcdcba | 7 |
abacde | 3 |
입출력 예 설명
입출력 예 #1
4번째자리 'd'를 기준으로 문자열 s 전체가 팰린드롬이 되므로 7을 return합니다.
입출력 예 #2
2번째자리 'b'를 기준으로 aba가 팰린드롬이 되므로 3을 return합니다.
[풀이]
이 문제를 풀기 위해서는 몇 가지 조건이 있었다.
1. aba처럼 b를 중심으로 양쪽의 값이 같은가?
2. baab처럼 문자열의 양쪽의 값이 같은가?
3. abaaaaa abaaaaaa a은 기준이 되는 값이다. a를 기준으로 짝수로 찾을 것인가, 홀 수로 찾을 건이가?
EX) aaaaa같이 양쪽 값과 바로 오른쪽 값이 같을 경우 aaaaa 이렇게 찾을지 aaaaa 이렇게 찾을지 생각해봐야 한다.
위에 세 조건을 갖춰서 답을 찾는 과정을 거치면 된다.
[코드]
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
|
public int solution(String s) {
int oddCount = 0;
int evenCount = 0;
if(s.length() == 1) { //길이가 1이면 1반환
return 1;
}
for(int i = 0; i < s.length()-1; i++) {
if(i>0 && s.charAt(i-1) == s.charAt(i+1)) { //홀 수
int left = i-1;
int right = i+1;
int tempcount = 0;
while(0<= left && right <= s.length()-1) { //현재 값보다 왼쪽, 오른쪽 값이 같으면
if(s.charAt(left) == s.charAt(right)) {
tempcount++;
left -= 1;
right += 1;
}else {
break;
}
}
if(oddCount< tempcount) oddCount = tempcount;
}
if(s.charAt(i) == s.charAt(i+1)) { //짝 수
int left = i;
int right = i+1;
int tempcount = 0;
while(0<= left && right <= s.length()-1) { //현재값과 다음값이 같다면.
if(s.charAt(left) == s.charAt(right)) {
tempcount++;
left -= 1;
right += 1;
}else {
break;
}
}
if(evenCount < tempcount) evenCount = tempcount;
}
}
return oddCount < evenCount ? evenCount*2 : oddCount*2 +1;
}
|
cs |
느낀 점 : 처음 문제를 봤을 때 level 3 문제가 맞나 싶었다.. level 3문제 중 풀이 시간이 가장 빨랐고 어제 카카오 문제를 풀어서인지 쉽게 느껴졌다. 하지만 하다 보니 조건이 살짝? 까다로워서 몇 번 고쳐 적었다. 그리고 조금 고민하면 코드도 줄일 수 있을 것 같은데 다른 문제를 더 풀어보기 위해 최적화는 나중으로 미룬다.
*피드백은 언제나 환영입니다!
'코딩테스트 > 프로그래머스 level 3' 카테고리의 다른 글
[프로그래머스 level_3] 하노이의 탑 for JAVA (0) | 2020.04.29 |
---|---|
[프로그래머스 level_3] 거스름돈 for JAVA (0) | 2020.04.25 |
[프로그래머스 level_3] 보행자 천국 for JAVA (0) | 2020.04.23 |
[프로그래머스 level_3] 순위 for JAVA (0) | 2020.04.21 |
[프로그래머스 level_3] 등굣길 for JAVA (0) | 2020.04.20 |