본문 바로가기

잡다한 기술

[알고리즘]팰린드롬(palindrome) 체크 알고리즘




# 문제


정수(int)가 주어지면, 팰린드롬(palindrome)인지 알아내시오. 

팰린드롬이란, 앞에서부터 읽으나 뒤에서부터 읽으나 같은 단어를 말합니다. 

단, 정수를 문자열로 바꾸면 안됩니다.


예제)

Input: 12345

Output: False


Input: -101

Output: False


Input: 11111

Output: True


Input: 12421

Output: True


-------------------


해당 문제는 팰린드롬 수를 체크하는 알고리즘을 짜는 것이다.

이전 알고리즘 문제보단 꽤 간단하게 풀수 있었다.

(단 음수일 경우 팰린드롬이 되지 않는다는것을 명심하자)



# 소스코드


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
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.Scanner;
 
/*
정수(int)가 주어지면, 팰린드롬(palindrome)인지 알아내시오. 
팰린드롬이란, 앞에서부터 읽으나 뒤에서부터 읽으나 같은 단어를 말합니다. 
(단, 정수를 문자열로 바꾸면 안됩니다.)
*/
public class Main {
    public static void main(String[] args) {
        // 초기화
        int Input = 0;
        boolean result = true;
        int InputLength = 0;
        Scanner SC = new Scanner(System.in);
        
        // 사용자에게 값을 입력 받는 부분
        System.out.print("팰린드롬수를 알아내기 위한 값을 입력해 주세요 : ");
        Input = SC.nextInt();
 
        // 입력 받은 값의 자릿수를 가져온다.
        InputLength = (int)Math.log10(Input) + 1;
 
        // 팰린드롬인지 아닌지 확인하는 과정
        for(int i = 1; i <= (InputLength / 2); i++) {
            // 음수 체크 과정
            if(Input < 0) {
                result = false;
                break;
            }
            
            if((int)(Input / (int)Math.pow(10, (InputLength - i))) == (Input%(int)Math.pow(10, i))) {
                // 양쪽 자릿수 값이 같을 때 그 부분을 없앤다.
                // 예 : 12321 => 232
                Input = (Input - ((int)(Input % (int)Math.pow(10, InputLength)) + (Input%(int)Math.pow(10, i)))) / 10;
            }else {
                result = false;
                break;
            }
        }
 
        System.out.print("결과 : " + result);
    }
}
cs



# 마무리


위 포스트는 제가 직접 제작한 것 입니다.

그렇기 때문에 틀린점이나 설명이 엉성한 점이 존재할 수 있습니다.

만약 틀린점이나 설명이 엉성한 부분이 존재하면 댓글로 알려주세요.

빠른 처리 하도록 하겠습니다.


티스토리 앱으로는 댓글 이용이 불가능 하므로 웹 브라우저로 봐 주세요

(URL : http://junprogramer.tistory.com/)


읽어주셔서 감사합니다.