리그캣의 개발놀이터

code ground(코드 그라운드) - 숫자 골라내기 본문

알고리즘/코드그라운드

code ground(코드 그라운드) - 숫자 골라내기

리그캣 2018. 1. 19. 20:21


숫자 골라내기


초등학교 학생인 정우와 석환이는 최근 학교에서 두 이진수의 XOR연산에 대해 배웠다.


둘은 매우 영특한 학생이라 새로 배운 연산을 갖고 이리저리 장난치기 시작했다.


다만 석환이는 정우에게 일을 시키는 것을 좋아하는지라 다음과 같은 제안을 했다.


"내가 N개의 10진수를 주면, 주어진 숫자들 중에서 '홀수' 번만 나타나는 숫자들을 모둔 XOR 한 결과를 구해줘."


예를 들어 '2, 5, 3, 3'이 주어진 경우 '2'와 '5'는 1번 (홀수 번) 나타나고 '3'은 2번(짝수 번) 나타나므로


홀수 번 나타난 '2'와 '5'를 XOR 한 결과를 구해야 하고,


'2, 5, 4, 4, 2, 4, 5, 3'이 주어질 경우 '2'와 '5'는 2번 나타나고, '3'은 3번, '4'는 1번 나타나므로


홀수 번 나타난 '3'과 '4'를 XOR 한 결과를 구해야 한다.


정우는 제안을 수락했지만, 가면 갈수록 매번 XOR 연산을 수행하는 일에 지치고 있다.


정우를 도와서 주어진 문제를 해결하는 프로그램을 작성하시오.


풀이


#include <stdio.h>
#include <stdlib.h>
int main()
{
//N개의 10분수를 받아야함
int N, i, k,xor, ten[100], tex[11] = { 0, }, tmp[100] = {0,},j=0;
scanf_s("%d", &N);
for (i = 0; i < N; i++) {
scanf_s("%d", &ten[i]); //N개의 값을 받은 후
k=ten[i]; //k에다가 각 i번째 값을 대입 후
tex[k]++; //tex[k]값을 하나씩 증가
}
for (i = 1; i <= 11; i++) {
if ((tex[i] % 2) == 1) { //홀수 일시
//이곳에 xor하는 코드를 넣어야 하나..
tmp[j] = i;
j++;
}
}
xor = tmp[0];
j = 1;
while (tmp[j] != 0) {
xor ^= tmp[j];
j++;
}
printf("%d", xor);
return 0;
}


Comments