튜플 정렬 기술

Nitroblue 1·2025년 8월 20일

코딩 스킬들

목록 보기
2/16
return (grid[new_x][new_y], -new_x, -new_y) > \
           (grid[best_x][best_y], -best_x, -best_y)

한 줄 요약: “왼쪽 후보가 더 좋으면 True”를 반환하는 비교식입니다.
튜플을 이용한 사전식(lexicographical) 비교를 하고 있어요.

무슨 기준으로 더 좋은지?

  1. 1순위: grid[new_x][new_y] 값이 더 큰 쪽이 승리
  2. 2순위(동점 시): x가 더 작은 쪽이 승리 → -new_x가 더 크면(x가 더 작으면) 유리
  3. 3순위(그래도 동점): y가 더 작은 쪽이 승리 → -new_y가 더 크면(y가 더 작으면) 유리

왜 그런가?

  • 파이썬에서 튜플 (a, b, c) 비교는 먼저 a를 비교하고, 같으면 b, 그래도 같으면 c를 비교합니다.
  • -new_x처럼 음수로 뒤집는 트릭을 쓰면 “작은 x/ y가 이기는” 정렬 기준을 쉽게 만들 수 있어요. (왜냐면 -2 > -4 이므로 x=2x=4보다 우선됨)

예시

  • 현재 최선이 (value=5, x=4, y=1)이고 새 후보가 (value=5, x=2, y=3)라면
    왼쪽: (5, -2, -3) vs 오른쪽: (5, -4, -1) → 첫 원소 같은 뒤 둘째 비교: -2 > -4True
    즉, 값이 같다면 더 “위/왼쪽(작은 x, 작은 y)”을 선택.

참고(표기):

# 백슬래시 없이 이렇게 쓰면 더 파이써닉해요
return (
    grid[new_x][new_y], -new_x, -new_y
) > (
    grid[best_x][best_y], -best_x, -best_y
)

0개의 댓글