본문 바로가기

Algorithm/코드 풀이

LeetCode: 9번 (Palindrome Number) [JAVA]

문제 링크

https://leetcode.com/problems/palindrome-number/

 

Palindrome Number - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

풀이

전체적인 풀이 과정은 다음과 같다.

 

  1. 수가 음수이면 바로 false 반환, 한 자리수면 true 반환
  2. 그 이상의 수에 대해선 String으로 변환 후, 숫자 자릿수가 홀수 짝수에 대해 다르게 계산
  3. 홀수 자릿수의 경우 가운데를 제외한 양 옆의 숫자에서 시작해 쌍을 비교해 나가면 틀리면 false 반환, 이후엔 true 반환
  4. 짝수 자릿수의 경우 정가운데의 숫자 2개에서 시작해 쌍을 비교해 나가면 틀리면 false 반환, 이후엔 true 반환

 문제 자체가 어렵지 않은 단순 비교 문제이다. 주어진 수가 대칭인지를 파악하면 되기 때문에, 무조건 대칭이 불가능한 음수나 무조건 대칭인 한자릿수에 대해선 각각 false와 true를 반환하면 된다.

 그 이상의 수에 대해선 수의 대칭을 파악하면 되는데, 쉽게 길이와 인덱스를 사용하기 위해 주어진 int형 자료를 String으로 변환한다. 그 다음에는 숫자의 길이가 짝수냐 홀수냐에 따라 판별이 조금 달라지는데, 짝수의 경우 중심의 2개 숫자에서 그대로 시작하고 홀수의 경우 정가운데 수를 제외한 양 옆의 수에서 시작하여 대칭을 파악하며 하나씩 옮기면 된다.

 

class Solution {
    public boolean isPalindrome(int x) {
        int length = 1;

        if (x < 0) {//음수인 경우
            return false;
        } else if (x < 10) {//한자릿수인 경우
            return true;
        }

        String s = String.valueOf(x);//변환

        if (s.length() % 2 == 0) {//숫자의 길이가 짝수인 경우
            int left = s.length() / 2 - 1, right = s.length() / 2;

            while (left >= 0) {
                if (s.charAt(left) != s.charAt(right)) {
                    return false;
                }

                --left;
                ++right;
            }
        } else {//숫자의 길이가 홀수인 경우
            int left = s.length() / 2 - 1, right = s.length() / 2 + 1;

            while (left >= 0) {
                if (s.charAt(left) != s.charAt(right)) {
                    return false;
                }

                --left;
                ++right;
            }
        }

        return true;
    }
}

결과