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

2024. 9. 9. 21:22·Algorithm Solving/Java

- 시뮬레이션

특정 조건 만족할 때 까지 실행 while(true)

조건을 만나면 break

 

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

import java.io.*;
import java.util.*;

public class Main {
    static int N, M, r, c, d;
    static int[][] map;
    static int cnt = 0;

    static int[] dy = {-1, 0, 1, 0};    //북 동 남 서
    static int[] dx = {0, 1, 0, -1}; 
    static int[] leftD = {3, 0, 1, 2};
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        
        st = new StringTokenizer(br.readLine(), " ");
        r = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());
        d = Integer.parseInt(st.nextToken());   //0:북, 1:동, 2:남, 3:서

        map = new int[N][M];

        for (int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for (int j=0; j<M; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        while (true) {
            // 청소가 안돼있는 경우에만 청소
            if (map[r][c] == 0) {
                map[r][c] = 2;
                cnt ++;
            }

            // 청소 여부에 따라 스위치 할 수 있도록 boolean 변수 선언
            boolean chk = false;

            // 현재 위치에서 반시계 방향(왼쪽 방향)으로 4방향 탐색
            int tempD = d;
            for (int i=0; i<4; i++) {
                // d=0(북)일 때 3(서)를 탐색
                // d=1(동)일 때 0(북)을 탐색
                // d=2(남)일 때 1(동)을 탐색
                // d=3(서)일 때 2(남)을 탐색
                int ld = leftD[tempD];
                int ny = r + dy[ld];
                int nx = c + dx[ld]; 
                if (ny>=0 && ny<N && nx>=0 && nx<M) {
                    // 현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 있는 경우
                    if (map[ny][nx] == 0) {
                        // 그 방향으로 회전한 다음 한 칸을 전진
                        d = ld;
                        r = ny;
                        c = nx;
                        
                        chk = true;
                        break;
                    }
                }
                tempD = ld; // 현재 방향에서 다시 반시계 방향으로 탐색할 수 있도록 tempD 변경
            }
            // 네 방향 모두 청소되어 있는 경우
            if (chk == false) {
                int backY = r - dy[d];
                int backX = c - dx[d];
                // 뒤쪽 방향이 막혀있는지 확인
                if (backY>=0 && backY<N && backX>=0 && backX<M) {
                    if (map[backY][backX] == 1) break;
                    else {
                        // 바라보는 방향을 유지한 채로 한 칸 후진
                        r = backY;
                        c = backX;
                    }
                }
                else break;                
            }
        }

        System.out.println(cnt);
    }
}

 

저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[BOJ] 백준 11047번 : 동전 - Java  (0) 2024.09.09
[BOJ] 백준 2559번 : 수열 - Java  (0) 2024.09.09
[BOJ] 백준 15652번 : N과 M (4) - Java  (0) 2024.09.09
[BOJ] 백준 15651번 : N과 M (3) - Java  (0) 2024.09.09
[BOJ] 백준 15650번 : N과 M (2) - Java  (0) 2024.09.09
'Algorithm Solving/Java' 카테고리의 다른 글
  • [BOJ] 백준 11047번 : 동전 - Java
  • [BOJ] 백준 2559번 : 수열 - Java
  • [BOJ] 백준 15652번 : N과 M (4) - Java
  • [BOJ] 백준 15651번 : N과 M (3) - Java
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    dp
    jpa
    완전탐색
    javascript
    다이나믹프로그래밍
    Google Fonts
    sql
    join
    그리디
    CSS
    자료구조
    programmers
    Subquery
    Firebase
    jQuery
    프로그래머스
    시뮬레이션
    백준
    greedy
    jwt
    BOJ
    DFS
    websocket
    백트래킹
    HTML
    mysql
    GROUP BY
    bootstrap
    BFS
    java
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[BOJ] 백준 14503번 : 로봇 청소기 - Java
상단으로

티스토리툴바