책/멘토씨리즈 자바

[멘토씨리즈 자바] 06 배열 응용문제

yn98 2024. 7. 21. 00:57

1. 다음 중 배열을 생성하는 방법으로 틀린 것은 ?

  1. int[] arr = new int[4];
  2. int arr[] = new int[4];
  3. int arr[] = {1, 2, 3, 5};
  4. int[][] arr = new int [][4];

 > 옳은 예시 - int[][] arr = new int [4][4];

2. 다음 코드의 빈칸을 완성해 주어진 배열에서 짝수만 더하여 합을 구해보세요.

public class ArrayExample {
    public static void main(String[] args) {
 
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int sum = 0;
 
        for(int i = 0; i < arr.length; i++) {
            // 빈칸 //
        }
 
        System.out.println("짝수들의 합 : " + sum);
    }
}

정답 )

더보기
더보기

if(arr[i] % 2 == 0) {
             sum += arr[i];
            }

3. 철수는 동생과 카드 게임을 했습니다. 카드 게임에 사용된 카드는 중복되는 숫자 없이 총 10장입니다. 배열과 랜덤 함수를 이용해 철수가 게임에 사용했던 카드를 구해보세요. 카드에 적힌 숫자는 1부터 10이며, 카드는 섞여있으므로 순서는 상관없습니다.

 

package section06;
 
import java.util.Arrays;
 
public class PRACTICE_06_03 {
	public static void main(String[] args) {
        int n = 10;
        int[] arr = new int[n];
        
        for (int i = 0; i < arr.length; i++) { 
        	arr[i] = (int)(Math.random() * 10 + 1); // 1 - 10까지 랜덤함수
            for (int j = 0; j < i; j++) {
            	if (arr[j] == arr[i]) { //  1-10 중에 랜덤으로 선택된 수가 중복된다면
                	i--; 
                }
            }
        }
        System.out.println(Arrays.toString(arr)); // 배열 출력
    }
}

4. 마방진은 숫자가 배열되어 있으며, 가로의 합, 세로의 합, 대각선의 합이 모두 동일하게 설계되어 있습니다. 2차원 배열을 이용해 마방진을 구현해 보세요.

 

         < 조건 >

  • 배열은 5*5로 합니다.
  • 시작 위치는 (0, 2)입니다.
  • 마방진에 들어가는 숫자는 1부터 시작합니다.
public class MagicSquare {

    public static void main(String[] args) {
        int n = 5; // 마방진의 크기 (5x5)
        int[][] magicSquare = new int[n][n]; // 마방진을 저장할 2차원 배열
        int num = 1; // 마방진에 들어갈 숫자, 1부터 시작
        int i = 0, j = 2; // 시작 위치 (0, 2)

        // 마방진 생성 로직
        while (num <= n * n) { // 마방진의 모든 칸에 숫자를 채울 때까지 반복
            magicSquare[i][j] = num; // 현재 위치에 숫자 할당
            num++; // 다음 숫자로 이동

            // 다음 위치 계산
            int i2 = (i - 1 + n) % n; // 위로 한 칸 이동 (범위를 벗어나면 n-1 위치로 이동)
            int j2 = (j + 1) % n; // 오른쪽으로 한 칸 이동 (범위를 벗어나면 0 위치로 이동)

            // 다음 위치에 이미 숫자가 할당되어 있으면 아래로 한 칸 이동
            if (magicSquare[i2][j2] != 0) {
                i = (i + 1) % n; // 아래로 한 칸 이동 (범위를 벗어나면 0 위치로 이동)
            } else {
                i = i2;
                j = j2;
            }
        }

        // 마방진 출력
        for (i = 0; i < n; i++) { // 모든 행에 대해 반복
            for (j = 0; j < n; j++) { // 한 행의 모든 열에 대해 반복
                System.out.print(magicSquare[i][j] + " "); // 숫자와 공백 출력
            }
            System.out.println(); // 한 행 출력 후 줄 바꿈
        }
    }
}