
Array
- 많은 수의 데이터를 다룰 때 사용하는 자료구조
- 각 데이터의 인덱스와 1:1 대응하도록 구성
- 데이터가 메모리 상에 연속적으로 저장됨
다차원 배열
int[][] matrix = new int[3][3]; // 3 x 3 크기의 2차원 배열
int[][][] cube = new int[3][3][3]; // 3 x 3 x 3 크기의 3차원 배열
장점
인덱스를 이용하여 데이터의 빠르게 접근 가능
연속된 메모리 공간에 요소를 저장하기 때문에, 요소에 대한 메모리 관리가 용이
구현이 간단하며, 다른 자료구조와 연결하여 사용할 수 있음
단점
데이터의 추가/삭제가 번거로운 편
- 미리 최대 길이를 정해서 생성해야 함
- 가변 길이의 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성
- 데이터 삭제 시, 인덱스를 유지하기 위해 빈 공간 유지
ArrayList
배열의 크기가 변경되어야 하는 경우, 동적 배열을 위한 ArryList 클래스를 사용
| Array | ArrayList |
| 고정된 크기를 가져 한번 생성되면 크기를 변경할 수 없음 | 동적 크기를 가지고 있어 요소를 추가하거나 제거할 때 크기가 자동으로 조정 |
| 기본형 및 객체형 데이터를 저장할 수 있음 | 기본형 데이터를 직접 저장할 수 없고, 래퍼 클래스로 감사써 저장해야 함. |
| 메모리 할당이 효율적이고 특정 인덱스에 직접 접근하는 시간이 짧음 | 크기를 확장하거나 줄일 때 추가적인 비용이 필요 |
| 인덱스를 통해 직접 요소를 다룸 | java.util.List 인터페이스를 구현하여 다양한 페이스를 제공 |
사용법
| 메소드 | 설명 |
| Arrays.sort(arr) | 배열의 요소를 오름차순으로 정렬 |
| Arrays.binarySearch(arr,value) | 정렬된 배열에서 저장된 값의 인덱스를 찾음 |
| Arrays.fill | 배열의 모든 요소를 지정된 값으로 채운다. |
| Arrays.equals(arr1,arr2) | 두 배열이 같은지 비교한다. |
| Arrays.deepEquals(arr1,arr2) | 다차원 배열을 비교 |
문제
https://www.acmicpc.net/problem/10818
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
//BufferedReader를 이용하여 입력값을 받는다
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//N개의 정수 입력
int N = Integer.parseInt(br.readLine());
//N개의 정수를 공백으로 구분하여 입력한다
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int index = 0;
int[] arr = new int[N];
//반복문 While을 이용하여 arr에 요소를 추가한다.
while (st.hasMoreTokens()) {
arr[index] = Integer.parseInt(st.nextToken());
index++;
}
//오름차순 정렬
Arrays.sort(arr);
//최소값과 최대값 출력
System.out.println(arr[0] + " " + arr[N - 1]);
}
}
StringTokenizer(문자열, 구분자) : 구분자를 기준으로 나누어 객체를 생성
.hasMoreTokens() : 남아있는 토큰이 있으면 true, 없으면 false를 반환
StringTokenizer와 split의 차이
| StringTokenizer | split() |
| java.util에 포함되어 있는 클래스 | tring 클래스에 포함되어 있는 메소드 |
| 문자 또는 문자열로 문자열을 구분 | 정규표현식으로 문자열을 구분 |
| 문자열을 token으로 인식 | split은 토큰으로 인식 |
| 결과값이 문자열 | 결과값이 문자열 배열 |
https://school.programmers.co.kr/learn/courses/30/lessons/12910
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(int[] arr, int divisor) {
int index = 0;
//int[] answer에 크기 찾기
for (int i = 0; i < arr.length; i++) {
if(arr[i] % divisor == 0){
index++;
}
}
int[] answer = new int[index];
int answerIdx = 0;
if(index == 0){
index = 1;
answer = new int[index];
answer[0] = -1;
}else {
for (int i = 0; i < arr.length; i++) {
if(arr[i] % divisor == 0){
answer[answerIdx] = arr[i];
answerIdx++;
}
}
}
//오름차순 정렬
Arrays.sort(answer);
return answer;
}
}'자료구조 1 Page 노트 정리' 카테고리의 다른 글
| 자료구조 1 Page 노트 정리 Heap (3) | 2024.10.20 |
|---|---|
| 자료구조 1 Page 노트 정리 연결리스트 (3) | 2024.10.18 |
| 자료구조 1 Page 노트 정리 HashMap (4) | 2024.10.17 |
| 자료구조 1 Page 노트 정리 Queue (1) | 2024.10.16 |
| 자료구조 1 Page 노트 정리 Stack (0) | 2024.10.14 |