본문 바로가기

코딩 문제/매일프로그래밍

매일프로그래밍 - 입력받은 배열 소용돌이 모양 출력

728x90

Q. 2차 정수 배열( 2D int array )가 주어지면 소용돌이 모양으로 원소들을 프린트하시오.

EX.

Input :

[ [ 1, 2, 3 ],
  [ 8, 9, 4 ],
  [ 7, 6, 5 ] ]

Output : 1, 2, 3, 4, 5, 6, 7, 8, 9

 

 

풀이

 

import java.util.Scanner;

 

public class javatest {

 

      public static void main(String[] args) {

 

            int x; // 입력 행/열

            int a = 0, b = 0; // 출력 행/열

            String str = "";

            String[] arr = null; // 입력받은 값 구분자로 나눈 배열

            String[][] arr2D = null; // 최종 값 저장 2차원 배열

            int check = 1, count = 0; // chcek : 가로/세로 확인 값, count : 반복 변수

 

            // 2차원 행과 열 수 입력받기

            System.out.println("2차원 배열의 행과 열 수를 정해주세요.");

            Scanner scan = new Scanner(System.in);

            x = Integer.parseInt(scan.nextLine()); // 행, 열 할당

            count = x-1;

            arr2D = new String[x][x];

 

            // 값 입력받기

            for(int i=0; i<x; i++) {

                  System.out.println(i+1 + " 번째 값들을 ,를 구분자로 값을 입력해주세요.");

                  str = scan.nextLine();

                  arr = str.split(","); // 구분자로 나누기

                  // 더 많은 값이 입력 되었을 때

                  if(arr.length > x) {

                        System.out.println("초기 설정보다 행의 값이 많습니다. 재입력해주세요.");

                        i--;

                  }else if(arr.length < x) { // 더 적은 값이 입력 되었을 때

                        System.out.println("초기 설정보다 행의 값이 적습니다. 재입력해주세요.");

                        i--;

                  }else {

                        arr2D[i] = str.split(",");

                  }

            }

 

            // 출력

            for(int i=0; i<x; i++) {

                  // 처음에는 한줄 전부 출력

                  if(i == 0) {

                        for(int j=0; j<x; j++) {

                              System.out.print(arr2D[a][b] + " ");

                              if(j != x-1) {

                                    b++;

                              }

                        }

                  }else { // 그외 규칙적으로 출력

                        if(check == 1) { // 체크 유무 확인

                              for(int j=0; j<count; j++) {

                                    a++;

                                    System.out.print(arr2D[a][b] + " ");

                              }

                              for(int j=count; j>0; j--) {

                                    b--;

                                    System.out.print(arr2D[a][b] + " ");

                              }

                        }else if(check == -1) { // 체크 유무 확인

                              for(int j=count; j>0; j--) {

                                    a--;

                                    System.out.print(arr2D[a][b] + " ");

                              }

                              for(int j=0; j<count; j++) {

                                    b++;

                                    System.out.print(arr2D[a][b] + " ");

                              }

                        }

                        count--;

                        check *= -1;

                  }

            }

      }

}

 

 

결과