광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 컴퓨터 사이언스
  • 합주
  • 백준
  • 파이썬
  • 프로그래머스
  • 알고리즘
  • 오블완
  • 자바
  • 애플워치 앱
  • 드린이
  • OS
  • 다이나믹 프로그래밍
  • 구현
  • BOJ
  • BFS
  • 티스토리챌린지
  • 개념
  • 운영체제
  • 애플워치 앱 만들기
  • DP

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Java/자바 백준 14503] 로봇 청소기

2022. 1. 3. 15:25
반응형

풀이

문제 그대로 하나하나씩 진행하면 되는 문제였습니다.

 

현재 x,y 좌표와 바라보는 방향을 저장하고

왼쪽부터 청소할 수 있는지 비교해보며, 만약 청소할 수 없는 공간이 없다면

바라보는 방향 기준으로 후진을 진행했습니다.

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

public class Main_bj_g5_14503_로봇청소기 {

	static int N, M, curX, curY, curDir, totalClean, dirCheck;
	static int[][] map;
	static boolean[][] visited;
	// 북 동 남 서 
	static int[] dx = {-1, 0, 1, 0};
	static int[] dy = {0, 1, 0, -1};
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		map = new int[N][M];
		visited = new boolean[N][M];
		
		st = new StringTokenizer(br.readLine(), " ");
		
		curX = Integer.parseInt(st.nextToken());
		curY = Integer.parseInt(st.nextToken());
		curDir = Integer.parseInt(st.nextToken());
		
		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(dirCheck != 4) {
			curClean();
			
			dirCheck = 0;
			for(int i = 0 ; i < 4 ; i++) {
				if(cleanAvailiable()) break;
				
				if(i == 3) {
					backAvailiabe();
				}
				dirCheck += 1;
			}
		}
		System.out.println(totalClean);
	}

	private static void backAvailiabe() {
		int nx = curX + dx[(curDir+2) % 4];
		int ny = curY + dy[(curDir+2) % 4];
		
		if(map[nx][ny] == 0) {
			curX = nx;
			curY = ny;
			dirCheck = 0;
		}
	}

	private static boolean cleanAvailiable() {
		curDir = (curDir + 3) % 4;
		int nx = curX + dx[curDir];
		int ny = curY + dy[curDir];
		
		if(map[nx][ny] == 0 && visited[nx][ny] == false) {
			curX = nx;
			curY = ny;
			return true;
		}
		
		return false;
	}

	private static void curClean() {
		// TODO Auto-generated method stub
		if(visited[curX][curY] == true) return;
		
		totalClean += 1;
		visited[curX][curY] = true;
		dirCheck = 0;
		return;
	}

	
}
반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Java/자바 백준 19238] 스타트 택시  (0) 2022.01.04
[Java/자바 백준 2589] 보물섬  (0) 2022.01.03
[Java/자바 백준 23288] 주사위굴리기2  (0) 2021.11.16
[Java/자바 백준 17143] 낚시왕  (0) 2021.11.11
[Java/자바 백준 16235] 나무 재테크  (0) 2021.11.10
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Java/자바 백준 19238] 스타트 택시
    • [Java/자바 백준 2589] 보물섬
    • [Java/자바 백준 23288] 주사위굴리기2
    • [Java/자바 백준 17143] 낚시왕
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바