https://www.acmicpc.net/problem/14503
문제가 상당히 길었습니다.
읽자마자 이게 뭔소리인가 싶게 만드는 문제.
우선, 회전한다라는 것에서 난감해지고
2-c의 조건, 바로 뒤로 간다?
여기서 상당히 난감해질 수 있습니다.
여기서 중요한 건
회전을 어떻게 구할 것이냐입니다.
먼저, 가장 중요한 회전 개념.
각 d의 값마다
동서남북을 매길 때의 경우입니다.
그 후, 뒤로가는 경우를 생각해봅니다.
각각의 케이스를 종합해보면
뒤로 가는 케이스는
(d-2)%4임을 유추할 수 있습니다.
북 서 남 동 순으로 회전하니
뒤로가는 게 2번 뒤라는 것도 알 수 있죠.
# 14503 로봇청소기
from sys import stdin
input = stdin.readline
N, M = map(int, input().split())
r, c, d = map(int, input().split())
r_d = [-1, 0, 1, 0]
c_d = [0, 1, 0, -1]
# 방향설정 북 동 남 서
room = [list(map(int, input().split())) for _ in range(N)]
clean = [[False] * M for _ in range(N)]
now_r = r
now_c = c
ans = 0
clean[now_r][now_c] = True
ans += 1
while True:
change = 0
while change < 4:
rotate = (d - 1) % 4 # 회전방향
r_r = now_r + r_d[rotate]
r_c = now_c + c_d[rotate]
if room[r_r][r_c] == 0 and clean[r_r][r_c] == False:
d = rotate
now_r = r_r
now_c = r_c
clean[now_r][now_c] = True
ans += 1
break
else:
d = rotate
change += 1
if change == 4:
back_p = (d - 2) % 4 # 뒤로 가는 방향 만들어줌
back_r = now_r + r_d[back_p]
back_c = now_c + c_d[back_p]
if room[back_r][back_c] == 0:
now_r = back_r
now_c = back_c
else:
break
print(ans)
제가 푼 파이썬 코드입니다.
저는 자꾸 숫자가 안 맞길래 찾아보니
동 서 남 북 값이 서로 엇갈린 게 있었더군요.
이런 사소한 거, 찾기 힘든 부분이니
처음부터 꼼꼼히 프로그래밍 하면 좋을거같습니다^^
[프로그래머스]프린터(파이썬) (0) | 2022.03.03 |
---|---|
[백준 15685번] 드래곤 커브 (1) | 2022.02.28 |
[백준 23288번] 주사위 굴리기2(파이썬) (0) | 2022.02.23 |
[프로그래머스]Lv.2 타겟넘버(파이썬) (0) | 2022.02.16 |
[백준 2667번] 단지 번호 붙이기 (파이썬) (0) | 2022.02.15 |
댓글 영역