본문 바로가기

BackEnd/Java

[java] 배열을 이용한 추가 연습문제1(array)

728x90
반응형

1. 문제 1

문제)
1. 3행 3열짜리 문자열 배열을 선언
2. 출력
   (0,0) (0,1) (0,2)
   (1,0) (1,1) (1,2)
   (2,0) (2,1) (2,2)

3. 4행 4열짜리 정수형 배열 선언
4. 출력
   1 2 3 4
   5 6 7 8
   9 10 11 12
   13 14 15 16

5. 4행 4열짜리 정수형 배열 선언해서 아래와 같이 출력
6. 출력
   16 15 14 13
   12 11 10 9
     8  7  6  5
     4  3  2  1

정답코드)
public class Example05 {

	public static void main(String[] args) {
		
		String str[][] = new String[3][3];
		
		for(int i=0; i<str.length; i++) {
			for(int j=0; j<str[i].length; j++) {
				str[i][j] = "(" + i + "," + j + ")";
				System.out.print(str[i][j]);
			}
			System.out.println();
		}
		System.out.println();
		
		
		int[][] arr = new int[4][4];
		
		for(int i=0; i<arr.length; i++) {
			for(int j=0; j<arr[i].length; j++) {
				arr[i][j] = arr[i].length*i+j+1; 
				// arr[i]의 길이 4에 i값을 곱하고 j 값을 더하면 0부터 증가합니다.
				// 따라서 1을 추가로 더해줍니다.
				
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
		System.out.println();
		
		
		int[][] arr1 = new int[4][4];
		
		for(int i=0; i<arr1.length; i++) {
			for(int j=0; j<arr1[i].length; j++) {
				arr1[i][j] = arr1[i].length*(arr1.length-i)-j;
				System.out.print(arr1[i][j] + " ");
			// arr1[i]의 길이 4에 (arr1의 길이-1) 값을 곱하고 j 값을 빼면 16부터 감소합니다.
			}
			System.out.println();
		}
	}
}


위의 출력 값과 같이 나타납니다.

 

 

2. 문제 2

문제)
1. 4행 4열 2차원 배열을 생성하여 0,0부터 2,2까지는 1~10까지의 임의의 정수 값에 저장하여 아래와 같이 처리

0행 값들의 합
1행 값들의 합
2행 값들의 합
0열 값들의 합 1열 값들의 합 2열 값들의 합 총합

2. 출력

9 3 7 19
3 6 9 18
6 10 10 26
18 19 26 63


정답 코드)
public class Example06 {
	public static void main(String[] args) {
		
		int[][] arr = new int[4][4];
		
		for(int i=0; i<arr.length - 1; i++) {
			for(int j=0; j<arr[i].length - 1; j++) {
				
				arr[i][j] = (int)(Math.random()*10 + 1);
			
				arr[i][arr[i].length - 1] += arr[i][j];
				arr[arr.length - 1][i] += arr[j][i];
				arr[4 - 1][0] = arr[0][0] + arr[1][0] + arr[2][0];
				
				arr[arr.length - 1][arr[i].length - 1] += arr[i][j];
			}
		}
		
		for(int i=0; i<arr.length; i++) {
			for(int j=0; j<arr[i].length; j++) {
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}		
	}
}

 

위의 코드를 풀어서 설명해 보겠습니다.

for(int i=0; i<3; i++) {
	for(int j=0; j<3; j++) {	
		arr[i][j] = (int)(Math.random()*10 + 1);
	}
}

// arr[0][0] ~ arr[0][2], arr[1][0] ~ arr[1][2], arr[2][0] ~ arr[2][2]
// 총 9개의 방에 1~10까지 random 값을 넣어줍니다.

 

for(int i=0; i<3; i++) {
	for(int j=0; j<3; j++) {
          
		arr[i][arr[i].length - 1] += arr[i][j];
		
//	1. 4번째 열에 해당 행의 합을 넣어야하기 때문에 열을 고정하고 i값만 변화시켜 변수를 지정합니다.
//	2. arr[i][j] 값을 넣어주는 이유는 i가 1번 변할동안 j는 0~2까지 3번 변하기 때문입니다.
//	3. 이때 행이 1번 고정되면 열의 값이 3번씩 바뀌는 것을 볼 수 있습니다. 
//	4. 아래의 코드를 보면 이해하실 수 있습니다.

//	arr[0][3] = arr[0][0] + arr[0][1] + arr[0][2];
//	arr[1][3] = arr[1][0] + arr[1][1] + arr[1][2];
//	arr[2][3] = arr[2][0] + arr[2][1] + arr[2][2];
				
		}
}

 

for(int i=0; i<3; i++) {
	for(int j=0; j<3; j++) {
          
		arr[arr[i].length - 1][i] += arr[j][i];
		
//	1. 4번째 행에 해당 열의 합을 넣어야하기 때문에 행을 고정하고 i값만 변화시켜 변수를 지정합니다.
//	2. arr[j][i] 값을 넣어주는 이유는 i가 1번 변할동안 j는 0~2까지 3번 변하기 때문입니다.
//	3. 이때 열이 1번 고정되면 행의 값이 3번씩 바뀌는 것을 볼 수 있습니다. 
//	4. 아래의 코드를 보면 이해하실 수 있습니다.

//	arr[3][0] = arr[0][0] + arr[1][0] + arr[2][0];
//	arr[3][1] = arr[0][1] + arr[1][1] + arr[2][1];
//	arr[3][2] = arr[0][2] + arr[1][2] + arr[2][2];
				
		}
}

 

for(int i=0; i<3; i++) {
	for(int j=0; j<3; j++) {				
		arr[arr.length - 1][arr[i].length - 1] += arr[i][j];
        
//	최종적으로 arr[3][3]에 arr[i][j]의 모든 값들을 합해줍니다. 
	}
}

 

 

다른 코드

public class Example07 {
	public static void main(String[] args) {
		
		int[][] arr = new int[4][4];
		
		final int RowFinal = arr.length - 1;
		final int ColFinal = arr[0].length - 1;
		
		for(int i=0; i<arr.length; i++) {
			for(int j=0; j<arr[i].length; j++) {
				if(i !=  RowFinal && j !=  ColFinal) {
					arr[i][j] = (int)(Math.random()*10 + 1);

					arr[i][ColFinal] += arr[i][j];
					arr[RowFinal][i] += arr[j][i];
					arr[RowFinal][ColFinal] += arr[i][j];
				}
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}
	}
}


if문을 이용해서 제한을 걸어주면 중복 for문을 한 번만 사용해서도 출력할 수 있습니다.

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형