백준 14503 로봇 청소기(with Python)

daeungdaeung·2021년 6월 23일

어떤 문제?

제목에 적힌 문제입니다. 시뮬레이션 구현을 요구하는 문제입니다.

내가 생각한 Solution

문제에서 생각해볼 점

  • 일단 문제에 조건이 상당히 많아서 정말 꼼꼼히 읽고 꼼꼼히 설계하고 풀어야하는 문제였습니다.

  • 저는 설계를 꼼꼼히 하지 않아서 디버깅을 하는데 많은 시간을 사용했습니다.

  • 제가 생각을 잘 못 했던 부분은 아래 그림과 같습니다.

  • 구현할때 방향이 바뀌지 않도록 구현했어야 했는데 꼼꼼하게 설계하지 않아서 디버깅하는데 많은 시간이 소요됐습니다.

  • 다들 화이팅...!

코드 구현

N, M = map(int, input().split())

pr, pc, pd = map(int, input().split())

brd = [list(map(int, input().split())) for _ in range(N)]

ds = [[-1, 0], [0, 1], [1, 0], [0, -1]]

result = 0
while True:

    # 현재 위치를 청소한다.
    if brd[pr][pc] == 0:
        brd[pr][pc] = 2
        result += 1

    # 왼쪽 공간 탐색
    flag = False
    for i in range(4):
        pd = (pd + 3) % 4
        ndr, ndc = ds[pd]
        if brd[pr+ndr][pc+ndc] == 0:
            pr, pc = pr+ndr, pc+ndc
            flag = True
            break

    # 네 방향 모두 갈 수 없는 경우
    if not flag:
        tmppd = (pd+2) % 4
        ndr, ndc = ds[tmppd]
        if brd[pr+ndr][pc+ndc] != 1:
            pr, pc = pr+ndr, pc+ndc
        else:
            break

print(result)
profile
개발자가 되고싶읍니다...

0개의 댓글