코테/프로그래머스

[프로그래머스/Lv. 3] 가장 긴 팰린드롬 (JAVA)

imname1am 2023. 11. 29. 00:50
반응형

🔺 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

🔺 코드

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
import java.util.*;
 
class Solution {
    static String s;
    
    public int solution(String s)     {
        this.s = s;
 
        for(int i = s.length() ; i > 0 ; i--) {    // 팰린드롬 길이 (🔔 큰 범위부터 줄이기 !)
            for(int j = 0 ; j+<= s.length() ; j++) {  // 팰린드롬 검사 시작 위치
                if(isPalindrome(j, j + i - 1)) {        // 해당 범위 시작부터 끝까지 비교
                    return i;
                }
            }
        }
 
        return 0;
    }
    
    private static boolean isPalindrome(int start, int end) {
        while(start <= end) {
            if(s.charAt(start++!= s.charAt(end--))
                return false;
        }
        
        return true;        
    }
}
cs

 

 

🧩  해결 아이디어

• 문자열, 구현

1.  팰린드롬 길이를 가장 큰 길이에서부터 범위를 1씩 좁혀가며 가장 긴 팰린드롬의 길이를 구한다.

2. 팰린드롬의 길이만큼 문자들을 비교하여 같지 않다면, 다음 시작점으로 넘어간다.

3. 팰린드롬이라면, 이 때의 길이가 가장 긴 길이이므로 바로 출력하고 종료한다.

 

 

💥 유의사항

 StringBuilder로 팰린드롬인지 판별하면 효율성 쪽에서 틀린다.........

아래처럼..

 

효율성 틀린 코드 확인하기 (72.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
import java.util.*;
 
class Solution {
    static String s;
    
    public int solution(String s)     {
        this.s = s;
        int answer = 1;
 
        for(int i = 0 ; i < s.length() ; i++) {
            for(int j = i ; j < s.length() ; j++) {
                if(isPalindrome(i, j)) {
                    int tmp = s.substring(i, j + 1).length();
                    answer = Math.max(answer, tmp);
                }
            }
        }
 
        return answer;
    }
    
    private static boolean isPalindrome(int l, int r) {
        String str1 = s.substring(l, r + 1);
        StringBuilder sb1 = new StringBuilder(str1);
        String str2 = sb1.reverse().toString();
        
        if(str1.equals(str2))
            return true;
        return false;        
    }
}
cs

 

 


🔺 다른 풀이들

- 팰린드롬이 짝수개인지 홀수개인지 구분해서 구하는 메소드

 

프로그래머스: 가장 긴 팰린드롬 [JAVA]

문제 링크 https://programmers.co.kr/learn/courses/30/lessons/12904 코딩테스트 연습 - 가장 긴 팰린드롬 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문

presentnine.tistory.com

 

- 그림 풀이 굿.. (복습용)

 

프로그래머스 - (Java) 가장 긴 팰린드롬

https://programmers.co.kr/learn/courses/30/lessons/12904 코딩테스트 연습 - 가장 긴 팰린드롬 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substrin

moons-memo.tistory.com

 

- 문자열이 팰린드롬인지 판별할 때 for문 사용

 

[프로그래머스]가장 긴 팰린드롬 - JAVA

[프로그래머스]가장 긴 팰린드롬 programmers.co.kr/learn/courses/30/lessons/12904 코딩테스트 연습 - 가장 긴 팰린드롬 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어

moonsbeen.tistory.com


💬 느낀 점

머리가 어지럽네예.....

2번째로 풀 때 해결방법은 비슷하게 생각해낸 것 같긴 한데

결국 혼자 풀지는 못했네예..

담엔 혼자 이렇게 풀어보겠심더..

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ 풀이 참고

 

[코딩테스트] 프로그래머스 - 가장 긴 팰린드롬(Java)

레벨: 3언어: 자바(Java)해당 문제는 알고리즘이랑 자료구조 필요없이 루프돌리면 구할수 있는문제이다.이 문제를 풀때 효율성에 몇번 걸렸었는데 주의할점이 있다.String substring() or StringBuilder reve

velog.io

 

✔ StringBuilder .reverse() 메소드 활용법 (얘 때문에 효율성 통과는 못 했지만..)

 

[StringBuilder] StringBuilder.reverse() 이용해서 문자열 뒤집기

Javascript문법 공부중 this.message = this.message.split('').reverse().join('') 라는 얄미운 문법을 발견. 'Java엔 저런게 없을까' 라는 생각과 바로 시작 된 구글링. Java 또한 StringBuilder의 reverse() 메소드를 이용하

ahndding.tistory.com

 

반응형