[백준 14503번] 로봇 청소기 - Python으로 구현하기
문제 접근
- 정말 주어진대로 구현해야되는 구현 문제
- 바라 보는 방향의 왼쪽을 표현하는 것이 관건
- 입력으로 주어진 방향의 왼쪽방향은 -1 씩 감소되고, 반대편 방향은 2가 차이 난다.(0,1인경우는 예외처리)
- 왼쪽방향 : n_dir = dir - 1 if dir>0 else 3 / 반대편 방향 : n_dir = dir - 2 if dir>1 else dir + 2
생각해볼 점
- 문제를 코드에 옮기기 전, 대략적으로 구성도를 짜고 작성하기
오답 분석
- 구현하면서 dir과 di가 헷갈리곤 했다. 변수 이름 잘 정해주기!
n,m=map(int,input().split()) # 맵 크기
r,c,dir = map(int,input().split()) # 로봇 r,c / 방향(0~3 : 북동남서)
map_data = [list(map(int,input().split())) for _ in range(n)] # 빈칸0, 벽1
di = {0:[-1,0],1:[0,1],2:[1,0],3:[0,-1]}
while True:
map_data[r][c] = 2 # 현재 위치 청소
tmp_dir = dir
chk_flag=False
for _ in range(4):
tmp_dir = dir-1 if dir>0 else 3 # 현재 보고있는 방향의 왼쪽부터 탐색
nr=r+di[tmp_dir][0]
nc=c+di[tmp_dir][1]
if map_data[nr][nc]==0: # 왼쪽 방향에 청소 안한게 존재, 회전 후 한칸 전진
dir=tmp_dir
r,c=nr,nc
chk_flag=True
break
else:
dir=tmp_dir # 왼쪽 방향에 청소공간 없으면 회전
if chk_flag: # 왼쪽방향 청소안한게 있으면!
continue
tmp_dir = dir-2 if dir>1 else dir+2
if map_data[r+di[tmp_dir][0]][c+di[tmp_dir][1]]==1:
break
else:
r+=di[tmp_dir][0]
c+=di[tmp_dir][1]
print(sum(map_data,[]).count(2))
* 틀린 부분이나 더 나은 방법이 있을 수 있습니다. 지적해주시면 감사하겠습니다!!
'posts' 카테고리의 다른 글
[백준 14889번] 스타트와 링크 - Python으로 구현하기 (0) | 2019.10.17 |
---|---|
[백준 14888번] 연산자 끼워넣기 - Python으로 구현하기 (0) | 2019.10.17 |
[백준 14502번] 연구소 - Python으로 구현하기 (0) | 2019.10.17 |
[백준 14501번] 퇴사 - Python으로 구현하기 (0) | 2019.10.17 |
[백준 14500번] 테트로미노 - Python으로 구현하기 (0) | 2019.10.17 |