[이것이 코딩테스트다/Java] 게임개발

seb Incode·2022년 5월 29일
0
post-thumbnail

문제 설명

책 118p 참고.

풀이

단순 구현 문제지만 좌표를 다루기 때문에 인덱스 검사, 좌표 위치 검사 등등이 필요했다.

소스코드

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();   //맵 행 크기
        int m = sc.nextInt();   //맵 열 크기
        int my_x = sc.nextInt();    //출발 행 위치
        int my_y = sc.nextInt();    //출발 열 위치
        int d = sc.nextInt();   //바라보는 방향
        
        int[][] map = new int[n][m];    //맵 생성
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                map[i][j] = sc.nextInt();   //바다 or 육지 정보 받기
            }
        }
        
        boolean flag = true;    //갈 수 있는 방향이 있는지 확인 값
        int answer = 0; //방문한 칸의 수
        int[] dx = {-1, 0, 1, 0};  //행 이동(북, 동, 남, 서)
        int[] dy = {0, 1, 0, -1};  //열 이동(북, 동, 남, 서)
        
        while(flag){
            int i;
             map[my_x][my_y] = 1;    //현 위치 방문 표시
             answer++;   //방문 수 카운트
            for(i=1;i<=4;i++){
                int nd = (d-i)>0?(d-i):(d-i+4);   //현 방향에서 왼쪽으로 볼 것.
                int nx = my_x+dx[nd];   //바라본 방향의 좌표 찾기
                int ny = my_y+dy[nd];   //바라본 방향의 좌표 찾기
                //방문 가능하면(방문하지 않은 육지)
                if(!(nx < 0 || nx > n-1 || ny < 0 || ny > m-1)){
                    if(map[nx][ny] ==0){
                        my_x = nx;
                        my_y = ny;  //현 위치 변경
                        System.out.println("위치 바뀜 "+nx+" "+ny);
                        break;
                    }
                    //현재 바라본 방향이 이동 불가라면
                    else{
                        continue;	//다음 i로 넘어감
                    }
                }
            }
            //갈 수 있는 방향이 없다면
            if(i>4){
                flag = false;	//while을 빠져나갈 변수 값
            }
        }
        System.out.println(answer);
    }
}

0개의 댓글