Java

[Java] 배열 (1~3차원 배열 / 임시변수 - 변수값 교환 / 버블 소트)

소댓 2023. 3. 9. 18:22

[ 배열 ] 

 

* 1~3차원 배열

- 1차원 배열
int[] m1 = new int[3];

- 2차원 배열
int[][] m2 = new int[3][2];

- 3차원 배열
int[][][] m3 = new int[4][3][2];     --> 행, 열, 면

 

 

* Math.random()

-  0 <= Math.random < 1
- 오직, double 타입의 값

  > 따라서 변환이 필요

 

 

* 임시 변수

- a 변수의 값과 b 변수의 값을 교환 >  임시변수 등장
  int temp = 0;
  temp = b;
  b = a;             // a 변수의 값을 b 변수에 대입해 
  a = temp;       // b 변수의 값을 a 변수에 대입해

 

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
package day06;
 
public class ArrayEx07 {
 
    public static void main(String[] args) {
 
        // 1차원 배열
        int[] m1 = new int[3];
        
        // 2차원 배열
        int[][] m2 = new int[3][2];
        
        // 3차원 배열
        int[][][] m3 = new int[4][3][2]; // 행, 열, 면
 
        // 0 <= Math.random < 1
        // double 타입의 값
        System.out.println(Math.random());
        
        int a = 10;
        int b = 20;
        
        System.out.println("a : " + a);
        System.out.println("b : " + b);
        System.out.println("-----------------------------");
        
        // a 변수의 값과 b 변수의 값을 교환
        // 임시변수 등장
        int temp = 0;
        temp = b;
        b = a; // a 변수의 값을 b 변수에 대입해 
        a = temp; // b 변수의 값을 a 변수에 대입해
        System.out.println("a : " + a+ ", b : " + b);
    }
 
}
cs

 

 


 

* 버블 소트

- 오른쪽 수와 크기를 비교해 가면서 정렬

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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package day06;
 
public class ArrayEx09 {
    public static void main(String[] args) {
 
 
        // 버블 소트
//        int[] a = {3, 0, 1, 8, 7, 2, 5, 4, 6, 9};
        int[] a = {3861021};
    
        // 배열 a의 가로로 출력
        for(int i = 0; i <a.length; i++) {
            System.out.print(a[i]+"\t");
        }
        System.out.println();
        
 
        for(int j=0; j< a.length-1; j++) {
        for(int i = 0; i < a.length-1-j; i++) {
            if(a[i] > a[i+1]) {
                // 값을 교환
                int temp = 0;
                temp = a[i];
                a[i] = a[i+1];
                a[i+1= temp;
            }
        }
        for(int m = 0; m <a.length; m++) {
            System.out.print(a[m]+"\t");
        }
        System.out.println();
        
        }    
        System.out.println("--------------------");
        
//            
//        for(int i = 0; i<8; i++) {
//            if(a[i] > a[i+1]) {
//                // 값을 교환
//                int temp = 0;
//                temp = a[i];
//                a[i] = a[i+1];
//                a[i+1] = temp;
//            }
//            
//        }
//            
//        System.out.println("2회차 비교");
//        for(int m = 0; m <a.length; m++) {
//            System.out.print(a[m]+"\t");
//        }
//            System.out.println();
//            
//        for(int i = 0; i<7; i++) {
//            if(a[i] > a[i+1]) {
//                // 값을 교환
//                int temp = 0;
//                temp = a[i];
//                a[i] = a[i+1];
//                a[i+1] = temp;
//            }
//            
//        }
//        System.out.println("3회차 비교");
//        for(int m = 0; m <a.length; m++) {
//            System.out.print(a[m]+"\t");
//        }
//            System.out.println();
//        
//            
//        for(int i = 0; i<6; i++) {
//            if(a[i] > a[i+1]) {
//                // 값을 교환
//                int temp = 0;
//                temp = a[i];
//                a[i] = a[i+1];
//                a[i+1] = temp;
//            }
//            
//        }
//        System.out.println("4회차 비교");
//        for(int m = 0; m <a.length; m++) {
//            System.out.print(a[m]+"\t");
//        }
//            System.out.println();
//            
//            
//        for(int i = 0; i<5; i++) {
//            if(a[i] > a[i+1]) {
//                // 값을 교환
//                int temp = 0;
//                temp = a[i];
//                a[i] = a[i+1];
//                a[i+1] = temp;
//            }
//                
//        }
//        System.out.println("5회차 비교");
//        for(int m = 0; m <a.length; m++) {
//            System.out.print(a[m]+"\t");
//        }
//            System.out.println();
//            
//            
//        for(int i = 0; i<4; i++) {
//            if(a[i] > a[i+1]) {
//                // 값을 교환
//                int temp = 0;
//                temp = a[i];
//                a[i] = a[i+1];
//                a[i+1] = temp;
//            }
//                
//        }
//        System.out.println("6회차 비교");
//        for(int m = 0; m <a.length; m++) {
//            System.out.print(a[m]+"\t");
//        }
//            System.out.println();
//            
//            
//        for(int i = 0; i<3; i++) {
//            if(a[i] > a[i+1]) {
//                // 값을 교환
//                int temp = 0;
//                temp = a[i];
//                a[i] = a[i+1];
//                a[i+1] = temp;
//            }
//                    
//        }
//        System.out.println("7회차 비교");
//        for(int m = 0; m <a.length; m++) {
//            System.out.print(a[m]+"\t");
//        }
//            System.out.println();            
//            
//            
//        for(int i = 0; i<2; i++) {
//            if(a[i] > a[i+1]) {
//                // 값을 교환
//                int temp = 0;
//                temp = a[i];
//                a[i] = a[i+1];
//                a[i+1] = temp;
//            }
//                        
//        }
//        System.out.println("8회차 비교");
//        for(int m = 0; m <a.length; m++) {
//            System.out.print(a[m]+"\t");
//        }
//            System.out.println();
//            
//            
//        if(a[1] > a[2]) {
//            // 값을 교환
//            int temp = 0;
//            temp = a[1];
//            a[1] = a[2];
//            a[2] = temp;
//        }
//        
    }
    }
cs

 

 

 


 

[ 응용 ]

 

* 길이가 100개인 int 타입 배열에 정수 1~100의 값을 대입

package day06;
// 길이가 100개인 int 타입 배열에 정수 1~100의 값을 대입
public class Day06Q004 {
	
	public static void main(String[] args) {
		
		// 100칸 짜리 배열 m 생성
		int[] m = new int [100];
		
		// 정수 1부터 100까지 대입
		for(int i = 0; i<m.length; i++) {
			m[i] = i+1;
			System.out.println("m["+i+"] : " + m[i]);
		}
		
	}
}
 

 

*  index의 값이 3의 배수이면 3333 값을 5의 배수는 5555

  3과 5의 공배수는 3535 를 대입하고 올바르게 입력되었는지 출력

package day06;
// index의 값이 3의 배수이면 3333 값을 5의 배수는 5555
// 3과 5의 공배수는 3535를 대입
public class Day06Q005 {

	public static void main(String[] args) {

		int[] m = new int [100];
		
		for(int i = 0; i<m.length; i++) {
			m[i] = i+1;
			if(i%3==0 && i%5==0) {
				System.out.println("m["+i+"] : "+"3535");
			} else if (i%5 == 0) {
				System.out.println("m["+i+"] : "+"5555");
			} else if (i%3==0 ) {
				System.out.println("m["+i+"] : "+"3333");
			} else {
			System.out.println("m["+i+"] : " + m[i]);
			}
		}
		

	}

}

 

 

* 정수 10개를 입력받아 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력해보자.

package day06;
// 정수 10개를 입력받아 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력
import java.util.Scanner;
public class Day06Q006 {

	public static void main(String[] args) {
		
		// 배열 선언하기
		int m [] = new int [10]; 
		
		// 사용자로부터 값 입력 받기
		System.out.println("입력 : ");
		Scanner sc = new Scanner(System.in);
		
		// 사용자가 입력한 값을 배열에 담기
		for(int i =0; i<m.length; i++) {
			m[i] = sc.nextInt();
			// 3의 배수만 출력
			if(m[i]%3 == 0) {
			System.out.println("m["+m[i]+"] : "+m[i]);
			}
		}
	}
}
 

 

7. arr = { 10, 50, 60, 30, 12 }

​arr 배열 중에서 값이 50인 곳의 인덱스를 출력해보자

 

package day06;
// arr 배열 중에서 값이 50인 곳의 인덱스를 출력
public class Day06Q007 {
	public static void main(String[] args) {
		
		// 배열에 변수 대입
		int[] arr = {10, 50, 60, 30, 12};
		
		// 값이 50인 인덱스 출력
		for(int i=0; i<arr.length;i++) {
		if(arr[i] == 50) {
		System.out.println(i);
		}
		}
	}
}
 

8. 다음 배열에서 가로의 합과 세로의 합을 구하세요

1 4 5 10

3 2 6 11

4 1 2 7

8 7 13 28

package day06quiz;
// 쌤 풀이
public class Day06Q08 {

	public static void main(String[] args) {

		
		int[][] m = {
				{1, 4, 5, 10, 0},
				{3, 2, 6, 11, 0}, 
				{4, 1, 2, 7, 0}, 
				{8, 7, 13, 28, 0},
				{0, 0, 0, 0, 0}
		};
		
		for(int i = 0; i<m.length; i++) {
			for(int j = 0; j<m[i].length;j++) {
//				System.out.println("m["+i+"]["+j+"] : "+m[i][j]);
				System.out.print(m[i][j] + "\t");
			}
				System.out.println();
		}
		System.out.println("----------------------------------------");
		
		// 행의 합계
//		m[0][4] = m[0][0] + m[0][1] + m[0][2] + m[0][3];
//		m[1][4] = m[1][0] + m[1][1] + m[1][2] + m[1][3];
//		m[2][4] = m[2][0] + m[2][1] + m[2][2] + m[2][3];
//		m[3][4] = m[3][0] + m[3][1] + m[3][2] + m[3][3];

		for(int i = 0; i<4; i++) {
			m[i][4] = m[i][0] + m[i][1] + m[i][2] + m[i][3];
		}
		
		// 열의 합계
//		m[4][0] = m[0][0] + m[1][0] + m[2][0] + m[3][0];
//		m[4][1] = m[0][1] + m[1][1] + m[2][1] + m[3][1];
//		m[4][2] = m[0][2] + m[1][2] + m[2][2] + m[3][2];
//		m[4][3] = m[0][3] + m[1][3] + m[2][3] + m[3][3];
//		m[4][4] = m[0][4] + m[1][4] + m[2][4] + m[3][4];
		
		for(int i = 0; i<5; i++) {
			m[4][i] = m[0][i] + m[1][i] + m[2][i] + m[3][i];
		}
		
		for(int i = 0; i<m.length; i++) {
			for(int j = 0; j<m[i].length;j++) {
//				System.out.println("m["+i+"]["+j+"] : "+m[i][j]);
				System.out.print(m[i][j] + "\t");
			}
				System.out.println();
		}
		

	}

}
 

9. 야구 게임 (BaseBall)

3자리의 숫자 랜덤 생성 : 397

자리와 숫자가 모두 동일 하면 strike

자리는 다르지만 다른 자리에 숫자가 존재하면 볼

입력:307

출력 : 2S

입력:379

출력: 1S2B

입력:397

출력: 정답 축하합니다. 3회만에 성공하셨습니다.

[알고리즘]

1. 컴퓨터가 세자리숫자를 생성한다.

2. 사용자로부터 3자리숫자를 입력받는다.

3. 판별한다.

(자리와 숫자가 일치하면 :strke

자리는다르지만 숫자가일치하면 : ball)

4. 출력한다.

5. 3strike이면 종료한다.

6. 아니면 2번으로 돌아가서 반복한다.

 

package day06;
// 야구 게임
import java.util.Scanner;
public class Day06Q009 {
	public static void main(String[] args) {
		
		// 컴퓨터 랜덤 배열과 유저 배열 선언
		int com [] = new int [3];
		int user [] = new int [3];
		
		// 배열의 길이만큼 랜덤 돌리기
		for(int i =0; i< com.length; i++) {
			com[i] = (int)(Math.random()*9  + 1); // 배열에 랜덤 숫자 할당
			for(int j = 0; j < i; j++) {
				// 중복 확인
				if(com[j] == com[i]) {
					// 중복이 있으면 반복문 빠져나가기
					i--;
						break;
					}
				}
			}
		
		for(int i=0; i<com.length; i++) {
			System.out.print(com[i] + " ");
		}
		System.out.println();
		
		// 사용자의 값을 입력 받아 user 배열에 입력
		Scanner sc = new Scanner(System.in);
		for(int m = 0; m<100; m++) {
		for(int i = 0; i<user.length; i++) {
			System.out.println("숫자를 입력하세요 : ");
			user[i] = sc.nextInt();
		 for(int j = 0; j < i; j++) {
				// 중복 확인
				if(user[j] == user[i]) {
					// 중복이 있으면 반복문 빠져나가기
					System.out.println("중복입니다. 다시 입력하세요 : ");
					i--;
						break;	
						}
		 		}
		 }
		
		int strike = 0;
		int ball = 0;
		
		for(int i=0; i<com.length; i++) {
			for(int j=0; j<user.length; j++) {
				// 인덱스와 숫자가 모두 같으면 스트라이크
				if(com[i] == user[j] && i == j ) {
					strike ++;
				// 숫자는 같지만 인덱스는 다르면 볼
				} else if (com[i] != user[j] && i == j ) {
					ball ++;
				}
			}
		}
		
		
		System.out.println(strike + "S" + ball + "B");
		if(strike == 3) {
			System.out.println("정답 축하합니다." + (m+1) + " 회 만에 성공하셨습니다.");
			break;
		}
		}
	}
}