📖  문제

https://www.acmicpc.net/problem/14503

 

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어

www.acmicpc.net

 

💻  코드

import sys

N, M = map(int, sys.stdin.readline().strip().split())
r, c, d = map(int, sys.stdin.readline().strip().split())
dir = ((-1, 0), (0, 1), (1, 0), (0, -1))
mp = []
for _ in range(N):
    mp.append(list(map(int, sys.stdin.readline().strip().split())))
count = 1
mp[r][c] = 2

while True:
    done = False
    for _ in range(4):
    	# 코드 가독성을 위해 next_r, next_c 변수 선언
        next_r, next_c = r + dir[(d + 3) % 4][0], c + dir[(d + 3) % 4][1]
        if 0 <= next_r < N and 0 <= next_c < M and mp[next_r][next_c] == 0:
            d = (d + 3) % 4
            r, c = next_r, next_c
            mp[r][c] = 2
            count += 1
            done = True
            break
        else:
            d = (d + 3) % 4

    if done:
        continue
    # 코드 가독성을 위해 next_r, next_c 변수 선언
    next_r, next_c = r + dir[(d + 2) % 4][0], c + dir[(d + 2) % 4][1]
    if 0 <= next_r < N and 0 <= next_c < M and mp[next_r][next_c] == 2:
        r, c = next_r, next_c
        continue
    else:
        break

print(count)

 

🙌  한마디

특정 알고리즘을 이용하지 않아도 되는 구현 문제일수록 문제의 요구사항이 복잡한 경우가 많다.

이번 문제도 그러했는데, 코드를 짠 후에 수정하는 시간을 단축하기 위해서 문제 설명을 세심하게 읽어보고, 출제 의도를 정확하게 파악하는 것이 중요하다고 느꼈다.

'Problem Solving > 📗BOJ' 카테고리의 다른 글

[Programmers] N으로 표현 (Python)  (0) 2021.10.21
[BOJ] 14501번: 퇴사 (Python)  (0) 2021.10.21
[BOJ] 14502번: 연구소 (Python)  (0) 2021.10.17
[BOJ] 3190번: 뱀 (Python)  (0) 2021.10.16
[BOJ] 13460번: 구슬 탈출 2 (Python)  (0) 2021.10.16
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기