JavaRush /Java Blog /Random-KO /1차원 및 2차원 배열과 관련된 문제 해결
Анзор Кармов
레벨 31
Санкт-Петербург

1차원 및 2차원 배열과 관련된 문제 해결

Random-KO 그룹에 게시되었습니다
이 기사에서는 어레이와 관련된 문제를 고려하고 더 넓은 범위에서 독립적인 분석을 제공합니다. 우리는 다음 분야의 기술을 향상시킬 것입니다:
  1. 1차원 배열

    1. 문제 “시퀀스 계속” ;
    2. 요소 검색 작업;
    3. 배열 요소 정렬과 관련된 문제입니다.
  2. 2차원 배열

    1. 작업 "형식의 행렬 구성" ;
    2. 작업 “가장 예상치 못한 위치(행, 열, 대각선)에서 요소 찾기” ;
    3. 작업 "물 전투를 위해 배를 준비하십시오 . "
모든 문제에는 정수 배열을 사용합니다. 1차원 및 2차원 배열과 관련된 문제 해결 - 1

1차원 배열과 관련된 문제

시퀀스를 계속하세요

이 일련의 작업에서는 다음을 수행해야 합니다.
  1. 이 숫자 시퀀스 또는 해당 숫자 시퀀스가 ​​형성되는 패턴을 결정합니다.
  2. 주어진 시퀀스의 첫 번째 N 요소를 정수 배열로 구성하고 배열 요소를 화면에 표시하는 함수를 작성하세요.
다음 숫자 시리즈를 계속하는 작업에 직면했다고 가정해 보겠습니다.

1, 2, 3, 4, 5…
1단계: 패턴을 식별합니다. 여기에 있는 모든 것은 기본입니다. 일련의 자연수입니다. 2단계: 배열 형태로 주어진 행의 처음 N개 요소를 구성하는 함수를 작성합니다.
public class Main {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(createArrayOfIntegers(10)));

        // Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }

    public static int[] createArrayOfIntegers(int n) {
        int[] array = new int[n];
        for (int i = 1; i <= n; i++) {
            array[i-1] = i;
        }

        return array;
    }
}
마찬가지로, 다음 시퀀스를 계속하는 함수를 작성해야 합니다.

A. 2,  4,  6,   8,  10...
B. 1,  3,  5,   7,   9...
C. 1,  4,  9,  16,  25...
D. 1,  8, 27,  64, 125...
E. 1, -1,  1,  -1,   1,  -1...
F. 1, -2,  3,  -4,   5,  -6...
G. 1, -4,  9, -16,  25....
H. 1,  0,  2,   0,   3,   0,  4....
I. 1,  2,  6,  24, 120, 720...
J. 1,  1,  2,   3,   5,   8, 13, 21…

요소 검색

이 일련의 작업에서는 완성된 배열에서 몇 가지 속성이 있는 요소를 찾아야 합니다. 예를 들어 최대값을 갖는 요소입니다. 설명을 위해 배열을 가져와 배열의 최대 요소 인덱스를 결정한 다음 이 요소를 해당 인덱스와 함께 콘솔에 출력하는 함수에 대한 코드를 작성해 보겠습니다. 또한 클래스를 사용하여 java.util.concurrent.ThreadLocalRandom임의의 요소로 구성된 주어진 길이의 정수 배열을 빠르게 생성할 수 있는 방법도 보여 드리겠습니다.
public class Main {

    public static void main(String[] args) {
        int[] array = generateRandomIntArray(10);
        findMax(array);

        /*
        Output:
        Generated random array: [50551934, -551646189, 410352642, 1822778873, -1744293692, -1140287711, 878876868, -2116893120, -797503442, -703924530]
        Max element is [1822778873] with index [3]
        */

    }


    public static int[] generateRandomIntArray(int n) {
        int[] array = ThreadLocalRandom.current().ints().limit(n).toArray();
        System.out.println("Generated random array: " + Arrays.toString(array));
        return array;
    }

    public static void findMax(int[] array) {
        int maxIndex = 0;
        int max = array[maxIndex];
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
                maxIndex = i;
            }
        }

        System.out.println(String.format("Max element is [%d] with index [%d]", max, maxIndex));
    }
}
이제 작업 자체입니다. 임의의 정수 요소 배열에서 다음을 찾아야 합니다.
  1. 최고.
  2. 최저한의.
  3. 평균.
  4. 최대 요소와 최소 요소 사이의 요소 수입니다.
  5. 첫 번째 소수입니다.
  6. 마지막 소수입니다.
  7. 배열에 있는 소수의 수입니다.
값과 인덱스를 모두 표시할 수 있습니다. 찾고 있는 요소가 없다면 원하는 대로 화면에 표시해 보세요. 마지막 작업에서는 오름차순으로 정렬된 정수 요소 배열을 준비해야 합니다. 이 배열에서는 최소한의 작업 수( Hint ) 에서 값으로 요소를 찾아야 합니다 .

정렬

이 일련의 문제에서는 다양한 정렬 알고리즘을 사용하여 정수 요소 배열을 정렬해야 합니다. 다양한 알고리즘에 대한 자료가 인터넷에 꽤 많이 있습니다. 먼저 알고리즘의 본질을 이해한 다음 직접 구현해 보세요. 먼저 종이(블록 다이어그램, 의사 코드 등 원하는 대로)에 기록한 다음 IDEA에 기록합니다. 구현 알고리즘:
  • 버블정렬;
  • 선택 정렬;
  • 삽입 정렬;
  • 병합 정렬.

2차원 배열과 관련된 문제

행렬 그리기

다음 일련의 작업에서는 특정 방식으로 구성된 2차원 배열(행렬)을 그려야 합니다(콘솔에 출력). 이는 작업에서 지정한 패턴과 일치해야 합니다. 예를 들어 보겠습니다. m*n다음 형식의 행렬 ( m행 수와 n행의 요소 수) 을 작성하고 표시해야 합니다 .

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
우리를 위해 모든 작업을 수행하고 행렬을 콘솔에 아름답게 출력하는 함수를 제공하는 함수를 작성해 보겠습니다(유용할 수 있음).
public class Main {

    public static void main(String[] args) {
        createAndDrawMatrix(3, 4);

    }

    public static void createAndDrawMatrix(int m, int n) {
        int[][] matrix = new int[m][n];

        int value = 1;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] = value;
                value ++;
            }
        }

        printMatrix(matrix);
    }

    public static void printMatrix(int[][] matrix) {
        for (int[] array : matrix) {
            for (int anInt : array) {
                System.out.print(String.format("%3d", anInt));
            }
            System.out.println();
        }
    }
}
m*n이제 작업: 다음 형식의 행렬을 표시합니다 . 4, 3, 2, 1 8, 7, 6, 5, 12,11,10, 9 ----------- 1, 4, 7 2, 5, 8 3, 6, 9 ----------- 9, 8, 7 6, 5, 4 3, 2, 1 ----------- 12,11,10, 9 8, 7, 6, 5, 4, 3, 2, 1

요소 검색

이 섹션에서는 행렬의 여러 부분(특정 열 또는 특정 행)에 있는 다양한 요소에 대한 검색을 구현해야 합니다. 다음 형식의 행렬이 있다고 가정해 보겠습니다. -1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13 14 -15 16 -17 18 -19 20 -21 22 -23 24 -25 26 -27 28 -29 30 -31 32 -33 34 -35 예를 들어, 세 번째 행에서 음수 요소의 수를 찾아보겠습니다.
public class Main {

    public static void main(String[] args) {
        int [][] matrix = {
                { -1,   2,   -3,    4,   -5,    6,   -7},
                {  8,  -9,   10,  -11,   12,  -13,   14},
                {-15,  16,  -17,   18,  -19,   20,  -21},
                { 22, -23,   24,  -25,   26,  -27,   28},
                {-29,  30,  -31,   32,  -33,   34,  -35}
        };

        findNegativeCountInRow(matrix, 3);
    }

    private static void findNegativeCountInRow(int[][] matrix, int rowNumber) {
        int negativeCount = 0;
        for (int element : matrix[rowNumber]){
            if (element < 0) {
                negativeCount ++;
            }
        }

        System.out.println("Matrix: ");
        printMatrix(matrix);
        System.out.println(String.format("Has %d negative elements in #%d row ", negativeCount, rowNumber));

    }

    public static void printMatrix(int[][] matrix) {
        for (int[] array : matrix) {
            for (int anInt : array) {
                System.out.print(String.format("%5d", anInt));
            }
            System.out.println();
        }
    }
}
기본 메소드를 실행하면 콘솔에 다음이 출력됩니다.

Matrix: 
   -1    2   -3    4   -5    6   -7
    8   -9   10  -11   12  -13   14
  -15   16  -17   18  -19   20  -21
   22  -23   24  -25   26  -27   28
  -29   30  -31   32  -33   34  -35
Has 3 negative elements in #3 row 
이제 작업입니다. 홀수에 대해서는 다음 형식의 n행렬을 인쇄합니다 .n*n

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
이 매트릭스에서 다음을 도출합니다.
  • 모든 부정적인 요소;
  • 문자열의 모든 음수 요소 i;
  • 열의 모든 음수 요소 j;
  • 모든 대각선 요소(왼쪽 위 모서리부터 시작)
  • 모든 대각선 요소(왼쪽 하단부터 시작)

해전

별표가 있는 마지막 섹션: 팁이나 예시가 없습니다. 매트릭스는 해전 게임을 프로그래밍하는 데 이상적입니다. 이 게임을 프로그래밍하는 단계 중 하나는 경기장에 선박을 배치하는 것입니다. 이러한 문제들을 많이 해결한다면 안심하고 해상 전투에 대처할 수 있을 것입니다. 따라서 0으로 구성된 10x10 행렬이 주어졌습니다. 해전을 벌이는 필드라고 가정해보자. 이 필드에서 0은 빈 셀이고, 1은 선박 또는 선박의 일부입니다. 해전 게임의 규칙에 따라 무작위로 배치하는 함수를 작성하세요.
  • 단층 선박 10척;
  • 10개의 더블 데크 코발;
  • 3층 선박 5척;
  • 해전 게임을 위한 모든 선박을 배치합니다(단일 갑판 4척, 이중 갑판 3척, 3갑판 2척, 4갑판 1척).
그게 다야! 모든 프로그래밍 주제와 마찬가지로 배열은 연습을 통해 배우는 것이 가장 좋습니다. 즐거운 워밍업을 즐겨보세요!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION