[코드트리] 2차원 배열과 패턴: 격자 반대로 채우기

2024. 7. 13. 20:54·PS

 

 

https://thumbnail-maker.web.app/#%F0%9F%98%9A

 


 

문제

 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

 

 

 

실행 결과

 

 

 

 

 

제출한 코드(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
'PS' 카테고리의 다른 글
  • [코드트리 조별과제] 버블 정렬 구현
  • [코드트리] 격자로서의 2차원 배열: 동전이 있는 위치
  • [코드트리] 2차원 배열과 패턴 / 지그재그로 숫자 채우기
  • [코드트리] Notation / 진수 to 진수
abyss-s
abyss-s
프론트엔드 공부합니다.
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • Web (16)
        • JavaScript (6)
        • TypeScript (1)
        • React (5)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (12)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (3)
        • Project (2)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • IT (4)
      • Statistics (11)
      • Book (4)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    OS
    DP
    Python
    Java
    BAEKJOON
    통계학
    네트워크
    자바스크립트
    C++
    BFS
    React
    github
    코드트리
    운영체제
    백준
    자바기반응용프로그래밍
    그리디
    생활코딩
    파이썬
    JavaScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[코드트리] 2차원 배열과 패턴: 격자 반대로 채우기
상단으로

티스토리툴바