New World
[Zero-base #03] 배열 본문
배열
- 같은 데이터 타입의 변수들이 하나의 집합 형태로 이루어진 자료구조
- index와 element로 구성됨
- Arrays는 java에서 지원해주는 기본 클래스
1차원 배열
- 가장 기본적인 형태의 고정된 길이를 가진 배열
- 같은 데이터 타입의 변수들이 집합의 형태를 이루고 있음
- 데이터 타입은 기본 타입과 참조 타입 모두 볼 수 있음
1차원 배열 선언 => 선언 후 초기화해줄 것!
데이터형[] 배열이름 = new 데이터형[];
1차원 배열의 활용
- 요소의 길이를 정해줄 수 있어 for문 또는 while 문 같은 반복문으로 데이터를 다룰 수 있음
2차원 배열
- 배열의 요소로 1차원 배열을 가지는 배열
2차원 배열 선언
데이터형[][] 배열 이름 = new 데이터형[][];
가변 배열
- 2차원 배열 중 각 행다마 다른 길이를 가지는 배열
ex. int[][] array = new int[2][3];
//1차 배열
int N = 5; //배열의 크기
int[] array = new int[N];
int[] array = {1, 3, 5, 7, 9};
//2차 배열
int N = 2; //배열의 크기
int M = 2; //배열의 크기
int[][] array = new int[N][M]; //2차 배열
int[][] array = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 0}}, {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 0}};
//가변 배열
M = 3;
int[][] array = new int[N][M]; //2차 배열
int[][] array = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 0}}, {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 0}}, {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 0}};
Enhanced for문
- 배열에 데이터 값이 있어 모두 돌릴 때 사용
int[] array = {1, 3, 5, 7, 9};
for(int i : array){
for(int j : array){
....
}
}
* 배열과 리스트의 차이
배열(Array, []) : 인덱스로 여러 개의 데이터를 하나의 이름으로 그룹핑하여 관리하기 위한 자료구조
리스트(List, <>()) : 인덱스 없이 데이터를 그룹핑하여 관리하기 위한 자료구조
인덱스의 유무에 따라 저장 방식과 크기 할당, 속도가 달라지게 된다.
저장 방식
- 배열 : 정해진 공간이 있고 모든 곳에 인덱스가 존재
- 리스트 : 인덱스가 없어 새로 추가되는 공간에 저장될 수 있다
크기 할당
- 배열 : 객체 생성 시 크기 할당 필수 => 인덱스가 존재하기 위함, 할당되어 사이즈 변경이 불가
- 리스트 : 크기 할당이 필요가 없다 => 인덱스가 존재하지 않음 (자동으로 공간이 생성됨)
속도
- 배열의 삽입/삭제 : 인덱스를 찾아가기 위해 느리게 동작한다
- 리스트의 삽입/삭제 : 인덱스를 찾아갈 필요가 없기 때문에 빠르게 동작한다
- 배열의 조회 : 인덱스를 통해 조회를 하며 원하는 값을 찾기 때문에 빠르게 동작한다
- 리스트의 조회 : 인덱스 없이 조회를 하기에 값을 하나씩 확인하여 느리게 동작한다
다차원
- 배열 : 1차, 2차 식의 N차 형식과 가변 배열이 존재
- 리스트 : 불가능하다
문제 풀이
최소, 최대 (https://www.acmicpc.net/submit/10818/57493395)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int N = scn.nextInt();
ArrayList list = new ArrayList();
//배열에 숫자 삽입
for(int i = 0; i < N; i++){
list.add(scn.nextInt());
}
Collections.sort(list); //배열을 오름차순으로 정렬
System.out.println(list.get(0) + " " + list.get(N - 1)); //최소, 최대 출력
}
}
나누어 떨어지는 숫자 배열(https://school.programmers.co.kr/learn/courses/30/lessons/12910)
'Self-Study > Study' 카테고리의 다른 글
[회고 #0]프론트엔드와 백엔드 차이 - 백엔드 개발자가 되고 싶은 이유 (0) | 2023.03.17 |
---|---|
[Zero-base #02] 큐 (0) | 2023.03.15 |
[Zero-Base #01] 스택 (0) | 2023.03.14 |
[개념 정리 #12] 나중에 다시 정리할 것들 (0) | 2022.10.27 |
[개념정리 #10] Database (0) | 2022.10.26 |