<문제 설명>
앞으로 읽으나 뒤로 읽으나 똑같은 문장을 회문이라고 한다.
예를 들어 “기러기”는 거꾸로 읽어도 “기러기”이다.
이를 이용하여 “뒤집어 더하기 암호”라는 것을 개발했다.
뒤집어 더하기 암호는 입력받은 숫자를 뒤집어서 더했을 때, 그 수가 회문이 되면 정상적인 암호이고, 회문이 아니라면 비정상적인 암호로 처리한다.
예를 들어 195는 뒤집은 수 591과 더하면 786이 되므로 비정상적인 암호이다.
이와는 달리 5214는 뒤집은 수 4125와 더하여 9339가 되어 정상적인 암호임을 알 수 있다.
한 숫자를 입력받아서 정상적인 암호인지 아닌지를 판단하는 프로그램을 작성하시오.
<입력>
첫 번째 줄에 정수 n이 입력된다.
( 1≤n≤10,000 )
<출력>
정상적인 암호라면 "YES"
비정상적이라면 "NO"를 출력한다.
<입력 예시>
5214
<출력 예시>
YES
< 1617 : 뒤집어 더하기 -- 소스코드 >
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package ReverseNumber;
import java.util.Scanner;
public class ReverseNumber {
// 입력한 숫자와 역순 숫자의 합을 담는 정수
private int sum;
// sum의 길이를 담기 위한 정수
private int length;
// 입력한 숫자를 역순으로 만들어주는 메소드
public static int reverse(int num){
int result = 0;
while(num != 0){
result = result * 10 + num % 10;
num /= 10;
}
return result;
}
public ReverseNumber() {
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력하세요 \n범위는 1부터 10000까지...\n");
int num = sc.nextInt();
// 입력한 num의 역순출력
System.out.println(reverse(num));
// 입력한 num과 역순의 합
int sum = (num+reverse(num));
System.out.println("'"+sum+"'");
// num과 그 역순의 합이
// 일의 자리 인가? length == 1
// 십의 자리 인가? length == 2
// 백의 자리 인가? length == 3
// 천의 자리 인가? length == 4
// 길이를 알기 위해서
// length 사용 -- (int)(Math.log10(sum)+1);
length = (int)(Math.log10(sum)+1);
if(length == 1) {
System.out.println("YES");
} else if(length == 2) {
// 일의 자리와 십의 자리의 숫자가 같으면!?
// "YES" 출력
if((sum%10) == (sum/10)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
} else if(length == 3) {
// 일의 자리와 백의 자리의 숫자가 같으면!?
// "YES" 출력
if((sum%10) == (sum/100)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
} else if(length == 4) {
// 일의 자리와 천의 자리의 숫자와 십의 자리와 백의 자리의 숫자가 같으면!?
// "YES" 출력
if( (sum%10) == (sum/1000) && ((sum/10)%10) == ((sum/100)%10)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
public static void main(String[] args) {
new ReverseNumber();
}
}
|
cs |
'Algorithm > Code_Up' 카테고리의 다른 글
<Java CodeUp 1108 문제: 반복 출력하기 2> (0) | 2020.07.26 |
---|---|
<Java CodeUp 1107 문제: 반복 출력하기 1> (0) | 2020.07.26 |
<Java CodeUp 1412 문제 : 알파벳 개수 출력하기> (0) | 2020.07.17 |
<Java CodeUp 1406 문제 : love> (0) | 2020.07.17 |
<Java CodeUp 1289 문제 : 가장 큰 운동장> (0) | 2020.07.16 |