1번 숫자 골라내기 클릭시 CodeGround로 이동
1) 문제
2) 문제 설명
N개의 10진수가 입력된다.
입력된 숫자들 중에서 '홀수'번 입력된 숫자들만 XOR 한 결과는?
XOR 연산 결과 | |
입력값 | 출력값 |
(0,0) | 0 |
(0,1) | 1 |
(1,0) | 1 |
(1,1) | 0 |
XOR 연산자(베타적 논리합)는 논리 연산자로
두 이진수의 각 같은 자릿수 중 한 값만 1일경우 1을
나머지는 0으로 채운 새로운 이진수를 만드는 연산자이다.
(나중에 논리 연산파트를 따로 설명할 예정이다.)
즉, 1010 XOR 1101 = 0111 이라는 값이 나오는 것이다.
(XOR 연산 기호는 ⊕ 이지만 편의상 XOR이라고 적겠습니다.)
3) 풀이 과정
입력되는 수를 라고 한다면
로 계산하면 된다.
4) 핵심
! 같은 수를 XOR 연산하면 어떻게 될까?
1101 XOR 1101 = 0000
!! 0000과 다른 수를 XOR 연산하면 어떻게 될까?
0000 XOR 1010 = 1010
이 두가지 성질을 이용하면 짝수번 입력된 수는 0이므로
모든 수를 XOR연산하면 나오는 값이 홀수번 입력된 값들을 XOR연산 한 값이다.
5) 핵심 코드
1 2 3 4 5 | for (count = 0; count < N; count++) { scanf("%d", &value); Answer ^= value; } |
6) 기타
4번째줄의 ^ 연산자는 C언어에서의 XOR(⊕)연산자이다.