일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 조건문과 반복문
- 이노베이션 캠프
- 백준
- ArrayList 개념
- 이노캠
- Java
- dfs
- 이노베이션캠프
- JAVA 기초
- 이것이 자바다 연습문제
- 트리 지름 구하기
- Comparable과 Comparable
- 자료구조
- 3장 확인문제
- BFS
- 채팅GPT
- ChatGPT
- 챗GPT 명령어 작성팁
- 자바 언어 기초
- 스프링 입문강의
- 이노베이션캠프 동북
- 객체지향
- 자바
- 이것이 자바다
- 자바의 정석 6장
- 이것이 자바다 확인문제
- 이것이 자바다 13장
- 인프런
- 웹개발 기본지식
- Til
- Today
- Total
기록공간
[TIL] 이노베이션 캠프 in 동북 Part 04. 배열 본문
Part04. 배열
배열의 선언과 생성
배열의 길이와 초기화
배열 연습하기
배열의 출력
총합과 평균
최대과 최소값
랜덤으로 숫자섞기
String 배열
2차원 배열
Ch05.연습문제
Part 04. 배열
배열이란?
-> 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 의미한다.
배열의 선언과 생성
배열의 선언방법
- 타입[] 변수이름; (Ex: int[] age;, String[] name;)
- 타입 변수 이름[]; (Ex int age[]; String name[];)
배열의 생성 : 실제 저장공간을 생성한다.
- 타입[] 변수이름 = new 타입[길이];
- int[] age; : int 타입의 배열을 다루기 위한 참조 변수 age를 선언
- age = new int[5]; int 타입의 값 5개를 저장할 수 있는 배열을 생성 (new 연산자)
- 참조변수와 배열이 연결되어있고, 참조변수를 이용해 배열을 다룰 수 있다.
배열의 인덱스 : 각 요소(저장공간)에 자동으로 붙는 일련 번호
- 인덱스(index)의 범위는 0부터 '배열길이 -1'까지 이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Arrays1_1 {
public static void main(String[] args) {
// int[] age; // 참조변수 베열 age 생성
// age = new int[5]; // 배열의 생성
int[] age = new int[5]; // 선언과 생성 동시에
age[3] = 28;
System.out.println("age[3] = " + age[3]);
int beatitudoAge = age[3];
System.out.println("beatitudoAge = " + beatitudoAge);
System.out.println("age 배열의 전체값 확인");
System.out.println("age[0] = " + age[0]);
System.out.println("age[1] = " + age[1]);
System.out.println("age[2] = " + age[2]);
System.out.println("age[3] = " + age[3]);
System.out.println("age[4] = " + age[4]);
}
}
|
cs |
배열의 길이와 초기화
배열의 길이
- 배열이름.length;
- int[] arr = new int[5]; : 배열의 길이가 5인 int 배열
- int len = arr.length; : arr.length의 값은 5이고 len 변수에 저장된다.
배열은 한번 생성되면, 컴파일 이후 실행되는 동안 그 길이(크기)를 바꿀 수 없다.
배열의 한계점
배열의 크기를 바꿀 수 없는 이유?
- new int[5];로 배열을 생성하면, int 가 4byte이기 때문에, 총 20byte를 저장하기 위한 연속적인 메모리 공간을 찾는다.
- 연속적인 공간을 찾아, 주소를 배정한다.
- 배정이 끝난 후 크기를 5가 아닌 10으로 늘려야 한다고 가정 했을때, 배정받은 주소 뒤에 20byte를 추가적으로 배정해야 하는데, 뒤에 연속적인 메모리 공간이 존재한다는 보장이 없다.
- 따라서 크기를 바꿀 수 없다.
배열의 크기가 부족할 때의 방법
- 필요한 만큼의 크기의 배열을 새롭게 만든다.
- 새로 만든 배열에 기존 배열의 값을 복사해서 저장한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Arrays2_1 {
public static void main(String[] args) {
int[] arr = new int[10];
System.out.println("배열의 길이 = " + arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
System.out.println();
// index 범위를 벗어나는 경우 Error 발생
for (int i = 0; i < arr.length + 1; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
}
}
|
cs |

배열의 초기화 : 배열의 각 요소에 처음으로 값을 저장하는 것을 의미

- 배열은 기본적으로 저장 하려는 값의 타입의 기본값으로 자동 초기화 해준다.
초기화 방법
1. int[] num = new int[] { 1,2,3,4,5,6,7,8,9};
2. int[] num = {1,2,3,4,5,6,7,8,9}; ( new int[] 생략 가능 )
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
|
class Arrays2_2 {
public static void main(String[] args) {
int[] num1 = new int[]{1,2,3,4,5,6,7,8,9};
int[] num2 = {1,2,3,4,5,6,7,8,9};
for (int i = 0; i < num1.length; i++) {
System.out.println("num1[" +i + "] = " + num1[i]);
}
System.out.println();
for (int i = 0; i < num2.length; i++) {
System.out.println("num2[" +i + "] = " + num2[i]);
}
System.out.println();
// 주의 할 점!
int[] num3;
// num3 = {1,2,3,4,5,6,7,8,9}; // Error 발생합니다.
// 위처럼 나눠서 표현을 해야 한다면 아래처럼 초기화 하셔야 합니다.
int[] num4;
num4 = new int[]{1,2,3,4,5,6,7,8,9};
for (int i = 0; i < num4.length; i++) {
System.out.println("num4[" +i + "] = " + num4[i]);
}
}
}
|
cs |

배열 연습하기
배열의 출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class Arrays3_1 {
public static void main(String[] args) {
int[] arr = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};
// 배열을 가리키는 참조 변수 arr 을 출력
System.out.println("arr = " + arr);
// 메모리 주소와 비슷한 문자열이 출력 -> 실제 주소는 아닙니다.
// [I@7a81197d -> [(배열을 뜻함), I(int 타입을 뜻함), @(위치를 뜻함)
// 예외 확인 하기 - char[]
char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr); // abcd 가 출력되는데 이는 println 메서드의 기능 때문!
// 배열의 요소 하나씩 출력하기
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
// Arrays.toString(배열) : 배열의 모든 요소를 문자열로 만들어서 반환한다.
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
}
}
|
cs |
총합과 평균
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Arrays3_2 {
public static void main(String[] args) {
int sum = 0; // 총합을 저장
float avg = 0f; // 평균을 저장
int[] score = {100, 40, 33, 50, 77, 29};
for (int i = 0; i < score.length; i++) {
System.out.println("score[" + i + "] = " + score[i]);
sum += score[i];
}
avg = sum / (float) (score.length); // 계산결과를 float 타입으로 얻기 위해 형변환
System.out.println("총합 = " + sum);
System.out.println("평균 = " + avg);
}
}
|
cs |

최대값과 최소값
배열의 요소 중에서 가장 큰 값과 가장 작은 값을 찾기.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Arrays3_3 {
public static void main(String[] args) {
int[] score = {65, 97, 88, 43, 33, 91, 28};
int max = score[0]; // 최대값을 배열의 첫 번째 값으로 초기화 한다.
int min = score[0]; // 최소값을 배열의 첫 번째 값으로 초기화 한다.
for (int i = 0; i < score.length; i++) {
if (score[i] > max) {
max = score[i];
} else if(score[i] < min) {
min = score[i];
}
}
System.out.println("최대값 = " + max);
System.out.println("최소값 = " + min);
}
}
|
cs |

랜덤으로 숫자 섞기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Arrays3_4 {
public static void main(String[] args) {
int[] numArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println("원본 = " + Arrays.toString(numArr));
for (int i = 0; i < numArr.length; i++) {
int num = (int) (Math.random() * 10); // 0 ~ 9 의 랜덤 수
int tmp = numArr[0]; // 배열의 첫 번째 수로 계속 초기화 된다.
// 랜덤한 위치의 값과 배열의 첫 번째 수가 서로 바뀐다.
numArr[0] = numArr[num];
numArr[num] = tmp;
System.out.println(i + 1 + " 번째 변경 : " + Arrays.toString(numArr));
}
System.out.println("결과 = " + Arrays.toString(numArr));
}
}
|
cs |
String 배열
String 클래스 ( char[] 와 메서드(기능) 을 결합한 것 )
- String str = "행복";
- String str = new String("행복");
- String 클래스는 내용을 변경할 수 없다.
- String name = "choi";
- String firstName = "wb";
- name = name + firstName;
String 클래스의 주요 메서드
메서드 | 설명 |
char charAt(int index) | 문자열에서 해당 위치 (index)에 있는 문자를 반환 |
int length() | 문자열의 길이를 반환 |
String substring(int form,int to) | 문자열에서 해당 범위(from~to)의 문자열을 반환한다. (to는 포함안됨) |
char[] toCharArray() | 문자열의 문자배열(char[])로 변환해서 반환한다. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Arrays4_1 {
public static void main(String[] args) {
String str = "ABCDEFG";
char ch = str.charAt(3);
System.out.println("ch = " + ch); // ch = D
String str2 = str.substring(1, 4);
System.out.println("str2 = " + str2); // str2 = BCD
String str3 = str.substring(1);
System.out.println("str3 = " + str3); // str3 = BCDEFG
String str4 = str.substring(1, str.length());
System.out.println("str4 = " + str4); // str4 = BCDEFG
char[] chArr = str.toCharArray();
System.out.println("Arrays.toString(chArr) = " + Arrays.toString(chArr));
}
}
|
cs |

String 배열의 선언과 생성
String[] name = new Stirng[3];
- 3개의 문자열을 담을 수 있는 배열을 생성한다
- 참조형 이기 때문에 기본값 null로 초기화된다.
1
2
3
4
5
6
7
8
9
|
class Arrays4_2 {
public static void main(String[] args) {
String[] strArr = {"축구", "야구", "골프", "테니스"};
System.out.println("Arrays.toString(strArr) = " + Arrays.toString(strArr));
String[] strArr2 = new String[4];
System.out.println("Arrays.toString(strArr2) = " + Arrays.toString(strArr2));
}
}
|
cs |

2차원 배열
- 테이블 형태의 데이터를 저장하기 위한 배열이다.

2차원 배열의 생성과 선언
- int[][] score= new int[4][3];
- 4행 3열의 2차원 배열 score가 생성된다.

2차원 배열의 초기화
- int[][] score = new int[][] {{},{},{},{}};
- int[][] score = {{},{},{},{}}
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
|
class Arrays5_1 {
public static void main(String[] args) {
int[][] score = {
{88, 35, 100},
{84, 60, 55},
{100, 99, 72},
{33, 54, 77}
};
//길이 확인하기
System.out.println("score.length = " + score.length);
System.out.println("score[0].length = " + score[0].length);
System.out.println();
// 출력 예 1 : Arrays.toString()
System.out.println("Arrays.toString()");
System.out.println("Arrays.toString(score[0]) = " + Arrays.toString(score[0]));
System.out.println("Arrays.toString(score[1]) = " + Arrays.toString(score[1]));
System.out.println("Arrays.toString(score[2]) = " + Arrays.toString(score[2]));
System.out.println("Arrays.toString(score[3]) = " + Arrays.toString(score[3]));
System.out.println();
// 출력 예 2 : for
System.out.println("for");
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
System.out.println("score[" + i + "][" + j + "] = " + score[i][j]);
}
System.out.println();
}
System.out.println();
// 출력 예 3 : 향상된 for
System.out.println("향상된 for");
for (int[] ints : score) {
for (int it : ints) {
System.out.println("anInt = " + it);
}
System.out.println();
}
}
}
|
cs |

Arrays
문자열 비교와 출력 ( equals(), toString() )
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
|
class Arrays6_1 {
public static void main(String[] args) {
int[] num = {0, 1, 2};
int[][] score = {
{88, 35, 100},
{84, 60, 55},
{100, 99, 72},
{33, 54, 77}
};
System.out.println("Arrays.toString(num) = " + Arrays.toString(num));
System.out.println("Arrays.deepToString(score) = " + Arrays.deepToString(score));
System.out.println();
String[][] strArr1 = {
{"AAA","BBB","CCC"},
{"aaa","bbb","ccc"},
};
String[][] strArr2 = {
{"AAA","BBB","CCC"},
{"aaa","bbb","ccc"},
};
// 1 차원 비교에는 equals
System.out.println("Arrays.equals(strArr1[0], strArr2[0]) = " + Arrays.equals(strArr1[0], strArr2[0])); // true
System.out.println("Arrays.equals(strArr1[1], strArr2[0]) = " + Arrays.equals(strArr1[1], strArr2[0])); // false
System.out.println("Arrays.equals(strArr1, strArr2) = " + Arrays.equals(strArr1, strArr2)); // false
System.out.println();
// 다차원 비교에는 deepEquals
System.out.println("Arrays.deepEquals(strArr1, strArr2) = " + Arrays.deepEquals(strArr1, strArr2)); // true
}
}
|
cs |
배열 복사
- copyOf(),copyOfRange()
copyOf(배열명,index) : 배열명의 요소들을 0부터 index 까지 복사한다. (만약 배열의 길이보다 index가 더 크면, 배열의 길이 다음에는 초기화값이 들어간다);
copyOfRange(배열명,초기 index, 마지막 index ) : 배열의 초기 index부터 마지막 index까지의 값을 복사한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Arrays6_2 {
public static void main(String[] args) {
int[] arr = {0,1,2,3,4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
// copyOf
int[] arr2 = Arrays.copyOf(arr, arr.length);
System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
int[] arr3 = Arrays.copyOf(arr, 3);
System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));
System.out.println();
// copyOfRange
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);// 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr6) = " + Arrays.toString(arr6));
}
}
|
cs |
정렬
1
2
3
4
5
6
7
8
9
10
11
|
class Arrays6_3 {
public static void main(String[] args) {
int[] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
Arrays.sort(arr); // 오름차순으로 정렬됩니다.
System.out.println("sort");
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
}
}
|
cs |

연습문제
5-1 다음은 배열을 선언하거나 초기화 한것이다. 잘못된 것을 고르고 그 이유를 설명하시오
1. int[] arr[];
2. int[] arr={1,2,3,};
3. int[] arr= new int[5];
4.int[] arr= new int[5] {1,2,3,4,5};
5. int arr[5];
6.int[] arr[] = new int[3][];
정답 : 5번, 배열을 선언할 때, 배열의 크기를 지정할 수 없다. 배열 선언 시에는 int [] arr = new int[5]; 형태로 작성되어야한다.
5-2 다음과 같은 배열이 있을 때, arr[3].length의 값은 ?
int[][] arr= {
{5,5,5,5,5},
{10,10,10},
{20,20,20,20},
{30,30 }
}
답 : 2
5-3 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오.
1
2
3
4
5
6
7
8
9
10
11
|
class Variable1_4 {
public static void main(String[] args) {
int[] arr = {10,20,30,40,50};
int sum =0;
for(int i=0; i<arr.length;i++) {
sum+= arr[i];
}
System.out.println("sum="+ sum);
}
}
|
cs |
5-4 2차원 배열 arr에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오
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
|
class Excercise5_4 {
public static void main(String[] args) {
int[][] arr = {
{ 5,5,5,5,5 },
{10,10,10,10,10},
{20,20,20,20,20},
{30,30,30,30,30}
};
int total = 0;
float average = 0;
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
total += arr[i][j];
}
}
average = (float) total / (arr.length*arr[0].length);
System.out.println("total="+ total);
System.out.println("Average" + average);
}
}
|
cs |
5-5 다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다. (1) ~(2)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
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
|
import java.util.Arrays;
class Exercise5_5 {
public static void main(String[] args) {
int[] ballArr = {1,2,3,4,5,6,7,8,9};
int[] ball3 = new int[3];
//배열 ballArr의 임의의 요소를 골라서 위치를 바꾼다.
for (int i =0; i<ballArr.length; i++) {
int j = (int)(Math.random() * ballArr.length);
int tmp = 0;
tmp = ballArr[i];
ballArr[i] = ballArr[j];
ballArr[j] = tmp;
}
// 배열 ballArr의 앞에서 3개의 수를 배열 ball3로 복사한다.
ball3 = Arrays.copyOf(ballArr,3);
for(int i=0; i<ball3.length; i++) {
System.out.print(ball3[i]);
}
}
}
|
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
|
class Exercise5_6 {
String[] words = { "television", "computer", "mouse", "phone" };
Scanner scanner = new Scanner(System.in);
for(int i=0; i<words.length; i++) { // words 길이 만큼 반복 (4)
char[] question = words[i].toCharArray(); // String을 char[]로 변환
// question[] = {t,e,l,e,v,i,s,i,o,n,c,o,m,p,u,t,e,r,m,o,u,s,e,p,h,o,n,e}l
for(int j=0; j<question.length; j++) {
int index = (int)(Math.random()*question.length); //quenstion 길이중 무작위 인덱스 뽑기
char tmp = question[i]; //
question[i] = question[index];
question[index] = tmp;
}
System.out.printf("Q%d. %s의 정답을 입력하세요.>", i+1, new String(question));
String answer = scanner.nextLine();
//trim()으로 answer의 좌우 공백 제거 후, equals로 word[i]와 비교
if(words[i].equals(answer.trim()))
{
System.out.printf("맞았습니다.\n\n");
}else {
System.out.printf("틀렸습니다.\n\n");
}
}
}
}
|
cs |
위 코드 실행과정
1. String 배열 words에 4개의 단어를 저장합니다.
2. Scanner를 이용하여 사용자로부터 입력을 받습니다.
3. words 배열의 길이만큼 반복문을 실행합니다.
4. words[i]를 char 배열로 변환하여 question 배열에 저장합니다.
5. question 배열의 문자를 무작위로 섞기 위해 반복문을 실행합니다. 이 때, Math.random() 메소드를 사용하여 무작위 인덱스를 생성하고, 두 문자를 swap합니다.
6. question 배열을 출력하여 사용자에게 보여줍니다.
7. 사용자로부터 입력을 받아 answer 변수에 저장합니다.
8. answer 문자열의 좌우 공백을 제거하고, words[i]와 비교하여 일치 여부를 판단합니다.
9. 맞았을 경우 "맞았습니다."을, 틀렸을 경우 "틀렸습니다."을 출력합니다.
10. 마지막으로, 반복문을 종료하고 프로그램을 종료합니다.