더북(TheBook)
x_len = x_max - x_min + 1
y_len = y_max - y_min + 1
coord = [['.'] * x_len for _ in range(y_len)]

for star_x, star_y in pos:
    nx = star_x + abs(x_min) if x_min < 0 else star_x - x_min
    ny = star_y + abs(y_min) if y_min < 0 else star_y - y_min
    coord[ny][nx] = '*'

최소 길이를 가진 정사각형을 만들기 위해 3번 과정에서 정의한 x_max, y_max, x_min, y_min 변수를 사용하여 가로와 세로의 길이를 구합니다. 그리고 이 가로와 세로 길이로 좌표를 기록할 사각형 정보를 가진 2차원 배열을 생성합니다. 이후 기억한 교점 정보를 for 문을 돌려 정의한 최소 크기의 사각형에 좌표를 찍습니다.

그런데 좌표를 찍으려고 하니 한 가지 문제가 생깁니다. 최소 크기의 정사각형을 가진 2차원 배열에서 음수 좌표를 표현하는데, 정사각형은 0부터 양수만 존재합니다. 두 가지 해결책이 있는데, 배열의 중앙을 (0, 0)으로 생각하여 좌표를 찍거나 abs(절댓값) 연산을 통해 증가량을 계산하여 표현해야 합니다.

어느 것을 선택해도 상관없으나, 전자의 경우 배열은 음수 인덱스를 가질 수 없기 때문에 추가 보정을 해야 하며, 길이가 짝수라면 중앙 좌표를 임의로 선택해야 합니다. 이런 자잘한 보정이 많을수록 실수하기 쉽습니다. 따라서 후자인 abs()로 증가량 자체를 보정하여 좌표를 찍어주는 방식을 사용하겠습니다. 그러면 훨씬 직관적이고 쉽습니다. 대신 최댓값/최솟값 계산처럼 이 값을 더할지, 뺄지가 경우에 따라 달라지므로 논리를 잘 점검합시다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.