문제
실행 결과
제출한 코드(Python)
n = int(input())
arr_2d = [[0 for _ in range(n)] for _ in range(n)] # n(행) * n(열)의 2차원 배열 생성
num = n * n
# n이 짝수
if n % 2 == 0:
for j in range(n):
if j % 2 != 0:
for i in range(n):
arr_2d[i][j] = num
num -= 1
else:
for i in range(n - 1, -1, -1):
arr_2d[i][j] = num
num -= 1
# n이 홀수
else:
for j in range(n):
if j % 2 == 0:
for i in range(n):
arr_2d[i][j] = num
num -= 1
else:
for i in range(n - 1, -1, -1):
arr_2d[i][j] = num
num -= 1
for row in arr_2d:
for elem in row:
print(elem, end=" ")
print()
코드 리팩토링
먼저 n이 짝수인지 홀수인지에 따라 패턴이 달라진다는 것을 깨달았다.
예를 들어 n이 짝수라면 마지막 줄(맨 왼쪽 줄)이 아래에서 위로 +1씩 증가하는 모양이다.
하지만 n이 홀수라면 위에서 아래로 증가하는 모양이다.
따라서 n의 조건과 열의 조건을 각각 나눠서 작성하였다.
정답은 맞긴 했으나 딱 보기에도 코드에 중복이 너무 많아보였고
해설답안이 훨씬 간결하여 리팩토링을 해야겠다고 생각했다.
초기 조건은 그대로 놔두고 중복되는 부분만 제거하여 코드를 간단하게 정리해보았다.
n = int(input())
arr_2d = [[0 for _ in range(n)] for _ in range(n)] # n(행) * n(열)의 2차원 배열 생성
num = 1
# 오른쪽 맨 아래부터 시작
for col in range(n - 1, -1, -1):
# 짝수: 아래에서 위로 증가
if (n - 1 - col) % 2 == 0:
for row in range(n - 1, -1, -1):
arr_2d[row][col] = num
num += 1
# 홀수: 위에서 아래로 증가
else:
for row in range(n):
arr_2d[row][col] = num
num += 1
for row in arr_2d:
for elem in row:
print(elem, end=" ")
print()
i, j 대신 row, col 변수를 사용해 더 직관적으로 나타내고
애초에 시작하는 부분을 오른쪽 맨 끝으로 하고 진행 방향을 왼쪽으로 바꾸었다.
열 index가 짝수인지 홀수인지에 따라 위인지 아래인지 방향을 조건으로 지정했다.
'PS' 카테고리의 다른 글
[코드트리 조별과제] 버블 정렬 구현 (0) | 2024.08.11 |
---|---|
[코드트리] 격자로서의 2차원 배열: 동전이 있는 위치 (0) | 2024.07.14 |
[코드트리] 2차원 배열과 패턴 / 지그재그로 숫자 채우기 (0) | 2024.07.10 |
[코드트리] Notation / 진수 to 진수 (0) | 2024.06.21 |
[코드트리] Date to Date (0) | 2024.06.20 |