1. 문제 출처
https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어
www.acmicpc.net
2. 생각정리
- 현재방향을 기준으로 다음 방향을 반환해주는 함수 작성하기
- 현재방향 기준으로 뒤쪽 위치를 반환해주는 함수 작성하기
- 나머지는 그냥 하라는대로 하면 될 듯 함
3. 조각코드
현재방향 기준으로 다음 방향 반환해주는 함수
dx = [-1,0,1,0]
dy = [0,1,0,-1]
def rotate(cd):
nd = 0
if cd == 0:
# d가 북이면 nd는 서
nd = 3
elif cd == 1:
# d가 동이면 nd는 북
nd = 0
elif cd == 2:
# d가 남이면 nd는 동
nd = 1
elif cd == 3:
# d가 서면 nd는 남
nd = 2
return nd
현재방향 기준으로 뒤쪽 방향 알려주는 함수
def back(d):
if d == 0:
nd = 2
elif d == 1:
nd = 3
elif d == 2:
nd = 0
elif d == 3:
nd = 1
return nd
다음 방향을 dx, dy배열 기준 0,1,2,3으로 처리해서 다음 위치를 설정했음
4. 전체코드
n, m = map(int, input().split())
sx,sy,d = map(int, input().split())
lst = []
for i in range(n):
lst.append(list(map(int,input().split())))
def rotate(cd):
nd = 0
if cd == 0:
# d가 북이면 nd는 서
nd = 3
elif cd == 1:
# d가 동이면 nd는 북
nd = 0
elif cd == 2:
# d가 남이면 nd는 동
nd = 1
elif cd == 3:
# d가 서면 nd는 남
nd = 2
return nd
# d = 0 북 d == 1 동 , 2남, 3서
dx = [-1,0,1,0]
dy = [0,1,0,-1]
def back(d):
if d == 0:
nd = 2
elif d == 1:
nd = 3
elif d == 2:
nd = 0
elif d == 3:
nd = 1
return nd
end = False
while True:
# 1. 현재위치를 청소한다
lst[sx][sy] = 2
# 2. 현재 위치에서 현재 방향 기준으로 왼쪽부터 인접 간 탐색
chk = [True, True, True, True]
while True:
nd = rotate(d)
nx = sx + dx[nd]
ny = sy + dy[nd]
if lst[nx][ny] == 0:
# 청소를 아직 안한곳인경우
sx = nx
sy = ny
d = nd
break
elif lst[nx][ny] == 1 or lst[nx][ny] == 2:
chk[nd] = False
d = nd
if chk.count(False) == 4:
# 4방향 다 못가는 경우 한칸 후진
back_d = back(nd)
bx = sx + dx[back_d]
by = sy + dy[back_d]
if lst[bx][by] == 1:
end = True
break
else:
sx = bx
sy = by
break
if end:
break
cnt = 0
for i in range(len(lst)):
cnt += lst[i].count(2)
print(cnt)
5. 마무리
- 가장 기초적인 구현문제인것 같음
- 구현이 약점인데 조금 빨리 풀 수 있도록 많이 풀어봐야겠다고 생각함
- 하라는대로 그냥 적어놓고 반복문만 돌리면 됨
'코딩테스트 > 백준 알고리즘 풀이' 카테고리의 다른 글
[백준 알고리즘/Python] 백준 15686번 치킨 배달, 파이썬 설명 (0) | 2022.03.27 |
---|---|
[백준 알고리즘/Python] 백준 112100번 2048 (Easy), 파이썬 설명 (0) | 2022.03.23 |
[백준 알고리즘/python] 백준 1931번 회의실배정, 파이썬 설명 (0) | 2020.09.27 |
[백준 알고리즘/python] 백준 11047번 동전 0, 파이썬 설명 (1) | 2020.09.27 |
[백준 알고리즘/python] 백준 1436번 영화감독 숌, 파이썬 설명 (0) | 2020.09.27 |
댓글