Post

Java 예제: 4자리 특정 암호 찾기

이 예제는 아래 문제를 자바 코드를 사용해 푸는 문제입니다.

1
2
3
4
5
6
7
8
9
10
조건 : 종이와 펜을 사용하지 말것. 즉 수학으로 풀지 말 것 

4자리 비밀번호 맞추기 
1. 1번째 자리의 수는 4번째 자리의 수보다 2더 크다. 
2. 2번째 자리의 수가 3번째 자리의 수보다 작다. 
3. 4자리 모두 0이 아니다. 
4. 비밀번호 + 비밀번호 뒤집은 수 = 16456 이다. 
예) 1234 + 4321 = 16456 

결과는 답만 나와선 안되고, 답을 구하기까지의 과정이 반영된 코드가 나와야 합니다.

문제에서 1번째 자리 수는 1000(천)의 자리수를 뜻합니다. 4번째 자리수는 1의 자리수입니다. 조건에 따라 문제를 풀면 되므로 예제 자체는 어려울 것이 없습니다만, 코드가 길어질 수 있으므로 약간 최적화를 해보겠습니다.

1번째 자리 수는 4번째 자리 수보다 2 크다고 했으므로 1번째 자리 수는 0, 1이 올 수 없다. ☛ 2000부터 시작합니다.

2번째 자리의 수가 3번째 자리의 수보다 작다. 또한 4자리수 모두 0이 아니라고 한다. ☛ 3121부터 시작하며 숫자에  0이 있을 경우 패스(continue)할지를 고려할 수 있습니다. 3121인 이유는 숫자에 0이 올 수 없는데 첫 번째 자리수는 4번째 자리수보다 2가 커야 하기 때문입니다.

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
public class CodeBreaking {
 
    public static void main(String[] args) {
        
  /*조건 : 종이와 펜을 사용하지 말것. 즉 수학으로 풀지 말 것 
  4자리 비밀번호 맞추기
  1. 1번째 자리의 수는 4번째 자리의 수보다 2더 크다.
  2. 2번째 자리의 수가 3번째 자리의 수보다 작다.
  3. 4자리 모두 0이 아니다.
  4. 비밀번호 + 비밀번호 뒤집은 수 = 16456 이다.
  ex) 1234 + 4321 = 16456
  결과는 답만 나와선 안되고, 답을 구하기까지의 과정이 반영된
  코드가 나와야 합니다.*/
        
        int password = 0;
        
        for(int i = 3121; i <= 9999; i++) {
        	int nDigit = i % 10;
        	int dDigit = (i / 10) % 10;
        	int mDigit = (i / 100) % 10;
        	int kDigit = (i / 1000) % 10;
        	if(nDigit == 0 || dDigit == 0 || mDigit == 0) {
        		continue;
        	}
        	boolean con1 = (kDigit - nDigit == 2);
        	boolean con2 = (dDigit > mDigit);
        	boolean con3 = (i + (nDigit * 1000 + dDigit * 100 + mDigit * 10 + kDigit) == 16456);
        	if(con1 && con2 && con3) {
        		System.out.println("Code has been broken!");
        		System.out.println("\nPassword: " + i);
        		break;
        	}
        	
        }
 
    }
 
}

참고로 정수를 10으로 나머지(%)를 하면 맨 마지막 자리수를 반환합니다. 이 점을 이용해 십(10)의 자리가 어떤 숫자인지를 구하고 싶다면 i10으로 나눈 값에 % 10, 백(100)의 자리를 구하고 싶다면 i100으로 나눈 값에 % 10 을 하면 됩니다.

정답은 9137입니다.

This post is licensed under CC BY 4.0 by the author.