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;
}
}
}
}
결과
'코딩 문제 > 매일프로그래밍' 카테고리의 다른 글
매일프로그래밍 - 원소 이동 (0) | 2021.02.01 |
---|---|
매일프로그래밍 - 배열 안 해당문자 여부 확인 (0) | 2021.02.01 |
매일프로그래밍 - 정수 배열 정렬 알고리즘 구현 (0) | 2021.02.01 |
매일프로그래밍 - 입력받은 배열 원소 순환 확인 (0) | 2021.01.27 |
매일프로그래밍 - 랜덤 정수 배열 - 중복 값 찾기 (0) | 2021.01.26 |