coding test - python/SAMSUNG SWT(SW역량 테스트)
달팽이 너같은거...
sillon
2024. 10. 9. 00:32
728x90
반응형
오늘은 달팽이 같은 유형을 코드와 함께 다뤄볼 것이다.
시험장에 처음본다면 당황할만하지만, 한번 맛보고 가면 당황스럽지 않다.
1. 달팽이 모양으로 들어가기
BFS 처럼 들어가는 방향을 만들어주고 해당 방향으로 쭉 내려가다가 인덱스 오류가 난다면 방향을 틀어준다.
from collections import deque
# 하 우 상 좌 반복
N = int(input())
direction = ((1,0),(0,1),(-1,0),(0,-1))
maps = [[-1] * N for i in range(N)]
queue = deque([[0,0,0]])
while queue:
qx, qy, qd = queue.popleft()
d = qd % 4
maps[qx][qy] = qd
xx, yy = qx + direction[d][0], qy + direction[d][1]
if 0 <= xx < N and 0 <= yy < N and maps[xx][yy] == -1:
queue.append([xx, yy,qd])
else:
d = (qd + 1) % 4
dx, dy = direction[d][0], direction[d][1]
if 0 <= qx + dx < N and 0 <= qy + dy < N and maps[qx + dx][qy + dy] == -1:
queue.append([qx + dx, qy + dy, qd + 1])
for i in maps:
print(i)
direction = ((1,0),(0,1),(-1,0),(0,-1)) 하 우 상 좌 방향으로 반복됨
만약 내려가야하는 로직이 있을때 maps[i][j] % 4 방향으로 이동하면 달팽이 모양으로 말려 들어가면서 이동하게 된다
음 이렇게만 구현했다면 0점이다.
가라는 방향대로 가다보면 인덱스를 벗어난다.
즉, 인덱스를 벗어날때 한번 더 처리를 해줘야함
조건절에 아래 부분을 추가한 것이다.
if 0 <= qx + dx < N and 0 <= qy + dy < N and maps[qx + dx][qy + dy] == -1:
maps[qx][qy] = qd+1 # 방향 바뀌면 처리
queue.append([qx + dx, qy + dy, qd + 1])
최종코드
from collections import deque
# 하 우 상 좌 반복
N = int(input())
direction = ((1,0),(0,1),(-1,0),(0,-1))
maps = [[-1] * N for i in range(N)]
queue = deque([[0,0,0]])
while queue:
qx, qy, qd = queue.popleft()
d = qd % 4
maps[qx][qy] = qd
xx, yy = qx + direction[d][0], qy + direction[d][1]
if 0 <= xx < N and 0 <= yy < N and maps[xx][yy] == -1:
queue.append([xx, yy,qd])
else:
d = (qd + 1) % 4
dx, dy = direction[d][0], direction[d][1]
if 0 <= qx + dx < N and 0 <= qy + dy < N and maps[qx + dx][qy + dy] == -1:
maps[qx][qy] = qd+1 # 방향 바뀌면 처리
queue.append([qx + dx, qy + dy, qd + 1])
for i in maps:
print(i)
이제 아무생각없이 가라는 대로 가기만 하면 방향이 보인다.
더보기
그럼 정 중앙에서 반대로 탈출하고 싶다면 어떻게 해야할까?
0,1,2,3 -> 하 우 상 좌
0,1,2,3 -> 상 우 하 좌
로 바꿔주면 된다.
그럼 어떻게 바꿔주면 될까
direction을 바꾸면 된다.
direction = ((-1,0),(0,1),(1,0),(0,-1))
아마도..? 이건 내 뇌피셜 ㅋ
이런 문제가 있으면 당황하지 않고 술래의 방향을 미리 만들어준다.
내가 만든 달팽이 처럼 말이다..
728x90
반응형