[Algorithm] 자바 알고리즘 - 배열

Jifrozen·2021년 10월 10일
0

Algorithm

목록 보기
59/70
post-thumbnail

자바 알고리즘 - 배열

배열 선언 초기화

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차원 배열에서 동서남북 이동

        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++;
                }

            }

        }

0개의 댓글