https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음
www.acmicpc.net
내 풀이:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
N, M = map(int,input().split())
r, c, dir = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(N)]
visited = [[False] * M for _ in range(N)]
dy = [-1, 0, 1, 0]
dx = [0, 1, 0, -1]
visited[r][c] = True
ans = 1
while True:
TF = True
for d in range(4):
ny = r + dy[d]
nx = c + dx[d]
if 0 <= ny <= N-1 and 0 <= nx <= M-1 and not visited[ny][nx] and arr[ny][nx] == 0:
TF = False
break
if TF:
ny = r - dy[dir]
nx = c - dx[dir]
if not 0 <= ny <= N-1 or not 0 <= nx <= M-1 or arr[ny][nx] == 1:
break
else:
r = ny
c = nx
continue
ny = r + dy[(dir - 1) % 4]
nx = c + dx[(dir - 1) % 4]
if arr[ny][nx] == 0 and not visited[ny][nx]:
visited[ny][nx] = True
ans += 1
r = ny
c = nx
dir = (dir-1)%4
print(ans)
|
Python3, 60ms
문제 조건만 구현하면 되는 시뮬레이션 문제이다. 삼성 A형 기출 문제 중에서 정답률이 50% 이상인 문제라서 쉬운 편이다.
파이썬으로 풀어보는 백준 14500번: 테트로미노 (삼성 A형 기출 문제) (0) | 2020.02.14 |
---|---|
파이썬으로 풀어보는 백준 14890번: 경사로 (삼성 A형 기출 문제) (0) | 2020.02.13 |
파이썬으로 풀어보는 백준 16235번: 나무 재테크 (삼성 A형 기출 문제) (0) | 2020.02.13 |
파이썬으로 풀어보는 백준 15684번: 사다리 조작 (삼성 A형 기출 문제) (0) | 2020.02.13 |
파이썬으로 풀어보는 백준 17142번: 연구소 3 (삼성 A형 기출 문제) (0) | 2020.02.11 |
댓글 영역