[백준] 로봇 청소기 파이썬 풀이

2023. 4. 6. 16:05알고리즘

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

n, m = map(int, input().split())
visited = [[0] * m for _ in range(n)]
r, c, d = map(int, input().split())

visited[r][c] = 1
cnt = 1
graph = []

for _ in range(n):
    graph.append(list(map(int, input().split())))

while(True):
    flag = 0
    for _ in range(4):
        nx = r + dx[(d + 3) % 4]
        ny = c + dy[(d + 3) % 4]
        d = (d + 3) % 4
        if 0 <= nx < n and 0 <= ny < m and graph[nx][ny] == 0:
            if visited[nx][ny] == 0:
                visited[nx][ny] = 1
                cnt += 1
                r = nx
                c = ny
                flag = 1
                break
    if flag == 0 :
        if graph[r - dx[d]][c - dy[d]] == 1:
            print(cnt)
            break
        else:
            r, c = r - dx[d], c - dy[d]

구현 문제였다. 호흡이 길기는 한데 그래도 난이도 자체가 엄청 높은거는 아니였던 문제로 보인다. 각각의 상황에 대해서 순서도를 그리고 코드로 표현하기 위해 애썼다.

 

순서도에서 가장 빈번하게 발생되는 부분에 대해서 일반적인 코드를 작성하고 이후에 조건문 분기를 통해 각각의 조건을 만족하는 경우를 코딩하였다. 각 방향에 대한 리스트를 선언하는 습관을 들이고 방향에 따라 어떻게 x, y값이 바뀔지에 대해서 잘 적는것이 중요하다.

 

유의해야할 점은 위 코드에서 x, y가 사실.. 우리가 보편적으로 생각하는 x, y와는 축이 반대로 뒤집혀 있다... ㅎ

 

필자도 순간 위와 같은 애로사항 때문에 다시 한번 생각해봐야 했다...ㅎㅋ

'알고리즘' 카테고리의 다른 글

[백준] 낚시왕 파이썬  (0) 2023.04.07
[프로그래머스] 기능개발  (0) 2023.03.01
[프로그래머스] 베스트 앨범  (0) 2023.03.01
[프로그래머스] 타겟 넘버  (0) 2023.01.21
[프로그래머스] 단속 카메라  (0) 2023.01.18