본문 바로가기
코드트리 블로그 챌린지

[코드트리 챌린지](2주차) 빙빙 돌며 숫자 사각형 채우기2

by MININI 2023. 9. 15.

문제:

문제 사진

 

 

문제 링크: https://www.codetree.ai/cote/13/problems/snail-number-square-2?&utm_source=clipboard&utm_medium=text

 

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

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

www.codetree.ai

풀이:

n, m = tuple(map(int, input().split()))\

arr = [
    [0]*m
    for _ in range(n)
]

# 밑, 오, 위, 왼
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]

d = 0
x = 0
y = 0
for i in range(1, n*m+1):
    arr[y][x] = i
    if (x+dx[d%4] >= m or y+dy[d%4] >= n) or arr[y+dy[d%4]][x+dx[d%4]] != 0:
        d += 1
    x += dx[d%4]
    y += dy[d%4]

for i in range(n):
    for a in arr[i]:
        print(a, end=' ')
    print()

개념 설명에서 들었던 dx, dy 테크닉을 이용하여 아래, 오른쪽, 위, 왼쪽 순으로 x, y가 이동할만큼을 각각 리스트로 생성한다.

그 다음 반복문을 활용해 각 좌표에 숫자를 채워 넣는다.

이때, 다음으로 이동할 좌표가 범위를 벗어나거나 이미 채워진 칸 일 경우, 방향 변수인 d를 1 증가시킨다.

 


진단 결과:

ㅋㅋ 놀랍도록 똑같음.

저번과 똑같은 문제에서 막힘쓰 ㅋ

저번에 그래서 바로 비슷한 유형을 풀었었는데도 까묵음

다음주는 그럼 재귀함수 문제 풀고 시험봐야겠다.

댓글