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 |