728x90
반응형
[D2] 달팽이 숫자 - 1954
성능 요약
메모리: 43,252 KB, 시간: 95 ms, 코드길이: 792 Bytes
출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do
문제를 보고 어떻게 풀어야하겠다는 알았지만 코드로 작성하려니 턱 막혔다.. 너무풀고싶었어
그려보면서 이해하는 수 밖에..
방향은 우 - 하 - 좌 - 상 인것을 알 수가 있다.
한칸씩 움직일 때 마다 cnt에 1을 더하면서 방향을 옮겨주었다.
한방향으로 갈 수 있는 조건은 범위 이내거나 arr의 값이 0이여야한다.
아니라면 방향바꾸기
즉, 방향을 바꾸기 위한 조건을 추가해줬다.
> 최종코드
t = int(input())
# 우 하 좌 상
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
for tc in range(1, t + 1):
n = int(input())
arr = [[0] * n for _ in range(n)] # 배열만들기
x, y, cnt, dr = 0, 0, 1, 0 # 초기값 // cnt가 1인 이유는 1부터 시작해서
arr[x][y] = cnt
cnt += 1 # 숫자가 증가하니까 cnt도 증가
while cnt <= n * n:
nx, ny = x + dx[dr], y + dy[dr] # 다음좌표는 현재좌표+방향
if 0 <= nx < n and 0 <= ny < n and arr[nx][ny] == 0:
# 조건에 맞으면 다음좌표로 넘어가기
x, y = nx, ny
arr[x][y] = cnt
cnt += 1
else:
dr = (dr + 1) % 4 # 방향도 바꾸는데 인덱스는 3까지여서 4부터는 0으로 되돌아가게 하기
print(f"#{tc}")
for i in arr:
print(*i)
처음에 풀때는 조건을 계속 다음좌표가 아닌 현재 좌표로 줘서 아예 프린트가 안됐었다..껄껄...밥우
그리고 인덱스를 처음으로 돌아와 계속 돌게하는 방법을 너무 어렵게 생각하고 있어서 쉬운 방법을 떠올리지 못했다.
항상 문제풀때 어렵게 생각해서 진짜 어려워지는 느낌,,ㅎㅎ
풀어서 속시원~ 근데 이게 왜 D2인거죠? 어려워요ㅠㅠ
728x90
반응형
댓글