본문 바로가기

알고리즘/Array(1, 2차원 배열)

[CodeUp] 1099 : [기초-2차원배열] 성실한 개미(java)

728x90
반응형

[CodeUp] 1099 : 미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고,
먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.
단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더이상 이동하지 않고 그 곳에 머무른다고 가정한다.


입력: 10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.

출력: 성실한 개미가 이동한 경로를 9로 표시해 출력한다.

-> 해결과정

1) 2차원 배열 선언 후 입력값으로 초기화

2) 개미가 (2,2)에서 시작함으로 x,y좌표를 1로 초기화한다.(배열의 index는 0부터 시작)

3) 해당좌표가 2(도착점)이 아니고 x,y모두 9(벽에 부딪히게 됌)가 넘지않을 때 오른쪽으로 이동가능하면 y값을 1추가하여 오른쪽으로 이동시키고 불가능할때 아래로 이동하도록 한다.

4) 이동하려는 좌표가 2일 경우, 이동시킨 후 while문을 빠져나오도록 break문을 넣어준다.

5) 도착점의 좌표에 해당하는 값을 9로 변경한다.

 

*주의: 이동하려는 좌표가 2일 경우(4번)의 경우를 놓쳐 조금의 삽질을 통해 발견..


코드

import java.util.Scanner;
import java.io.*;
class Main {
    public static void main(String[] args) {
       Scanner scan=new Scanner(System.in);
          int arr[][]=new int[11][11];         
          for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
              arr[i][j]=scan.nextInt();
           }
		     }
			int x=1;
			int y=1;
			while(arr[x][y]!=2 && x<9 && y<9) {
				arr[x][y]=9;
				if(arr[x][y+1]==0) {
					y++;
				}else if(arr[x][y+1]==1) {
					if(arr[x+1][y]==0) {
						x++;
					}else if(arr[x+1][y]==1) {
						break;
					}else if(arr[x+1][y]==2){
						x++;
						break;
					}
				}else if(arr[x][y+1]==2){
					y++;
					break;
				}
			}
			if(arr[x][y]==2) {
				arr[x][y]=9;
			}
			
			
			for(int m=0;m<10;m++) {
				for(int n=0;n<10;n++) {
					System.out.printf("%d ", arr[m][n]);
				}
				System.out.printf("\n");
			}
     }
 }
728x90
반응형