[2주차 - 코딩테스트] 새로운 암호화

출처

https://level.goorm.io/exam/49090/새로운-암호화/quiz/1

 

문제 설명

예진이는 암호학 수업을 들으면서 다양한 암호화 기법들을 익혔습니다. 그러던 도중 자신만의 암호화 기법을 만들어보고 싶은 생각이 들었습니다. 그리고 이러한 암호화 방법에 대해 생각해보았습니다.

key: 임의의 정수 A, B (A ≤ B )
result: A, A+1, A+2, ..., B를 모두 xor한 값

예를 들어 key로 2와 4를 정했다면 2 xor 3 xor 4 = 5가 됩니다. 본디 암호화란 복호화가 가능하여 결과값을 통해 key를 알아낼 수 있어야 하지만 아직 그런 걸 고려할 수 있을 정도로 예진이는 많이 배우지 못했습니다.

 

일단 이렇게 만들어진 예진이의 암호화 방법에서 key로 사용되는 정수 A와 B를 알 때, 암호화한 값이 무엇인지 출력하는 프로그램을 작성해주세요.

 

입력

첫째 줄에 정수 A와 B가 공백으로 구분되어 주어집니다.

( 단, 0 ≤ A ≤ B ≤ 1015 )

 

출력

A와 B 사이의 모든 정수를 xor했을 때 결과 값을 출력합니다.

 

입/출력 예시

예시 1

입력

2 4

출력

5

예시 2

입력

111 222

출력

176

예시 3

입력

12345 12345

출력

12345

예시 4

입력

500 9999

출력

0

 

코드

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		
		String[] inputs = input.split(" ");
		
		int start = Integer.parseInt(inputs[0]);
		int end = Integer.parseInt(inputs[1]);
		
		long temp = 0;
		
		switch((int)(start % 4)){
			case 0 :
				temp = start;
				break;
			case 1 :
				temp = 1;
				break;
			case 2 :
				temp = (start +1);
				break;
			case 3 :
				temp = 0;
				break;
		}

		switch((int)(end % 4)){
			case 0 :
				temp ^= end;
				break;
			case 1 :
				temp ^= 1;
				break;
			case 2 :
				temp ^= (end + 1);
				break;
			case 3 :
				temp ^= 0;
				break;
		}
		
		System.out.println(temp ^ start);
		
	}
	
}

 

 

댓글(0)

Designed by JB FACTORY