Algorithm/02. 기본 자료구조

2-1. 배열(Array-1)

찹키리 2020. 9. 5. 13:11

・자료구조(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 = {12345};
        //배열 초기자에 의해 생성
        
        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 = {12345};
        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