[프로그래머스(python)] 정수를 나선형으로 배치하기

구준희·2023년 8월 23일
0

알고리즘

목록 보기
15/31
post-thumbnail

📌 난이도, 유형

난이도 : Lv.0
유형 : 이차원 리스트(배열), 구현


📌 문제설명


📌 입출력 예


📄 코드

def solution(n):
    arr = [[0]*n for i in range(n)]
    mode = 1
    x = 0
    y = 0
    
    if n == 1:
        return [[1]]
    for i in range(n*n):
        arr[x][y] = i + 1
        if mode%4 == 1:
            y+=1
            if y == n-1 or arr[x][y+1] != 0:
                mode+=1
        elif mode%4 == 2:
            x+=1
            if x == n-1 or arr[x+1][y] != 0:
                mode+=1
        elif mode%4 == 3:
            y-=1
            if y == n-1 or arr[x][y-1] != 0:
                mode+=1
        elif mode%4 == 0:
            x-=1
            if x == n-1 or arr[x-1][y] != 0:
                mode+=1
    return arr

설명

mode : 방향을 정해주는 넘, 4로나눈 나머지로 방향을 정함(mode%4)

  • 1 : 오른쪽
  • 2 : 아래
  • 3 : 왼쪽
  • 4 : 위

어차피 시계방향으로 움직이므로 진행방향은 항상 R-> D -> L -> U 로 고정임

  • 오른쪽으로 진행할 때
if mode%4 == 1:
	y+=1
	if y == n-1 or arr[x][y+1] != 0:
		mode+=1
  1. 오른쪽으로 진행할 때는 열(y)이 증가하므로 y+=1

  2. y == n-1 : 배열의 제일 끝에 도달했을 때
    arr[x][y+1] != 0 : 다음 칸을 봤을 때 0이 아닌 값 즉, 이미 값이 들어가 있을 때
    mode에 1을 더해줘 다음 방향으로 바꿈

나머지 애들도 움직이는 방향에 따라 동일하게 코드를 짜면 됨

  • n == 1
    이 코드대로 짜면 n=1일때 out of range가 나와서 오류처리를 해줬음
profile
꾸준히합니다.

0개의 댓글