본문 바로가기
자료구조 1 Page 노트 정리

자료구조 1 Page 노트 정리 Array

by 민경현(John) 2024. 10. 16.

 

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;
    }
}