멋사 Backend 21일차 🦁

신재원·2023년 5월 16일

🙆‍♂️ Java

🐱‍🚀 삽입 정렬 (Insert Sort)

  • 정렬되지 않은 부분의 원소를 하나씩 정렬된 부분에 삽입하면서 정렬을 완성합니다.
  • 시간 복잡도가 O(n2)입니다.
import java.util.Arrays;

public class InsertSort {
    public static void main(String[] args) {
        int[] numbers = {50, 20, 30, 10, 40};

        for (int i = 1; i < numbers.length; i++) {
            int key = numbers[i]; // 하나의 원소 정함
            int j = i - 1;

            // 배열을 순회하여 오름차순으로 정렬
            while (j >= 0 && numbers[j] > key) {
                numbers[j + 1] = numbers[j];
                j--;
            }
            numbers[j + 1] = key;
        }
        System.out.println(Arrays.toString(numbers));
    }
}

⭕ 삽입 정렬 메소드 분리

import java.util.Arrays;

public class InsertSort {

    // 오름차순 기능
    public void sort(int[] numbers) {
        for (int i = 1; i < numbers.length; i++) {
            int pivot = numbers[i];
            int j = i - 1;
            shiftNumber(numbers, pivot, j);
        }
    }

    // 내림차순 기능 (오버로딩)
    public void sort(int[] numbers, boolean isDesc) {
        if (isDesc) {
            reverseSort(numbers);
        }
    }

    // 내림차순 기능
    private void reverseSort(int[] numbers) {
        sort(numbers); // 오름차순으로 정렬을 먼저 해준다.
        int start = 0;
        int end = numbers.length - 1;

        while (start < end) {
            int temp = numbers[start];
            numbers[start] = numbers[end];
            numbers[end] = temp;
            start++;
            end--;
        }

    }

    // 배열의 값 이동 기능
    public void shiftNumber(int[] numbers, int pivot, int j) {
        while (j >= 0 && numbers[j] > pivot) {
            numbers[j + 1] = numbers[j];
            j--;
        }
        numbers[j + 1] = pivot;
    }


    public static void main(String[] args) {
        InsertSort sort = new InsertSort();
        int[] numbers = {50, 40, 10, 20, 60};

        // 오름차순 출력
        sort.sort(numbers);
        System.out.println(Arrays.toString(numbers));

        // 내림차순 출력
        sort.sort(numbers, true);
        System.out.println(Arrays.toString(numbers));

    }
}

🐱‍👓 선택 정렬 (Selection Sort)

  • 최소값을 찾고, 그 최소값을 현재위치와 swap 하는 과정을 반복하는 정렬입니다.
import java.util.Arrays;

public class SelectSort {
    public static void main(String[] args) {
        int[] numbers = {50, 40, 10, 20, 60};

        for (int i = 0; i < numbers.length; i++) {
            int min = i;

            // 최소값 인덱스 찾기
            for (int j = i + 1; j < numbers.length; j++) {
                if(numbers[min] > numbers[j]){
                    min = j;
                }
            }

            int temp = numbers[i];
            numbers[i] = numbers[min];
            numbers[min] = temp;

        }
        System.out.println(Arrays.toString(numbers));
    }
}

😎 선택정렬 메소드 분리

import java.util.Arrays;

public class SelectSort {
    // 최소값 찾는 기능
    public int findMin(int[] numbers, int loop) {
        int min = loop;
        // 최소값 인덱스 찾기
        for (int j = loop + 1; j < numbers.length; j++) {
            if (numbers[min] > numbers[j]) {
                min = j;
            }
        }
        return min;
    }

    // swap(변경) 기능
    public void swap(int[] numbers) {

        for (int i = 0; i < numbers.length; i++) {
            int min = findMin(numbers, i);
            int temp = numbers[i];
            numbers[i] = numbers[min];
            numbers[min] = temp;
        }
    }

    public static void main(String[] args) {
        SelectSort sort = new SelectSort();
        int[] numbers = {50, 40, 10, 20, 60};
        sort.swap(numbers);
        System.out.println(Arrays.toString(numbers));
    }
}

🚢 Docker (도커)

💬 실습

  • Spring프로젝트를 Docker로 빌드하여 배포하기
    • AWS EC2사용, (하루에 200원)
    • 보안정책에 추가하여 Port를 열어줘야한다.
  • docker container prune (사용하지 않는 컨테이너 제거), 많이사용

리소스 모니터링 이란?

  • 시스템에서 사용되는 리소스(자원)의 상태를 지속적으로 감시하고 기록하는 과정을 말합니다
  • 모니터링을 통해 서버의 상태를 확인하면서 서버의 부하를 고려해 저렴한 서버를 운영할 필요가 있습니다.

0개의 댓글