문제:
문제 링크: https://www.codetree.ai/cote/13/problems/snail-number-square-2?&utm_source=clipboard&utm_medium=text
풀이:
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 증가시킨다.
진단 결과:
ㅋㅋ 놀랍도록 똑같음.
저번과 똑같은 문제에서 막힘쓰 ㅋ
저번에 그래서 바로 비슷한 유형을 풀었었는데도 까묵음
다음주는 그럼 재귀함수 문제 풀고 시험봐야겠다.
'코드트리 블로그 챌린지' 카테고리의 다른 글
[코드트리 챌린지](6주차) BFS/네방향탈출가능여부판단하기 (0) | 2023.10.14 |
---|---|
[코드트리 챌린지] (5주차) DFS/안전지대 (0) | 2023.10.07 |
[코드트리 챌린지](4주차) DFS_마을 구분하기 (0) | 2023.10.01 |
[코드트리 챌린지] (1주차) 날짜와 시간 계산 / 그 요일은 (0) | 2023.09.06 |
[코드트리 챌린지]인증용 글 (0) | 2023.09.04 |
댓글