1번 숫자 골라내기

1번 숫자 골라내기

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;        
}

cs


6) 기타


4번째줄의 ^ 연산자는 C언어에서의 XOR(⊕)연산자이다.