Java

[Java] 배열, 버블정렬

Rosie_dev 2021. 1. 19. 11:04

 

배열의 응용예제 - 정수에 천단위마다 콤마(,) 넣기


1.

자바에서 DecimalFormat 을 이용해 천단위마다 콤마를 넣는 표기를 할 수 있다. DecimalFormat 역시 객체를 생성해서 #,### 표기를 작성해주면 된다. 

DecimalFormat df = new DecimalFormat("#,###");

String smoney = df.format(money);

System.out.println(smoney);

 

2.

두 번째 방법은 배열을 이용하는 것이다.  위 방법보다는 복잡하지만 두 배열을 활용해 , 를 표기할 수 있다. 먼저 입력받는 배열과 , 를 입력한 배열을 만든다. 그리고 천단위 표기의 규칙을 생각해보면 뒤에서 부터 4자리 수마다 , 가 표기됨을 알 수 있다. 즉, 반복문을 활용해 기존 입력받은 배열을 뒤에서 부터 , 와 함께 대입해준다.

 

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
package my.day09.b.array;
 
import java.text.DecimalFormat;
import java.util.Scanner;
 
public class MoneyCommaMain3 {
 
    public static void main(String[] args) {
        
        System.out.print("▷ 금액을 입력하세요(정수로만) => ");
        Scanner sc = new Scanner(System.in);
        long money = Long.parseLong(sc.nextLine());
        
        DecimalFormat df = new DecimalFormat("#,###");
        String smoney = df.format(money);
        System.out.println(smoney);
        
        System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        
        System.out.print("▶ 금액을 입력하세요(정수로만) => ");
        String inputStr = sc.nextLine();
        int len = inputStr.length();   // 입력받은 문자열의 길이
        int commaCount = len/3;
        commaCount = (len%3==0)?commaCount-1:commaCount;
        
        /*
             if(len%3==0) commaCount-=1;        // 같은 표현
             
             -------------------      -----------------------
             |1|2|3|4|5|6|7|8|9|  →   |1|2|3|,|4|5|6|,|7|8|9|
             -------------------      -----------------------
         */
        
        char[] moneyArr = inputStr.toCharArray();
        char[] outputArr = new char[len+commaCount];
        
        //뒤에서 부터 글자를 채우기, 뒤에서 4자리 수마다 ,
        int cnt = 0// 반복횟수
        
        for (int i=outputArr.length-1,j=moneyArr.length-1; i>=0; i--,j--) {
            cnt++;
            if(cnt%4!=0) {
                outputArr[i]=moneyArr[j];
            } else {
                outputArr[i]=',';
                j++;
            }
        }
        
        System.out.println(outputArr);
        
        sc.close();
    }
 
}
 
cs

 

버블정렬


버블정렬은 배열을 수평 나열했다고 가정했을 때, 왼쪽 끝에서 옆 데이터 값과 비교하여 오름 또는 내림차순으로 재배치하는 것을 말한다.  인접 값을 비교를 통해 마지막 값이 제일 크거나 작은 수가 될 때까지 반복한다. 자바에서는 간단히 Arrays.sort(배열명) 으로 오름차순 정렬이 가능하다.

하지만, 아래와 같이 다중 for문으로 버블정렬의 효과를 나타낼 수도 있다.

 

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package my.day10.c.array;
 
import java.util.Arrays;
 
public class BubbleSortMain {
 
 /*
   == 입사문제 ==
   >> 버블 정렬(Bubble Sort)은 
    정렬 대상 리스트(배열)의 항목을 수평방향으로 나열했다고 가정했을 때, 
    왼쪽 끝에서부터 시작해서 인접하는 두 항목의 값을 비교하여 
    올바른 순서(오름차순 또는 내림차순)로 되어있지 않으면 서로 위치를 교환하는 정렬방법이다.
    
    이렇게 인접하는 항목의 값을 비교해서 위치를 교환하는 과정을 
    리스트(배열)의 마지막 항목까지 반복해서 제일 큰(또는 작은) 값이 끝에 오도록 한다.
    
    각 회전(Pass)과정이 끝날때마다 정렬은 뒤에서부터 하나씩 완료된다. 
 */   
   
   public static void main(String[] args) {
   
      int[] numArr = {9,7,3,5,1}; 
    /*
        numArr[0] => 9
        numArr[1] => 7
        numArr[2] => 3
        numArr[3] => 5
        numArr[1] => 1  
    */
      
      System.out.println("=== 정렬하기 전 ===");
      for(int i=0; i<numArr.length; i++) {
         String str = (i<numArr.length-1)?",":"\n";
         System.out.print(numArr[i]+str);
      }// end of for---------------------
      /*
         === 정렬하기 전 ===
          9,7,3,5,1 
          
                    --------------------
                  데이터값  => | 7 | 3 | 9 | 5 | 1 | 
                    --------------------   
          index  =>   0   1   2   3   4          
       */
      
      // === 오름차순 정렬하기 === //
      for(int i=0; i<numArr.length-1; i++) { 
         // 비교할 대상을 추출할 개수 ==>  9  7  3  5  은 몇개? 4개
      // (int i=0; i<4; i++)   
         for(int j=0; j<numArr.length-1-i; j++) { // i=0;  ==> 조건식이 j<4; 되어야만 4번 비교함.  
                                                 // i=1;  ==> 조건식이 j<3; 되어야만 3번 비교함.
                                                 // i=2;  ==> 조건식이 j<2; 되어야만 2번 비교함.
                                                 // i=3;  ==> 조건식이 j<1; 되어야만 1번 비교함.
         
            if(numArr[j] > numArr[j+1]) {
            // numArr[0] > numArr[1]
            //    9             7
               
            /*   
               int temp = numArr[0];  // 9;
               numArr[0] = numArr[1]; // numArr[0] <= 7; 
               numArr[1] = temp;      // numArr[1] <= 9
               
               int temp = numArr[1];  // 9;
               numArr[1] = numArr[2]; // numArr[1] <= 3; 
               numArr[2] = temp;      // numArr[2] <= 9
               
               int temp = numArr[2];  // 9;
               numArr[2] = numArr[3]; // numArr[2] <= 5; 
               numArr[3] = temp;      // numArr[3] <= 9
            */   
               
               int temp = numArr[j];
               numArr[j] = numArr[j+1];
               numArr[j+1= temp; 
            }   
         }// end of for----------------------
         
      }// end of for---------------------------
      
      System.out.println("\n=== 오름차순 정렬한 후 ===");
      for(int i=0; i<numArr.length; i++) {
         String str = (i<numArr.length-1)?",":"\n";
         System.out.print(numArr[i]+str);
      }// end of for---------------------
      
      System.out.println("\n~~~~~~~~~~~~~~~~~~~\n");
      
      int[] numArr2 = {9,7,3,5,1}; 
      
      System.out.println("=== 정렬하기 전 ===");
      for(int i=0; i<numArr2.length; i++) {
         String str = (i<numArr2.length-1)?",":"\n";
         System.out.print(numArr2[i]+str);
      }// end of for---------------------
      
      // === 내림차순 정렬하기 === //
      for(int i=0; i<numArr2.length-1; i++) { 
         
         for(int j=0; j<numArr2.length-1-i; j++) { 
         
            if(numArr2[j] < numArr2[j+1]) {
               int temp = numArr2[j];
               numArr2[j] = numArr2[j+1];
               numArr2[j+1= temp; 
            }   
         }// end of for----------------------
         
      }// end of for---------------------------
      
      System.out.println("\n=== 내림차순 정렬한 후 ===");
      for(int i=0; i<numArr2.length; i++) {
         String str = (i<numArr2.length-1)?",":"\n";
         System.out.print(numArr2[i]+str);
      }// end of for---------------------
      
      
      System.out.println("\n~~~~~~~~~~~~~~~~~~~\n");
      
      int[] numArr3 = {9,7,3,5,1}; 
      
      System.out.println("=== 정렬하기 전 ===");
      for(int i=0; i<numArr2.length; i++) {
         String str = (i<numArr2.length-1)?",":"\n";
         System.out.print(numArr2[i]+str);
      }// end of for---------------------
      
      Arrays.sort(numArr3);  // 오름차순 정렬
      
      System.out.println("\n=== Arrays.sort()를 사용하여 정렬한 후 ===");
      for(int i=0; i<numArr3.length; i++) {
         String str = (i<numArr3.length-1)?",":"\n";
         System.out.print(numArr3[i]+str);
      }// end of for---------------------
 
   }// end of main()--------------------------------
 
}
 
cs

'Java' 카테고리의 다른 글

[Java] 컬렉션(Collection)  (0) 2021.01.30
[Java] 람다식(Lambda)  (0) 2021.01.28
[Java] Random 응용, 배열  (0) 2021.01.18
[Java] While , do-While, Math.random() 메서드, Random() 클래스  (0) 2021.01.16
[Java] For 문 응용, 다중 For문  (0) 2021.01.15
댓글