버블 정렬, AWS, Docker, MySQL

calis_ws·2023년 5월 15일
0

버블 정렬

거품이 떠오르는 것 처럼 정렬이 되기 때문에 버블정렬이다. (오름차순)

0번과 1번 swap

 public static void main(String[] args) {
       int[] arr = {7, 2, 3, 9, 28, 11};

       int temp = arr[0];
       arr[0] = arr[1];
       arr[1] = temp;

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

특정 조건일때만 swap되는 처리

public static void main(String[] args) {
       int[] arr = {7, 2, 3, 9, 28, 11};

       for (int i = 0; i < arr.length - 1; i++) {
           if(arr[0] > arr[1]){
               int temp = arr[0];
               arr[0] = arr[1];
               arr[1] = temp;
           }
       }
   }

arr[0], arr[1]i, i+1로 바꾼다.

public static void main(String[] args) {
       int[] arr = {7, 2, 3, 9, 28, 1};
		// arr.length - 1로 하지 않으면 out of index가 발생합니다.
       for (int i = 0; i < arr.length - 1; i++) {
           if (arr[i] > arr[i + 1]) {
               int temp = arr[i];
               arr[i] = arr[i + 1];
               arr[i + 1] = temp;
           }
       }
       System.out.println(Arrays.toString(arr));
   }

중첩 loop구성

public static void main(String[] args) {
       int[] arr = {7, 2, 3, 9, 28, 1};

       for (int j = 0; j < arr.length - 1; j++) {
           for (int i = 0; i < arr.length - 1; i++) {
               if (arr[i] > arr[i + 1]) {
                   int temp = arr[i];
                   arr[i] = arr[i + 1];
                   arr[i + 1] = temp;
               }
           }
       }
       System.out.println(Arrays.toString(arr));
   }

정렬이 실행할 때마다 가장 큰 아이템은 제외

public static void main(String[] args) {
       int[] arr = {7, 2, 3, 9, 28, 1};

       for (int j = 1; j <= arr.length; j++) {
           for (int i = 0; i < arr.length - j; i++) {
               if (arr[i] > arr[i + 1]) {
                   int temp = arr[i];
                   arr[i] = arr[i + 1];
                   arr[i + 1] = temp;
               }
           }
       }
       System.out.println(Arrays.toString(arr));
   }

OOP적용

main에서는 객체 생성과 호출 하는 기능만 남긴다.
sortARound() 메소드

import java.util.Arrays;

public class BubbleSort02 {
   public int[] sortARound(int[] arr){
       for (int i = 0; i < arr.length - 1; i++) {
           if (arr[i] > arr[i + 1]) {
               int temp = arr[i];
               arr[i] = arr[i + 1];
               arr[i + 1] = temp;
           }
       }
       return arr;
   }
   public static void main(String[] args) {
       BubbleSort02 bubbleSort02 = new BubbleSort02();
       int[] arr = {7, 2, 3, 9, 28, 1};

       for (int j = 1; j <= arr.length; j++) {
           arr = bubbleSort02.sortARound(arr);
       }
       System.out.println(Arrays.toString(arr));
   }
}

반복하는 기능을 sort()로 분리
arr.length - j 부분은 parameter(until)로 변경

import java.util.Arrays;

public class BubbleSort02 {
   public int[] sortARound(int[] arr, int until){ 	// until = arr.length - j
       for (int i = 0; i < until; i++) {  // 1 --> j
           if (arr[i] > arr[i + 1]) {
               int temp = arr[i];
               arr[i] = arr[i + 1];
               arr[i + 1] = temp;
           }
       }
       return arr;
   }

   public int[] sort(int[] arr){
       for (int j = 1; j <= arr.length; j++) {
           arr = sortARound(arr, arr.length - j);	// arr.length - j = until
       }
       return arr;
   }
  
   public static void main(String[] args) {
       BubbleSort02 bubbleSort02 = new BubbleSort02();
       int[] arr = {7, 2, 3, 9, 28, 1};
       arr = bubbleSort02.sort(arr);
       System.out.println(Arrays.toString(arr));
   }
}

BubbleSort2

가장 작은 숫자가 0번자리에 오는 버블정렬

import java.util.Arrays;

public class BubbleSort2 {
    public int[] sort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i + 1; j <= arr.length - 1; j++) {
                if (arr[i] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }
    public static void main(String[] args) {
        BubbleSort2 bubbleSort2 = new BubbleSort2();
        int[] arr = {7, 2, 3, 9, 28, 1};
        arr = bubbleSort2.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

AWS에서 ec2 띄우기

인스턴스 시작

애플리케이션 및 OS 이미지

인스턴스 유형과 키 페어 생성

네트워크 설정

스토리지 구성

스팟 인스턴스

인스턴스 생성 완료

SSH 접속

ubuntu : 리눅스 배포판
ssh ubuntu@ec2도메인 -i <pemkey_name>.pem

진행이 잘 되다가 여기서 막혔다.
이유는 'SK 브로드밴드' 네트워크를 사용하기 때문

포트 10880으로 생성

접속 완료

희준님의 도움으로 해결 할 수 있었다. 희준님 감사합니다.

Docker

루트 권한으로 바꾸기

$ sudo su -

docker설치 스크립트 다운로드

Docker설치 실행

Oh My Bash 설치

Nginx 띄우기

docker run nginx

Ctrl + C : exit

docker run -p 80:80 nginx

Nginx 접근 성공!

MySQL

MySQL 띄우기

인스턴스 포트 3306 추가

MySQL WorkBench 설치

https://www.mysql.com/products/workbench/

Connections 추가

show databases 실행

Ctrl + Enter

인사이트 타임

Monthly Test 1차 16:00 ~ 17:00

나머지 자습 시간

review

오늘의 알고리즘 시간은 버블 정렬에 대해 배워보았다. 알고리즘 문제들을 보면서 느낀건 알고리즘에서 정렬은 아주 중요한 부분이라고 생각한다. 저번 시간에 살짝 맛 봤던 sort 함수도 있었는데 정렬에 대해서도 공부를 더 해야 할 것 같다.

알고리즘 시간을 제외하고 aws로 생성한 도메인으로 docker와 mysql까지 설치해서 다뤄보는 시간을 가졌는데 오랜만에 스트레스 받지 않고 수월하게 진행하는 수업 시간이었던 것 같다. 앞으로도 오늘만 같았으면 좋겠다.
근데 의외로 많은 사람들이 서버 설치와 셋팅 과정에서 어려움을 겪는 듯 하다. 원기님도 쉽게 해낸 나에게 devops를 추천해주셨다. 아마 서버 운영 관련 분야인 것 같은데 조만간 자세히 알아봐야겠다.

오늘 처음으로 시험을 치뤘는데 다들 긴장을 많이 한 것처럼 보였지만 나는 긴장이 1도 되지 않았다. 어차피 쫓겨나는 것도 아니고 단순히 수강생들의 수준편차를 보기 위한 시험이라고 생각했기 때문이다.
시험 직전에 강사님께서 아주 어렵게 냈다고 겁을 주시긴 했지만 막상 치뤄보니 난이도가 수업을 잘 들으면 대부분 다 풀어낼 수 있는 수준이었다. 아쉬운 부분도 있었지만 나쁘지 않게 본 것 같다. 절반 이상만 넘었으면 좋겠다.

profile
반갑습니다람지

0개의 댓글