상세 컨텐츠

본문 제목

파이썬으로 풀어보는 백준 14503번: 로봇 청소기 (삼성 A형 기출 문제)

Python/문제풀이 (삼성 A형 대비)

by 코딩하는 낙타 2020. 2. 13. 16:20

본문

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 = [-1010]
dx = [010-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% 이상인 문제라서 쉬운 편이다.

관련글 더보기

댓글 영역