전공/백준
10157
yha97
2023. 6. 14. 09:45
날짜 : 2023. 06. 14
사용 언어 : python
문제
코드
import sys
r, c = map(int, sys.stdin.readline().split()) # 그래프 크기 (90도 회전했다고 가정 후 입력)
k = int(sys.stdin.readline()) # 대기번호
if k > (c * r) : # 불가능
print(0)
exit()
graph = [[0] * c for _ in range(r)]
dx = [0, 1, 0, -1] # 시계방향 : 동->남->서->북
dy = [1, 0, -1, 0]
dir = 0 # 기본방향
now = [0, -1] # 배정할 위치
res = 0 # 대기번호
while res < k:
res += 1
# print(res, now)
while True:
nx = now[0] + dx[dir] # 다음위치
ny = now[1] + dy[dir]
if nx in range(r) and ny in range(c): # 범위 포함
if graph[nx][ny] == 0:
graph[nx][ny] = res
now = [nx, ny] # 위치 갱신
break
else:
dir = (dir + 1) % 4
else: # 범위 이탈 -> 시계방향 전환
dir = (dir + 1) % 4
print(now[0]+1, now[1]+1)
풀이
- 기본 문제는 일반적인 좌표평면처럼 입력받았기 때문에, 계산을 편하게 하기 위해 90도 시계방향으로 회전시킨 것을 전제로 입력받았다.(문제에서는 c, r => 풀이를 위해 r, c)
- 그 다음 시계방향으로 회전하기 때문에 동 -> 남 -> 북 -> 서 형식으로 이동시킬 dx, dy 리스트를 만들고 dir 변수를 통해 진행방향을 설정
- while문을 통해 현재 이동방향을 증가시키고, 이동할 그래프 좌표가 이미 선점했거나, 범위를 이탈한 경우 방향을 전환, 아니라면(graph 값이 0) 방향을 전환하지 않고, now값과 graph의 해당 인덱스의 값을 갱신하는 방식으로 진행했다.
알게된 점
- 90도 돌리는 과정에서 맨 처음에 c, r을 입력받는데 계속 이상한 값이 나왔다.
- 그래서 태블릿에 그려서 풀어보니 r, c로 입력받아야 하는 것을 확인, 바로 풀렸다.
참고 사이트
-