프로그래머스 12904번 가장 긴 팰린드롬 Kotlin

: ) YOUNG·2025년 5월 21일
1

알고리즘

목록 보기
467/475

프로그래머스 12904번 가장 긴 팰린드롬 Kotlin

https://school.programmers.co.kr/learn/courses/30/lessons/12904

문제



생각하기


  • 팰린드롬 문제이다.

  • 투 포인터를 활용한 문자열 탐색



동작

투 포인터 개념을 활용해 팰린드롬을 찾는다.


        for(i in 0 until N - 1) {
            val len1 = s.twoPointer(i, i) // 홀수길이의 팰린드롬 찾기
            val len2 = s.twoPointer(i, i + 1) // 짝수길이의 팰린드롬 찾기
            val curMaxLen = Math.max(len1, len2)
            
            if(curMaxLen > (end - start + 1)) {
                start = i - (curMaxLen - 1) / 2
                end = i + curMaxLen / 2
            }
        }

for문을 통해 모든 부분을 탐색하며 홀수, 짝수 팰린드롬을 찾아낸다.





결과


코드



import java.util.*

class Solution {
    private var N = 0
    
    fun solution(s: String): Int {
        var answer = 0
        
        // 투 포인터
        N = s.length
        println(N)
        
        if(N == 1) {
            answer = 1
        }
        
        var start = 0
        var end = 0
        for(i in 0 until N - 1) {
            val len1 = s.twoPointer(i, i)
            val len2 = s.twoPointer(i, i + 1)
            val curMaxLen = Math.max(len1, len2)
            
            answer = Math.max(answer, curMaxLen)
        }
    
        return answer
    } // End of solution()
    
    private fun String.twoPointer(parmLeft : Int, parmRight : Int) : Int {
        val curString = this
        var left = parmLeft
        var right = parmRight
        
        while(left >= 0 && right < N && curString[left] == curString[right]) {
            left--
            right++
        }
        
        return right - left - 1
    } // End of twoPointer()
} // End of Solution class

0개의 댓글