문제
https://school.programmers.co.kr/learn/courses/30/lessons/147354
위 문제는 문제 조건을 착실히 구현하면 비교적 해결할 수 있는 문제입니다. 그러나 저의 경우 비트연산자(XOR)를 기억하지 못해 이를 참조하며 해결하였는데요. 문제 조건을 먼저 살펴보도록 하겠습니다.

조건 2를 통해 가장 먼저 정렬을 해주어야 함을 알 수 있습니다. lambda를 활용해 정렬의 우선순위를 정해주어 이를 해결할 수 있습니다.
조건 3을 통해 정렬된 데이터를 순회하며 (데이터 % 인덱스)의 값을 누적시켜야 함을 알 수 있습니다.
조건 4를 통해 우리는 문제에서 주어지는 row_begin ~ row_end 구간의 합을 누적하여 누적합의 XOR 값을 구해주어야 함을 알 수 있습니다.
이는 아래와 같이 표현할 수 있습니다. (주석으로 위 조건들이 코드로 나타낸 곳을 표시하였습니다.)
Python
def solution(data, col, row_begin, row_end):
answer = 0
#col번째 컬럼의 값을 기준으로 오름차순 정렬, 조건 2
data.sort(key=lambda x: (x[col-1], -x[0]))
for i, val in enumerate(data):
sum = 0
if row_begin-1 <= i <= row_end-1:
for j in val: #조건 3
sum += j % (i+1)
answer ^= sum #조건 4
return answer
비트 연산자

파이썬에서 XOR은 ^를 활용해 나타낼 수 있습니다.

위의 표를 통해 ^=는 비트 XOR 연산 후 할당을 의미하는 것을 알 수 있습니다.
따라서, 위 문제를 각 행의 합을 구해주며 XOR 연산자를 통해 XOR 연산한 값이 저장되도록 하여 해결할 수 있었습니다.
출처
'프로그래머스' 카테고리의 다른 글
| [프로그래머스] lv2. 모음 사전 - Python (0) | 2023.06.08 |
|---|---|
| [프로그래머스] lv1. 과일 장수 - Python (0) | 2023.06.08 |
| [프로그래머스] lv2. 연속된 부분 수열의 합 - Python (0) | 2023.06.05 |
| [프로그래머스] 2022 KAKAO TECH INTERNSHIP 두 큐 합 같게 만들기 - Python (0) | 2023.05.30 |
| [프로그래머스] 큰 수 만들기 - Python (0) | 2023.03.29 |