🧩 Problem Solving

[BOJ] 백준 14503번: 로봇청소기

date
Sep 17, 2022
slug
boj-14503
author
status
Public
category
🧩 Problem Solving
tags
BOJ
summary
type
Post
thumbnail
백준 문제.png

문제링크

 

문제 분석 및 설계

단순 2차원 배열 구현 문제, 로봇의 위치를 이동시키며 청소 가능 여부 묻고 청소 → 이동 가능 방향 탐색 후 이동을 반복하면 됨

로직

While(더이상 후진 불가능하여 청소를 끝내야 하는 경우까지)
  1. 청소
    1. 현재 위치가 청소되어 있지 않다면(0이라면)
      1. 청소(0→2)
      2. 칸 개수 count
  1. 탐색 및 이동
    1. 탐색: 4가지 방향(왼, 아래, 오른, 위)에 대하여 갈 수 있는 방향 찾기
    2. 이동
      1. 갈 수 있는 방향이 있다면
        1. 이동(그 방향으로 이동, 그 방향으로 회전)
      2. 갈 수 있는 방향이 없다면
        1. 후진 가능 여부 탐색
          1. 후진(반대 방향으로 이동, 회전은 X)
          2. 청소 종료

주요 식

  • 현재 기준 왼쪽 방향 얻기 → 나머지 연산 활용
    • UP(0) → LEFT(3) → DOWN(2) → RIGHT(1)
    • -1 → +4 로 보정 → %4 연산
int checkDir = ((curDir-i)-1+4)%4; //현재 기준 왼쪽 방향

테스트 케이스 및 반례

5 5 1 2 3 1 1 1 1 1 1 0 0 0 1 1 0 1 0 1 1 0 0 0 1 1 1 1 1 1
8
5 5 2 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 1 0 0 0 1 1 1 1 1 1
6
7 7 2 2 2 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1
21
7 7 4 2 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1 0 1 1 0 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1
11
9 7 7 3 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1
25
9 7 3 4 2 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1
17
9 7 6 2 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 1 0 1 0 1 0 1 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1
13