기록하고 까먹지 말기

14503 본문

전공/백준

14503

yha97 2023. 3. 21. 01:17

날짜 : 2023. 03. 21

사용 언어 : python

 

문제

 

 

코드

import sys

n, m = map(int, sys.stdin.readline().split())  # 행, 열
graph = list()
r, c, d = map(int, sys.stdin.readline().split())  # 현재 위치, 바라보는 방향
dir_x = [-1, 0, 1, 0]  # 북, 동, 남, 서
dir_y = [0, 1, 0, -1]  # 북, 동, 남, 서
for _ in range(n): graph.append(list(map(int, sys.stdin.readline().split())))  # 그래프 입력
res = 0

while True:
    find = False
    if graph[r][c] == 0:  # 현재칸 청소 안됐다면
        graph[r][c] = -1  # 청소처리
        res += 1
    for i in range(4):  # 탐색
        d -= 1  # 반시계방향 이동
        if d < 0: d = 3
        x = r + dir_x[d]  # 해당 지점 확인
        y = c + dir_y[d]
        if x in range(n) and y in range(m) and graph[x][y] == 0:  # 청소 x 구역 발견
            r = x  # 위치 최신화
            c = y
            find = True
            break
    if not find: # 못찾은경우
        r -= dir_x[d]  # 후진
        c -= dir_y[d]
        if graph[r][c] == 1: break  # 후진했는데 벽인 경우
    
"""for i in graph:
    print(i)"""

print(res)

 

 

풀이

- 빡구현 문제다.

- 문제 조건에 맞게 구현한다.

 

 

알게된 점

- 방향은 시계방향으로 주어졌고, 청소기는 반시계방향으로 돌기 때문에 이를 고려해서 구현해야 했다.

- 그리고 탐색하면서 청소가 되었을 때에도 반시계방향으로 90도 돌고 청소여부를 확인하기 때문에 이를 고려하여 코드를 짜야했다.

- 꽤나 조건은 있었지만 차근차근 구현하니까 엄청 어려운 문제는 아니었다.

- 처음 접했을때 꽤나 애먹어서 포기했는데 이번에는 성공해서 아주 만족스럽다.

 

 

참고 사이트

 

'전공 > 백준' 카테고리의 다른 글

11404  (0) 2023.03.22
1011  (0) 2023.03.21
13023  (0) 2023.03.20
1699  (0) 2023.03.18
13549  (0) 2023.03.16