
GIF 출처 : https://www.amigoscode.com/courses/java
1 ) 배열 ( Array ) 과 배열의 리턴 ( return )
2 ) 무명 배열 ( Anonymous Array ) 과 열거형 ( Enum )
3 ) 2차원 배열 ( 2D Array )
4 ) 백준 연습문제
여러 개의 데이터를 같은 이름으로 활용할 수 있도록 해주는 자료구조로 인덱스 ( index ) 와 인덱스에 대응하는 데이터들로 이루어진 자료 구조이다. 그렇기에 인덱스를 통한 접근에 대해 익숙해질 필요가 있다. 배열을 사용하는 이유는 한번에 많은 메모리 공간을 선언할 수 있어 순차적으로 데이터를 저장할 수 있다는 것이다.
배열의 특징은 다음과 같다.
① 원소 데이터들이 순차적으로 저장된다.
② 인덱스를 이용하여 원소 데이터에 접근이 가능하다.
③ 반복문을 이용하여 처리하기에 적합한 자료구조이다.
배열은 다른 언어인 C , Python에도 존재하는 내용이므로 배열의 구체적인 사용법과 특징에 대해서는 넘어가도록 하겠다. 배열의 기본 구조는 다음과 같으며 다른 언어와 다르게 구조가 다르니 꼭 암기하고 사용하길 권장한다.
데이터 타입 [] 변수명 = new 데이터 타입 [배열의 크기] ;
ex ) int[] i1 = new int [4]
이 때 위에서 나타난 예시의 배열은 자바의 두가지 단계를 내포하고 있다 .
① 배열 선언
② 배열 생성
위 두 단계는 배열을 사용할 때 필수적이며 선언 -> 생성 및 초기화 과정을 거쳐야한다.

배열의 크기는 배열 레퍼런스 변수를 선언할 때 결정되지 않기 때문에 length 필드에 크기가 저장된다. 배열의 크기를 담은 정수가 필요할 경우 다음과 같이 선언 및 초기화를 시행하면 된다.int size = 배열의이름.length ;
배열의 리턴과 리턴타입
: 자바는 객체 지향 ( OOP ) 언어 이기 때문에 클래스 , 객체 , 맴버 변수 등의 용어에 관한 정리가 필요하다. 뒷부분의 4장에서 이와 같은 내용을 자세히 다룰 예정이며 배열의 리턴과 리턴타입은 결국 배열이 이러한 리턴을 가지고 있다는 정도만 알아두고 4장을 학습한 뒤 복습을 통해 다시 개념을 살펴보는게 좋을듯 하다.
배열은 다음과 같은 메소드와 리턴타입을 지닐 수 있다.
( 리턴 타입 ) ( 메소드 이름 ) { 메소드 }
이때, 메소드가 리턴하는 배열의 타입은 리턴 받는 배열의 타입과 일치해야 한다. 리턴 타입은 배열의 크기를 지정하지는 않는다.
다음은 배열의 메소드를 이용한 예시이다.
int[] makeArray()
{
int temp[] = new int[4];
return temp; // 크기가 4인 배열을 생성한 후 배열을 리턴하는 메소드이다.
}
무명 배열
: 자바에서는 배열의 이름을 지정하지 않고 단순히 초기값만으로 배열을 생성시킬수 있다. 이때 즉시 배열을 만들어서 함수의 인수로 전달하고자 할때 많이 사용되는 이 배열을 무명 배열이라 한다. 무명 배열의 형식은 다음과 같다.
new 변수타입[] { 배열 구성 요소 } ;
다음은 무명 배열을 사용한 예시이다.
public static int sum(int[] numbers)
{
int total = 0;
for (int i=0; i<numbers.length; i++) {
total = total + numbers[i]; }
return total; }
public static void main(String[] args)
{
System.out.println(“합은 : ” + sum(new int[] {1, 2, 3, 4}));
}
열거형
: 얼거형 ( Enum ) 은 특별한 형태의 클래스 자료형으로 자바 5부터 지원이 되기 시작했다. 열거형은 연관된 상수들을 맴버로 포함하며 메소드도 포함이 가능하다. 상수들을 맴버로 포함한 이유는 맴버들을 사용하게 쉽게 열거하기 위해서 이다.
열거형은 클래스의 일종이기 때문에 별도의 자바 파일로 저장할 수도 있고 클래스 안 또는 밖에서 만들 수 있다. 그렇기에 클래스나 변수처럼 접근 제어자 지정이 가능하다. 열거형은 기억하기 쉬운 이름을 이용해서 잘못 사용하는 오류를 줄일 수 있다는 장점이 있다.
enum 이름 { 상수1 , 상수2 , ... , 상수 N }
열거형을 이용한 예시는 다음과 같다 .
enum Day {SUNDAY , MONDAY , TUESDAY , WENDESDAY , THURSDAY , FRIDAY , SATURDAY }
For - each 문
: 배열이나 나열 ( Enum )의 각 원소를 순차적으로 접근하는데 유용한 for 문이다. 일반적인 for문에 비해 코드의 길이가 짧아 가독성이 좋다. For - each 문은 다음과 같은 구조를 가지고 있다.
for ( 변수 타입 변수명 : 해당 변수타입을 가지는 다른 변수 )
예시 코드는 다음과 같다.
int[] num = { 1 , 2 , 3 , 4 , 5 };
int sum = 0; // 반복될 때마다 k는 num[0] , num[1] , ... , num[4] 값으로 설정
for (int k : num)
sum += k;
System.out.println("합은 "+ sum );
2차원 배열
: 자바에서는 다른 언어들과 마찬가지로 n차원 배열을 사용할 수 있다. 1차원 배열과 마찬가지로 [] 키워드를 통해 구현 가능하다. 2차원 배열의 선언 및 생성 / 초기화의 형식은 다음과 같다.
( 자료형 ) [][] ( 배열이름 ) = new ( 자료형 )[ 행 크기 ][ 열 크기 ];
이 때 , 2차원 배열을 통해 행렬의 구현이 가능하다. 일반적인 행렬과 달리 비정방적인 구현도 가능한데 이때 첫 번째 인덱스는 필수적으로 넣어야 하며 두 번째 인덱스는 생략해도 좋다.
( 자료형 ) [ 행 크기 ][] ( 배열이름 ) ;
( 배열이름 )[ 0 ] = new ( 자료형 ) [ 크기 ];
.
.
.
( 배열이름 )[ 행 크기 - 1 ] = new ( 자료형 ) [ 크기 ];
이와 관련한 예시는 다음과 같다.
int i[][];
i = new int[4][];
i[0] = new int[1]; // 1행은 1개 요소를 가진다.
i[1] = new int[2]; // 2행은 2개 요소를 가진다.
i[2] = new int[3]; // 3행은 3개 요소를 가진다.
i[3] = new int[4]; // 4행은 4개 요소를 가진다.

문제 목록
- 10807 번 ) 개수 세기 : https://www.acmicpc.net/problem/10807
- 10871 번 ) X보다 작은 수 : https://www.acmicpc.net/problem/10871
- 10818 번 ) 최소 , 최대 : https://www.acmicpc.net/problem/10818
- 2562 번 ) 최댓값 : https://www.acmicpc.net/problem/2562
- 10810 번 ) 공 넣기 : https://www.acmicpc.net/problem/10810
- 10813 번 ) 공 바꾸기 :
https://www.acmicpc.net/problem/10813- 5597 번 ) 과제 안 내신분..? : https://www.acmicpc.net/problem/5597
- 3052 번 ) 나머지 : https://www.acmicpc.net/problem/3052
- 10811 번 ) 바구니 뒤집기 : https://www.acmicpc.net/problem/10811
- 1546 번 ) 평균 : https://www.acmicpc.net/problem/1546
- 2738 번 ) 행렬 덧셈 : https://www.acmicpc.net/problem/2738
- 2566 번 ) 최댓값 : https://www.acmicpc.net/problem/2566
- 10798 번 ) 세로 읽기 : https://www.acmicpc.net/problem/10798
- 2563 번 ) 색종이 : https://www.acmicpc.net/problem/2563