포스트

버블 정렬 오름차순, 배열 중복값 처리, 2차배열, while

강의 내용 복습 : 코리아IT 신촌점 자바 강의 (2024-04-23,24 강의)

  • Tool :
    Java Eclipse


🔔 중복값 처리

📌 배열 요소 중복값 제거

  • 배열을 생성했을 때 별도의 조건이 없다면 요소들의 값이 중복될 수 있습니다.
  • 중복되는 값이 없도록 설정하려면 아래와 같은 조건문을 작성해야 됩니다.
  • 원리는 배열의 요소가 중복될 경우 인덱스를 차감하여 요소를 다시 할당시키는 것입니다.
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
public static void main(String[] args) {
    
    // 정수 10개를 참조할 수 있는 배열 arr을 생성하였습니다.
    int[] arr = new int[10];
    
    // 배열 요소에 순차적으로 접근할 수 있도록 설정하였습니다.
    for(int i = 0; i < arr.length; i++) {
        // 배열에 1부터 20까지의 정수가 랜덤으로 참조될 수 있도록 설정하였습니다.
        arr[i] = (int)(Math.random() * 20) + 1;
        
        for(int j = 0; j < i; j++) {
            // 배열의 앞 인덱스에 할당된 값과 후 인덱스에 할당된 값이 동일한지 확인하도록 설정하였습니다.
            if(arr[j] == arr[i]) {
                // 앞뒤 인덱스에 할당된 값이 동일할 경우 '중복값 발생' 문자열과 중복값을 출력하도록 설정하였습니다.
                System.out.println("중복값 발생 = " + arr[i]);
                // 중복값 출력 후 배열의 앞 인덱스의 값을 다시 랜덤으로 할당시키도록 설정하였습니다.
                i--;
                // 중복값 처리 관련 조건문에서 이탈하도록 설정하였습니다.
                break;
            }
        }
    }
    
    // arr 배열 요소가 서로 중복되지 않을 경우 arr 배열을 출력하도록 설정하였습니다.
    System.out.println("중복값 처리가 완료된 arr 배열 = " + Arrays.toString(arr));
    
}


🔔 while 조건문

📌 반복하는 조건문

  • while 조건문은 if 및 switch 조건문과는 다르게, 반복하는 조건문입니다.
  • while 괄호 내부 조건이 TRUE일 경우 FALSE가 될 때까지 반복 실행됩니다.
  • 따라서 while 조건문의 루프 내에 조건을 거짓으로 만드는 로직이 있어야 실행이 종료됩니다.
  • while 조건문은 반복 횟수가 정해져있지 않은 경우 사용됩니다.
  • 또는 루프 시작 전 루프의 조건을 알 수 없는 경우 사용됩니다.

📌 while 조건문 구현

  • while 조건문을 아래와 같이 구현하였습니다.
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
public static void main(String[] args) {
    
    // 테스트를 위한 변수를 선언하였습니다.
    int[] whileTest = new int[10];
    
    // 테스트용 배열에 랜덤의 정수를 할당시켰습니다.
    for(int i = 0; i < whileTest.length; i++) {
        whileTest[i] = (int)(Math.random() * 20) + 1;
    }
    
    // 정수가 할당된 배열을 출력하였습니다.
    System.out.println("whileTest 배열 = " + Arrays.toString(whileTest));
    
    // while 조건문의 조건을 제어할 변수를 선언하였습니다.
    int count = 0;
    
    // while 조건문을 이용하여 배열에서 짝수만 출력할 수 있도록 설정하였습니다.
    while(count < whileTest.length) {
        // value 변수를 선언하여 whileTest 배열의 각 인덱스에 할당된 정수를 참조하도록 하였습니다.
        int value = whileTest[count++];
        // value 변수를 2로 나누었을 때의 몫이 0일 경우를 if 조건으로 설정하였습니다.
        if(value % 2 == 0) {
            // whileTest 배열에 짝수가 할당되었을 경우 출력되도록 설정하였습니다.
            System.out.print(value + "\t");
        }
    }
    
}


🔔 버블 정렬

📌 오름차순 및 내림차순 정렬

  • 정렬이란 두 숫자를 비교하여 크기의 순서대로 인덱스의 끝으로 보내는 것입니다.
  • 인덱스의 끝으로 갈수록 오름차순은 값이 커지고 내림차순은 값이 작아집니다.
  • 크고 작은 값을 비교하여 다른 인덱스로 보내는 정렬 방법은 10개 이상으로 다양합니다.

📌 버블 정렬

  • 버블 정렬은 배열 요소를 정리하는 방법 중 하나입니다.
  • 버블 정렬은 인덱스를 처음부터 끝까지 탐색합니다.
  • 버블 정렬은 비효율적이지만 정렬 방법 중 구현이 가장 간편한 편입니다.

📌 버블 정렬 구현

  • 버블 정렬을 아래와 같이 구현하였습니다.
  • 버블 정렬의 if 조건문은 등호의 방향으로 오름차순 또는 내림차순이 결정됩니다.
  • 오름차순은 arr[j]가 arr[j+1]보다 클 경우로 설정됩니다.
  • 내림차순은 arr[j]가 arr[j+1]보다 클 경우로 설정됩니다.
  • 한편 for 반복문이나 if 조건문 내부의 로직은 일부 변경되어도 출력값은 동일합니다.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
public static void main(String[] args) {
    
    // 버블 정렬 테스트를 위한 배열을 생성하였습니다.
    int[] arr = new int[10];
    
    for(int i = 0; i < arr.length; i++) {
        arr[i] = (int)(Math.random() * 20) + 1;
    }
    
    System.out.println("정렬 전 arr 배열 = " + Arrays.toString(arr));
    
    
    // 오름차순 정렬을 위한 변수를 생성하였습니다.
    int smallValue = 0;
    // 내림차순 정렬을 위한 변수를 생성하였습니다.
    int bigValue = 0;
    
    
    //* 버블 정렬 1 *//
    // 배열의 전체 인덱스부터 인덱스를 차감시키며 범위를 축소시켰습니다.
    // if 조건문 로직 때문에 i의 초기값이 배열 길이라면 j는 i - 1 미만이어야 됩니다.
    // if 조건문 로직 때문에 i의 초기값이 배열 길이 - 1이라면 j는 i 미만이어야 됩니다.
    // 한편 j는 i보다 작기 때문에 i는 0보다 커야 됩니다.
    // 'i > 0'으로 설정하더라도 arr[j]의 최소 인덱스는 arr[0]이 됩니다.
    for(int i = (arr.length - 1); i > 0; i--) {
        // 'j < i'에서 i+1이 아닌 이유는 아래 if 조건문에서 최종 인덱스가 증가되기 때문입니다.
        // 이때 i+1이 아닌 i여야 arr.length와 동일한 값을 갖게 됩니다.
        for(int j = 0; j < i; j++) {
            // 반복문을 테스트하기 위해 별짓기 테스트를 하였습니다.
            // System.out.print("*");
            
            if(arr[j] > arr[j+1]) {
                bigValue = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = bigValue;
            }
        
        }
        // 반복문을 테스트하기 위해 별짓기 테스트를 하였습니다.
        // System.out.println();
    }
    
    System.out.println("정렬 후 arr 배열 = " + Arrays.toString(arr));
    
    
    //* 버블 정렬 2 *//
    for(int i = (arr.length); i > 0; i--) {
        for(int j = 0; j < i - 1; j++) {
            if(arr[j] > arr[j+1]) {
                bigValue = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = bigValue;
            }
        }
    }
    
    System.out.println("정렬 후 arr 배열 = " + Arrays.toString(arr));
    
    
    //* 버블 정렬 3 *//
    for(int i = (arr.length); i > 0; i--) {
        for(int j = 0; j < i - 1; j++) {
            if(arr[j] > arr[j+1]) {
                bigValue = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = bigValue;
            }
        }
    }
    
    System.out.println("정렬 후 arr 배열 = " + Arrays.toString(arr));
    
    
    //* 버블 정렬 4 *//
    for(int i = (arr.length); i > 0; i--) {
        for(int j = 0; j < i - 1; j++) {
            if(arr[j] < arr[j+1]) {
                smallValue = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = smallValue;
            }
        }
    }
    
    System.out.println("정렬 후 arr 배열 = " + Arrays.toString(arr));

}


🔔 2차배열

📌 2차배열 개념

  • 2차배열은 배열 구조가 2차원 형태로 구성된 것을 의미합니다.
  • 2차배열은 x축과 y축으로 이루어진 좌표계를 표현할 수 있습니다.
  • 2차배열은 행 요소와 열 요소로 구성된 행렬을 표현할 수 있습니다.
  • 참고로 행렬은 무조건 2차배열로 표현되지만 2차배열은 행렬이 아닐 수 있습니다.
  • 행렬은 가로 및 세로 요소의 개수가 동일하지만 배열은 그렇지 않기 때문입니다.

📌 고차원 배열

  • 배열이란 하나의 축으로 구성된 메모리 공간에 값이 할당된 것을 의미합니다.
  • 2차배열은 배열 인덱스의 각 메모리 공간에 값이 아닌 배열이 할당된 것을 의미합니다.
  • 고차원 배열의 예시로는 x축 요소, y축 요소, 방향 요소, 시간 요소 등이 있습니다.
  • 참고로 한 배열의 각 인덱스에 할당된 내부 배열의 인덱스 개수는 동일하지 않을 수 있습니다.

📌 2차배열 구현

  • 2차배열은 ‘여러 학생의 시험 점수를 관리하는 프로그램’으로 구현시킬 수 있습니다.
  • 구현된 프로그램의 상세 코드는 문장에 링크된 글에 잘 작성되어 있습니다.




이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
<>