・자료구조(data structure)
: 데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계. 즉, 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법
>데이터 단위?
데이터를 구성하는 한 덩어리
<배열>
: 같은 자료형의 변수로 이루어진 구성 요소(component)가 모인 것
int[] a; //a는 자료형이 int형인 배열: 형식A
int a[]; //a는 자료형이 int형인 배열: 형식B
a = new int[5];
//구성 요소의 자료형이 int형, 구성 요소의 개수는 5개
・구성 요소
>배열 안의 모든 구성 요소: 동일한 데이터 타입, 줄지어 선 직선모양
>배열의 개별 요소에 접근하기 위해 사용하는 연산자: [정수형 인덱스]
ex. a[i]: 배열 a에서 처음쿠터 i개 뒤의 구성 요소에 접근(배열의 인덱스는 0부터 시작)
・구성 요솟수(길이)
=length
배열 변수 이름.length //배열의 구성 요솟수
・기본값
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class IntArray {
public static void main(String[] args) {
int[] a = new int[5]; //배열의 선언
a[1] = 37;
a[2] = 51;
a[4] = a[1] * 2;
for(int i = 0; i < a.length; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
|
*배열의 구성 요소는 자동으로 0으로 초기화된다.
・배열의 요솟값을 초기화하며 배열 선언하기
1
2
3
4
5
6
7
8
9
10
11
12
|
public class IntArrayInit {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
//배열 초기자에 의해 생성
for(int i = 0; i < a.length; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
|
*배열 본체의 생성과 동시에 각 요소의 초기화도 가능하다.
int[] a = new int a[] {1, 2, 3, 4, 5} //위의 배열 선언 및 구성 요소 초기화와 동일
・배열의 복제(클론)
배열 이름.clone() //배열의 복제
: 배열을 복제하고 복제한 배열에 대한 참조를 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class CloneArray {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = a.clone(); //b는 a의 복제를 참조
b[3] = 0;
System.out.print("a = ");
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.print("\nb = ");
for(int i = 0; i < b.length; i++) {
System.out.print(b[i] + " ");
}
}
}
|
<배열 요소의 최댓값 구하기>
int max = a[0];
if(a[1] > max) max = a[1];
if(a[2] > max) max = a[2];
반복문을 사용해 구현할 수도 있다.
int max = a[0];
for(int i = 1; i < n; i++) {
if(a[i] > max) max = a[i];
}
-주사(traverse): 데이터를 하나씩 지나면서 살피고, 조사하는 일, scanning을 의미한다.
・배열 요소의 최댓값을 구하는 메서드
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
|
public class MaxOfArray {
static int maxOf(int[] a) {
int max = a[0];
for(int i = 1; i < a.length; i++) {
if(a[i] > max)
max = a[i];
}
return max;
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("키의 최댓값 구하기");
System.out.print("사람 수: ");
int num = stdIn.nextInt();
int[] height = new int[num];
for(int i = 0; i < num; i++) {
System.out.println("키는?");
height[i] = stdIn.nextInt();
}
System.out.println("키 최댓값: " + maxOf(height));
}
}
|
・난수 사용해 배열의 요솟값 설정하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class MaxOfArrayRandom {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
System.out.println("키의 최댓값 구하기");
System.out.println("사람 수: ");
int n = stdIn.nextInt();
int[] height = new int[n];
System.out.println("키 값: ");
for(int i = 0; i < n; i++) {
height[i] = 100 + rand.nextInt(90);
System.out.println("height[" + i + "] = " + height[i]);
}
System.out.println("최댓값: " + maxOf(height));
}
}
|
*nextInt(n)은 0부터 n-1까지의 난수를 반환한다.
*난수를 생성하는 라이브러리는 java.lang.Math클래스에서도 제공한다.
<배열 요소를 역순으로 정렬하기>
1. 교환 횟수: 요소 개수 / 2
for(i = 0; i < n / 2; i++)
2. 맨 처음과 맨 뒤의 요소부터 차례로 각각 하나씩 안쪽의 요소끼리 값을 교환
t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
<두 배열의 비교>
1
2
3
4
5
6
7
8
9
10
|
static boolean equals(int[] a, int[] b) {
if(a.length != b.length)
return false;
for(int i = 0; i < a.length; i++) {
if(a[i] != b[i])
return false;
}
return true;
|
1. 두 배열 a, b의 길이 비교
2. 두 배열의 값을 처음부터 비교
3. 반복문이 중단 없이 끝까지 실행되면 두 배열은 같다고 판단
'Algorithm > 02. 기본 자료구조' 카테고리의 다른 글
2-2. 클래스(Class) (0) | 2020.09.29 |
---|---|
2-1. 배열(Array-2) (0) | 2020.09.20 |