Backend/문제 풀이

[Java|연습] 2차원 Array(배열)_기초 문제 행,열 합

Deeb 2021. 9. 2. 19:41

📝문제 예제

👉 행과 열의 크기를 입력 받아 
👉 int형 2차원 배열을 선언 및 할당하고
👉 2차원 배열의 각 인덱스에 1부터 순서대로 1씩 증가하는 수를 초기화하고 출력

예상 결과 화면)
행 크기 : 3
열 크기 : 2
1 2
3 4
5 6

 

Scanner sc = new Scanner(System.in);
		
System.out.print("행 크기 : ");
int rowSize = sc.nextInt();
	
System.out.print("행 크기 : ");
int colSize = sc.nextInt();
		
//입력 받은 값 만큼의 크기를 가진 2차원 배열 선언 및 할당
int[][] arr = new int[rowSize][colSize];
		
int num = 1; //배열 요소에 대입될 값이 들어갈 변수 선언 및 초기화
		
for(int row = 0; row<arr.length; row++) { //행 반복 //바깥 for문은 대체로 행
			
	for(int col = 0 ;col < arr[row].length ; col++) {//열 반복 
		//arr[row].length 바깥 반복문에서 그 해당 행의 길이 
		arr[row][col] = num++;  //대입 후 num1 증가
			
		//num++; 원래는 한 줄을 추가해야하지만 같이써서 코드 길이를 줄인다 
				
		System.out.print(arr[row][col]+ " "); 
        //반복문이 끝날때마다 인덱스의 값+ 한칸 띄어쓰기해서 출력
	}
	System.out.println(); //행 구분을 위한 줄바꿈 
}
풀이 
1. 입력 받은 값 만큼의 크기를 가진 2차원 배열 선언 및 할당
2. num : 배열 요소에 대입될 값이 들어갈 변수 선언 및 초기화
3. 바깥 for문 : //행 반복 
4. 안쪽 for문:  //열 반복 //arr[row].length 바깥 반복문에서 그 해당 행의 길이 
5. arr[row][col] = num++; //대입 후 num1 증가
6. 반복문이 끝날때마다 인덱스의 값+ 한칸 띄어쓰기해서 출력

 


📝2차원 배열 문제 2

👉 3행 3열짜리 int 2차원 배열을 선언 및 초기화
👉 각 행의 합, 열의 합 출력

 

int[][] arr = { 
				{1,2,3}, 
				{4,5,6},
				{7,8,9}
		};
		
		// 행의 합 출력
		
		for(int row = 0; row < arr.length; row++) {//행 반복
			
			//행이 바뀌는 시점에 합계를 다시 계산할 수 있도록 sum을 
			// sum을 행 반복이 시작되는 부분에 작성
			int sum = 0;// 행 합계 저장용 변수 
			// for문 안에 선언하는 이유는 한 줄마다 따로 계산해야 하니깐 한 행마다 만들어줘야하기 때문에!
			
			for(int col =0; col <arr[row].length; col++) { //열 반복
				sum += arr[row][col]; //한 행의 값 누적
			}
			
			//열이 3바퀴를 돌고 끝나는 시점에 출력
			System.out.println(row + "번째 행 합 : " + sum);
		}
		
		//열의 합 구하기
		// 기존과 다르게 열 부터 접근하는 경우
		// arr[row].length를 이용하여 열의 개수를 구해오는 것이 불가능
		// -> 대안으로 0부터 시작하는 변수를 별도로 선언하여
		// 행을 간접적으로 지정하게한다. 
		
		int temp =0; // 새로운 temp변수 선언 후 반복문이 돌아갈때 각 행의 값을 누적해서 0,1,2로 증가시킨다.
		
		for(int col = 0; col<arr[temp].length; col++) { //열 반복
			//row를 쓸 수 없는 이유: 현재 for문에는 row가 없다.
			//정사각형의 배열은 0,1,2든 어떤 행을 넣어도 열의 길이는 같다 
			
			//temp는 아무리 늘어나도 3행 미만까지만 증가해야한다. 그래서temp++에 if문달아주기
			
			// 열이 바뀌는 시점에 합계를 다시 계산할 수 있도록 sum을 
			// sum을 열 반복이 시작되는 부분에 작성
			int sum = 0;//합계 누적용 변수
			for(int row =0; row < arr.length; row++) { //행 반복
				sum += arr[row][col];
				
			}
			System.out.println(col + "번째 열 합 : " + sum);
			
			//열을 반복하는 for문의 조건식 부분에서 
			// 특정 행을 지정하는 temp값이 
			// 행의 마지막 인덱스를 초과하지 않도록 추가 조건(-1)을 작성
			if(temp < arr.length - 1) { 
				//temp가 2일때 arr.length == 3보다 작은게 조건에 맞기때문에 -1을 통해
				// 0,1,2에서 끝나고 그 뒤에는 증가하지않게 해준다. 
				
				temp++;
			}
		}
풀이
1. 2차원 배열 arr 선언
2. 행의 합 출력을 위한 행 반복for문 
3. 행 합계 저장용 변수 sum을 for문 안에 선언하는 이유: 행이 바뀌는 시점에 합계를 다시 계산할 수 있도록 sum을 // sum을 행 반복이 시작되는 부분에 작성
4. 열 반복 for문 작성 후 sum += arr[row][col];에 한 행의 값 누적
5. 열이 3바퀴를 돌고 끝나는 행 for문 바깥 시점에 출력
6. 조건문 작성
반응형