본문 바로가기

Algorithm/CodeUp

[CodeUp_Java] Q1099 : [기초-2차원배열] 성실한 개미

반응형

안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 Q1099 : [기초-2차원배열] 성실한 개미 (자바, JAVA)입니다.

Intro

Question

문제 설명

입력

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

출력

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

예시

  • 입력 :
    1 1 1 1 1 1 1 1 1 1
    1 0 0 1 0 0 0 0 0 1
    1 0 0 1 1 1 0 0 0 1
    1 0 0 0 0 0 0 1 0 1
    1 0 0 0 0 0 0 1 0 1
    1 0 0 0 0 1 0 1 0 1
    1 0 0 0 0 1 2 1 0 1
    1 0 0 0 0 1 0 0 0 1
    1 0 0 0 0 0 0 0 0 1
    1 1 1 1 1 1 1 1 1 1
  • 출력 :
    1 1 1 1 1 1 1 1 1 1
    1 9 9 1 0 0 0 0 0 1
    1 0 9 1 1 1 0 0 0 1
    1 0 9 9 9 9 9 1 0 1
    1 0 0 0 0 0 9 1 0 1
    1 0 0 0 0 1 9 1 0 1
    1 0 0 0 0 1 9 1 0 1
    1 0 0 0 0 1 0 0 0 1
    1 0 0 0 0 0 0 0 0 1
    1 1 1 1 1 1 1 1 1 1

Solution (풀이)

  • 풀이 1 : 메모리 14512, 시간 122
public class Answer1 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int[][] maze = new int[10][10];    // 미로의 크기 2차원 배열 길이 선언
        for (int i=0; i<10; i++) {
            for (int j=0; j<10; j++) {
                // 미로 갈 수 있는 곳(0), 벽 또는 장애물(1), 먹이(2) 입력받아 배열에 저장 
                maze[i][j] = sc.nextInt();
            }
        }

        int position = 1;

        // 개미의 이동경로 9로 바꾸기
        for (int j=1; j<10; j++) {    // 개미의 첫 위치는 maze[1][1]
                    // 먹이를 찾은 경우         or   마지막에 도착한 경우
            if (maze[position][j]==2 || (position==8 && j==8)) { 
                maze[position][j] = 9;    // 이동 경로 9로 바꾸기
                break;    // for문 종료
            } else {    // 먹이를 못찾은 경우
                maze[position][j] = 9;    // 이동 경로 9로 바꾸기
                if (maze[position][j+1]==1) {    // 다음 이동 경로가 장애물이 있으면
                    position += 1;    // 세로로 1칸 이동
                    j -= 1;    // 가로 한칸 전으로 이동
                }
            }
        }

        // 개미 이동경로 출력하기
        for (int i=0; i<10; i++) {
            for (int j=0; j<10; j++) {
                System.out.print(maze[i][j] + " ");
            }
            System.out.println();
        }

        sc.close();
    }
}
  • 풀이 2 : 메모리 11240, 시간 67
public class Answer2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 미로의 크기 2차원 배열 길이 선언
        String[][] maze = new String[10][10];
        // 미로 만들기
        for (int i=0; i<10; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            for (int j=0; j<10; j++) {
                // 미로 갈 수 있는 곳(0), 벽 또는 장애물(1), 먹이(2) 입력받아 배열에 저장 
                maze[i][j] = st.nextToken();
            }
        }

        int x = 1;    // 가로 위치 선언

        // 개미의 이동경로 9로 바꾸기
        for (int i=1; i<10; i++) {    // 개미의 첫 위치는 maze[1][1]
            // 먹이를 찾은 경우         or   마지막에 도착한 경우
            if (maze[x][i].equals("2")) { 
                maze[x][i] = "9";    // 이동 경로 9로 바꾸기
                break;    // for문 종료
            } else {    // 먹이를 못찾은 경우
                maze[x][i] = "9";    // 이동 경로 9로 바꾸기
                if (maze[x][i+1].equals("1")) {    // 다음 이동 경로가 장애물이 있으면
                    if (x==8 && i==8) { //더이상 움직이지 못할 경우
                        break;
                    } else {
                        x += 1;    // 세로로 1칸 이동
                        i -= 1;    // 가로 한칸 전으로 이동
                    }
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        for (String[] i : maze) {    // 2중 foreach문 활용
            for (String j : i) {
                sb.append(j).append(" ");
            }
            sb.append("\n");
        }

        System.out.println(sb);
        br.close();
    }
}

Ranking(순위)

반응형