[Algorithm]Javaアルゴリズム-配列

18275 ワード

Javaアルゴリズム-配列


アレイ宣言の初期化

int[] arr=new int[5]
> 0 0 0 0 0

// 값넣을때
arr[2]=2
>0 0 2 0 0

ArrayList<Integer> arr=new ArrayList<>();
-> 초기 크기 설정 안해도 arrayList 내부에서 스스로 설정 (10)

//값 넣을때
arr.add(2);
>2

最大値を求める


1. Math.maxの使用


->私は通常、簡単に最大値を求めることができないので、あまり使いません.

2.max変数の使用


最大値を持つインデックスや前後比較で誰が大きいかなどの問題についてmax変数を用いて解く.
int max = list[0];
        for (int i = 1; i < n; i++) {
            if (list[i] > max) {
                max = list[i];
                answer++;
            }
        }

配列に値を入力


1.ArrayListのget関数

//피보나치
    	ArrayList<Integer> arr = new ArrayList<>();

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        arr.add(1);
        arr.add(1);

        for (int i = 2; i < n; i++) {
            arr.add(arr.get(i - 2) + arr.get(i - 1));
        }

2.String配列の場合、charAt


3.listの場合arr[i]


少数を得る(エラトステネス体)

import java.util.*;

public class 소수 {
    public static void main(String args[]) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int result = 0;
        int[] list = new int[n + 1];
        for (int i = 2; i <= n; i++) {
        	// 자기 자신으로만 나눠지는 수 2,3 ....
            if (list[i] == 0) {
                result++;//소수++
                //범위 전까지 배수 찾음
                for (int j = i; j <= n; j = j + i) {
                    list[j] = 1;
                }
            }
        }
        System.out.print(result);
        sc.close();
    }
}
// 특정 수 가 소수인지 아닌지 판별
public static boolean isPrime(int num) {
        if (num == 1)
            return false;
        for (int i = 2; i < num; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

すべての垂直および水平対角線を追加

		//가로
        for (int i = 0; i < n; i++) {
            int max = 0;
            for (int j = 0; j < n; j++) {
                arr[i][j] = sc.nextInt();
                max += arr[i][j];
            }
            answer = Math.max(max, answer);
        }
        //세로
        for (int i = 0; i < n; i++) {
            int max = 0;
            for (int j = 0; j < n; j++) {
                max += arr[j][i];
            }
            answer = Math.max(answer, max);
        }
        //대각선
        int max1 = 0;
        int max2 = 0;
        for (int i = 0; i < n; i++) {

            max1 += arr[i][i];
            max2 += arr[i][n - i - 1];
        }

2 Dアレイで中東を南北に移動

        int[] dx = { 1, 0, -1, 0 };
        int[] dy = { 0, -1, 0, 1 };
        
         for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                boolean flag = true;
                for (int d = 0; d < 4; d++) {
                    int nx = i + dx[d];
                    int ny = j + dy[d];
                    if (nx >= 0 && nx < n && ny >= 0 && ny < n && arr[nx][ny] >= arr[i][j]) {
                        flag = false;
                        break;

                    }
                }
                if (flag) {
                    answer++;
                }

            }

        }