[Swift] [54일차] 2396_LEET 펠린드롬판단

·2025년 1월 30일
0

SwiftAlgorithm

목록 보기
57/105

2396. Strictly Palindromic Number


문제설명

  1. 정수 n이 주어지고
  2. 2진수 ~ n-2진수까지 정수n(주어진건10진수)을 변환했을 때 전부다 펠린드롬이면 return해라

펠린드롬 ?

거꾸로해도 같은결과가 나오면된다. 비쵸비 -> 비쵸비 , 이효리 -> 이효리 같은거

그래서 예시를 빌리자면
`9 -> 1001 은 거꾸로해도 1001이니까 일단 2진수는 통괴.... 3진수는 ? 이런식으로 n-2까지 돌아봐주면된다.


문제풀이

1. 그래서 결국에는 진수로 교환하는거 쉽게 할 수 있니? 를 묻는 정도의 쉬운 문제였던 것 같다.

이전 기초문제에서 학습했듯이

String(숫자, radix: 바꾸고싶은 진수)

를 써주면 쉽게 원하는 진수로 바꿀 수 있기 때문에 2...n-2로 순환 돌면서 하면 간단할 듯?

2. 또한 String자체를 뒤집기는 무리가 있다보니 Array()로 감싸주고 한쪽은 reversed()해서 비교되게끔 해줬다.

Array(k) == Array(k).reversed()

최종코드

class Solution {
    func isStrictlyPalindromic(_ n: Int) -> Bool {
        for i in 2 ... n - 2 {
            let k = String(n, radix: i)
            if Array(k) == Array(k).reversed() {
                continue
            }
            else {
                return false
            }
        }

        return true
    }
}

타인의코드

  1. 내가 풀면서 살짝 궁금했던 것은 다들 비교를 어떻게 해줄 것인가? 였기때문에 같은 분포에 속한 분의 코드를 찾아봤다.
class Solution {
    func isStrictlyPalindromic(_ n: Int) -> Bool {
        var n1 = String(100)
        var arr = Array(n1)
        var left = 0 , right = arr.count - 1
        while(left < right){
            if arr[left] == arr[right]{
                left += 1
                right -= 1
            }
            else{
                return false
            }
        }
        return true
    }
}

left,right를 써줘서 양쪽에서 좁혀주는 방식을 취했다.
좀 모범답안을 볼때마다 느끼는건데 이 투포인터 기법이 꽤나 자주 등장하는 것 같다. 앞으로는 이 투포인터도 항상 고려대상으로 생각해야겠다고 느꼈다.

profile
기억보단 기록을

0개의 댓글