2396. Strictly Palindromic Number
문제설명
- 정수 n이 주어지고
- 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
}
}
타인의코드
- 내가 풀면서 살짝 궁금했던 것은 다들 비교를 어떻게 해줄 것인가? 였기때문에 같은 분포에 속한 분의 코드를 찾아봤다.
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
를 써줘서 양쪽에서 좁혀주는 방식을 취했다.
좀 모범답안을 볼때마다 느끼는건데 이 투포인터 기법이 꽤나 자주 등장하는 것 같다. 앞으로는 이 투포인터도 항상 고려대상으로 생각해야겠다고 느꼈다.