#include <stdio.h>
int main(int argc, char** argv)
{
int target;
int ans = 0;
int shiftIndex = 0;
scanf(\"%d\", &target);
for(int i = 1; i <= target; i *= 2 )
{
int cnt = (target / (i * 2)) * i;
int mod = target % (i * 2);
cnt += (mod >= i) ? (mod - (i - 1)) : 0;
ans |= (cnt & 0x01) << shiftIndex++;
}
printf(\"%x\", ans);
return 0;
}
먼지 알겠지? 카운트 이용한거임
비트 자리수가 시간복잡도임
B까지 구하고 A-1 까지 구해서 XOR하면됨 ㅅㄱ
지금보니 cnt 필요없네 mod 하나만 있으면 충분
신기하네 개념 어렵다 나는 1부터 시작했을때 4가 반복될 때마다 (n, 1, n-1, 0)이 나오는 규칙을 이용해서 풀었는데. 그래서 N%4 해서 나머지 숫자에 따라 저 4개중에 하나 반환해서 A-1 , B XOR ㅇㅇ
아 물론 1부터 N까지 하면서 XOR 했을때의 규칙
내껄로하면 시간복잡도 O(1) 나오긴함
ㅇㅇ 나는 그냥 프로그래밍적으로 2분 정도 고민해서 푼거고 손으로 해보고 규칙 찾았으면 활용한거면 잘했지 뭐