회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
새로 추가된 문제
새로 추가된 영어 문제
새로 추가된 문제 풀이
문제 순위
문제
푼 사람이 1명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ACM-ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ACM-ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
1
채점 현황
랭킹
게시판
그룹
블로그
강의
N
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
글쓰기
고수님들 어디가 틀렸는지 봐주시면 감사드리겠습니다(로봇청소기)
14503번 - 로봇 청소기
sdy9103
2년 전
0
아무리봐도 잘 모르겠습니다 ㅠㅠ 답변주시면 감사드리겠습니다!
package com.javalec.ex; import java.util.Scanner; public class RobotClean { static int [][] robot = new int[50][50]; static int count = 1; // 열 static int[] dy = {0,1,0,-1}; static int[] dx = {-1,0,1,0}; static void dfs(int x, int y, int d){ int cx = x, cy = y, cd = d; for(int i=0; i <4; i++){ // 방향 왼쪽으로 회전 cd = (cd + 3) % 4; cx = x + dx[cd]; cy = y + dy[cd]; // 왼쪽 방향에 청소할 방향이 없는지 검사 // 청소할 방향이 없다 = 벽이거나, 청소가 되어있는 경우 if(robot[cx][cy] == 1 || robot[cx][cy] == 2){ // 청소한다 continue; } else { // 청소하지 않은 공간이 존재한다면 한칸 전진후 1번부터 진행 count++; robot[cx][cy] = 2; dfs(cx,cy,cd); return; } } // 내방향 모두, 청소가 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한칸 후진을 하고 2번으로 돌아간다. int ddd = (d + 2) % 4; cx = x + dx[ddd]; cy = y + dy[ddd]; if(robot[cx][cy] == 1){ // 후진도 못하는 경우 return; } else { // 방향 유지 dfs(cx,cy,d); return; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N, M, r, c, d; N = sc.nextInt(); M = sc.nextInt(); r = sc.nextInt(); c = sc.nextInt(); d = sc.nextInt(); for(int i=0; i < N; i++){ for(int j=0 ; j <M; j++){ robot[i][j] = sc.nextInt(); } } robot[r][c] = 2; dfs(r,c,d); System.out.println(count); } }
댓글을 작성하려면
로그인
해야 합니다.
sdy9103 2년 전
아무리봐도 잘 모르겠습니다 ㅠㅠ 답변주시면 감사드리겠습니다!