정수 n과 또 다른 정수 start가 주어졌다고 가정해 봅시다. 이때 nums라는 배열을 만들어야 하는데, 각 요소는 nums[i] = start + 2*i(i는 0부터 시작)라는 규칙을 따르며, 배열의 크기는 n입니다. 그다음 nums 배열의 모든 요소에 대해 비트 단위 XOR 연산을 수행한 결과를 구하면 됩니다.
예를 들어 입력이 n = 6, start = 2라면, 배열은 [2+2*0, 2+2*1, ..., 2+2*5], 즉 [2, 4, 6, 8, 10, 12]가 됩니다. 이 배열의 모든 요소를 차례대로 XOR하면 결과는 14가 됩니다.
접근 방법
배열을 실제로 생성하지 않고도 반복문만으로 해결할 수 있습니다. 각 요소가 이전 요소보다 항상 2씩 크다는 점을 이용하면, 현재 값에 2를 더해가며 누적으로 XOR 연산을 적용하는 방식입니다. 구체적인 단계는 다음과 같습니다.
- count 변수를 start 값으로 초기화합니다.
- n-1이 0보다 큰 동안 다음 작업을 반복합니다.
- count에 (2 + start) 값을 XOR 연산하여 저장합니다.
- n의 값을 1 감소시킵니다.
- start의 값을 2 증가시킵니다.
- 반복이 끝나면 최종 결과인 count를 반환합니다.
이 방법은 별도의 배열 메모리 없이 O(n) 시간 복잡도로 문제를 해결할 수 있어 효율적입니다.
Python 예제 코드
아래 예제 코드를 통해 더 자세히 이해해 보겠습니다.
def solve(n, start):
count = start
while n-1 > 0:
count ^= 2 + start
n -= 1
start += 2
return count
n = 6
start = 2
print(solve(n, start))
입력
6, 2
출력
14
위 코드에서 solve 함수는 첫 번째 요소인 start부터 시작해 매번 2씩 증가하는 값을 순서대로 XOR 연산에 누적합니다. n=6, start=2인 경우 2 → 4 → 6 → 8 → 10 → 12 순서로 연산이 진행되며, 최종적으로 14가 출력되는 것을 확인할 수 있습니다.