[SWEA] #10762 사탕 나누기

wonyu·2021년 12월 18일
0

algorithm

목록 보기
13/25

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXSVhGoqED8DFAQT

풀이 방법


모든 사탕 봉지 속 사탕 개수를 XOR 연산했을 때 결과가 0이면, 그 중 어떤 값을 선택하든 "해당 값 제외 모든 숫자를 XOR 연산한 값 == 해당 값" 이 된다.
따라서 우선 사탕 개수를 정렬한 뒤 모든 숫자를 xor 연산 한 결과가 0이면 리스트의 첫 값을 출력하고, 결과가 0이 아니면 NO를 출력하는 방식으로 풀었다.

코드

T = int(input())
for tc in range(1, T+1):
    N = int(input())
    candies = sorted(list(map(int, input().split())))
    xor_sum = 0

    for i in range(N):
        xor_sum ^= candies[i]

    if xor_sum == 0:
        print('#{} {}'.format(tc, sum(candies[1:])))
    else:
        print('#{} NO'.format(tc))

배운 것

  • xor 연산을 할 때 사용하는 연산자는 ^
  • 결과에 영향을 줄까봐 xor_sum을 candies의 첫 값으로 초기화했는데 0으로 초기화해도 상관 없었다.
  • 어차피 for문을 돌며 xor 연산을 해야 한다면 정렬을 미리 하지 않고 for문 내에서 candies의 합과 최솟값을 구하는 게 실행시간이 미세하게 더 빨랐다.

0개의 댓글