본문 바로가기

국비교육/국비교육 복습

Day08_array2d_Test05 : 2차원 배열 (세로 방향 초기화) + MOD를 이용하는 방법 (★)

(Q) 사용자에게 줄 수와 칸 수를 입력받아 해당하는 크기만큼의 2차원 배열을 생성하고

      초기화는 세로 방향으로 하세요
      줄 수 3, 칸 수 4.
      1 4 7 10
      2 5 8 11
      3 6 9 12

 

 

1) 반복수 i, j로 배열의 위치 array[i][j]를 지정하는 경우

package day08;

import java.util.Scanner;

public class Day08_array2d_Test05_1 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		// 행과 열 입력
		int row = sc.nextInt();
		int column = sc.nextInt();
		
		// 배열 생성
		int[][] array = new int[row][column];
		
		// 배열에 숫자 대입
		int count = 1;
		for(int j = 0 ; j < column ; j ++) {
			for(int i = 0 ; i < row ; i ++) {
				array[i][j] = count;
				count ++;
			}
		}
		
		// 배열 출력
		for(int i = 0 ; i < array.length ; i ++) {
			for(int j = 0 ; j < array[i].length ; j ++) {
				System.out.print(array[i][j] + "\t");
			}
			System.out.println();
		}
		System.out.println();
	}
}

 

 

2) 위치 변수 x, y를 직접 만들어 array[x][y]를 지정하는 경우

package day08;

import java.util.Scanner;

public class Day08_array2d_Test05_2 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		// 행과 열 입력
		int row = sc.nextInt();
		int column = sc.nextInt();
		
		// 배열 생성
		int[][] array = new int[row][column];
		
		// 배열에 숫자 대입
		int x = 0;
		int y = 0;
		for(int i = 1 ; i <= row * column ; i++) {
			array[x][y] = i;
			if(x < row - 1) {
				x ++;
			}
			else {
				x = 0;
				y ++;
			}
		}
		
		// 배열 출력
		for(int i = 0 ; i < array.length ; i ++) {
			for(int j = 0 ; j < array[i].length ; j ++) {
				System.out.print(array[i][j] + "\t");
			}
			System.out.println();
		}
		System.out.println();
		
	}
}

 

 

3) 나머지(MOD)를 이용하는 방법

package day08;

import java.util.Scanner;

public class Day08_array2d_Test05_3 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		// 행과 열 입력
		int row = sc.nextInt();
		int column = sc.nextInt();
		
		// 배열 생성
		int[][] array = new int[row][column];
		
		// 배열에 숫자 대입
		int count = 1;
		for(int j = 0 ; j < column ; j ++) {
			for(int i = 0 ; i < row ; i ++) {
				if((i * j) % row == 0) {	// (i * j)를 3으로 나눈 나머지가 0인 차례에만
					array[i][j] = count;	// 배열에 count를 대입
					count ++;		// 대입 후 다음 대입을 위해 count를 증가
				}
				else if((i * j) % row == 1) {	// (i * j)를 3으로 나눈 나머지가 1인 차례에만
					array[i][j] = count;	// 배열에 count를 대입
					count ++;		// 대입 후 다음 대입을 위해 count를 증가
				}
				else if((i * j) % row == 2) {	// (i * j)를 3으로 나눈 나머지가 2인 차례에만
					array[i][j] = count;	// 배열에 count를 대입
					count ++;		// 대입 후 다음 대입을 위해 count를 증가
				}
			}
		}
		
		// 배열 출력
		for(int i = 0 ; i < array.length ; i ++) {
			for(int j = 0 ; j < array[i].length ; j ++) {
				System.out.print(array[i][j] + "\t");
			}
			System.out.println();
		}
		System.out.println();
	}
}

- (i * j)는 총 입력 횟수를 의미한다

- 행이 3행(j = 3)까지 도달하면 행을 초기화시킨다(j = 0)

- (i * j)를 3으로 나눈 나머지가 0인 회차에만 해당 array[i][j]에 count값을 입력한다

- (i * j)를 3으로 나눈 나머지가 1인 회차에만 해당 array[i][j]에 count값을 입력한다

- (i * j)를 3으로 나눈 나머지가 2인 회차에만 해당 array[i][j]에 count값을 입력한다