1. 문제

/******************************************************************************
 * 문제 3-2
 ******************************************************************************/
// 새로운 프로젝트와 Main.java 소스파일을 만든 후 [문제 3-1]에서 작성한 소스코드를 복사해서 삽입하라.
// [문제 3-2] 실행 결과를 참고하여 아래 코드를 완성하라.

 

public class Main
{
    public static int[][] makeArray(Scanner s) {
        기존 함수를 다음과 같이 수정하라.
        출력 결과를 참고하여 비정방형 배열 arr[][]을 생성한 후 
        해당 배열의 각 원소를 출력 결과처럼 초기화한 후 배열을 리턴한다.
    }

    public static void printArray(int arr[][]) {
        기존 코드와 동일
    }
    
    public static void main(String[] args) {
        기존 코드와 동일함
    }
}

 

해당 문제는 1번 문제에서 만들었던 정방형 배열을 비정방형으로 바꾸는 꽤나 쉬운 문제였다.

 

2. 전체코드

import java.util.*;

class Main {
   public static int[][] makeArray(Scanner s) {
      System.out.print("array size? ");
      int length = s.nextInt();
      int arr[][] = new int[length][];
      for(int i=0; i<length; i++){
        arr[i] = new int[length - i]; //비정방형 배열 생성
        int colLength = arr[i].length;
        int value = i; //행마다 시작값이 바뀌게 설정.
        for(int j=0; j<colLength; j++){
          arr[i][j] = value++;
        }
      }
      return arr;
    }

    public static void printArray(int arr[][]) {
        //출력 결과를 참고하여 2차원 배열 arr[][]의 모든 원소들을 출력한다.
      for(int i=0; i<arr.length; i++){
        System.out.print("arr["+i+"] ");
        for(int j =0; j < arr[i].length; j++){
          System.out.print(arr[i][j]+" ");
        }
        System.out.println();
      }
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int arr[][];
        
        while(true){ // 아래 과정을 계속 반복 수행한다.
            arr = makeArray(scanner);
            printArray(arr);
            System.out.print("continue? ");
            String str = scanner.next();
            System.out.println();
            //입력된 단어가 "yes"이면 계속 반복 수행하고 "yes"가 아니면 여기서 반복을 중단한다.
            if(!str.equals("yes")) break;
        }
 
        scanner.close();
        System.out.println("Done.");
    }
}

 

3. 대충 이해하기

3-1번 문제와 비교하여 makeArray 메소드만 바뀌었고, 해당 부분도 정방형 배열에서 비정방형 배열로 바뀐 점이 핵심이다.

3-1. 각 행의 시작값 구하기

시작값 구하기

 

비정방형 배열에서 각 행의 시작값을 보면 각 행과 똑같은 것을 볼 수 있다.

0행은 0부터 시작

1행은 1부터 시작

2행은 2부터 시작

즉 코드로는 int value = 각 행의 index; 로 나타낼 수 있었다.

 

3-2. 각 행의 길이 구하기

각 행의 길이는 배열의 사이즈부터 시작해서 각 행을 반복할 수록 1씩 줄어드는 것을 볼 수 있었다.

코드로 나타내면 다음과 같다.

 

 for(int i=0; i<length; i++){ //행을 반복하는 FOR문
        arr[i] = new int[length - i]; //비정방형 배열 생성 (i가 커질수록 점점 작아진다.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'코딩이야기 > 연습문제' 카테고리의 다른 글

[라이브코딩 연습] JAVA 실습문제 4-2  (0) 2022.11.01
[라이브코딩 연습] JAVA 실습문제 4-1  (0) 2022.11.01
JAVA 실습문제 3-1  (0) 2022.10.28
JAVA 실습문제 3-3  (0) 2022.10.25

+ Recent posts