230222 TIL(Today I Learn)

이용만·2023년 2월 22일
0

학습목표

  • 배열이 무엇인지 이해한다.
  • 1차원 배열과 2차원 배열을 이해한다.
  • 배열을 선언하고 초기화하는 방법을 이해한다.
  • 배열을 탐색하고 값을 사용하는 방법을 이해한다.

배열 : 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조

배열의 차원 : 차원이란 배열이 중첩된 정도를 의미한다. 중첩되었다는 것은 배열의 요소가 또 달은 배열인 경우를 뜻한다.

  • 1차원 배열 : 배열이 중첩이 없는 경우 = 배열의 요소가 배열이 아닌 경우
    ex){1,2,3,4} -> 배열의 각 요소는 1,2,3,4로 모두 정수형의 값이다.
  • 2차원 배열 : 배열이 한 번 중첩되어 있는 경우 = 배열의 요소가 배열인 겨우
    ex){{1,2,3,4},{5,6,7,8}} -> 배열의 각 요소로 배열이 들어가 있다.

#배열 관련 알고리즘 문제

1.getEvenNumbers

문제 : int 타입을 요소로 갖는 배열을 입력받아 짝수만을 요소로 갖는 배열을 리턴
입출력 예시
int[] output = getEvenNumbers(new int[]{1, 2, 3, 4});
System.out.println(output); // --> [2, 4]

package com.codestates.coplit; 
import java.util.Arrays;

public class Solution { 
	public int[] getEvenNumbers(int[] arr) {
    //빈 배열
    int[] answer = new int[]{};
    if(arr.length == 0){
      return answer;
    }
    for(int i=0; i<arr.length; i++){
      if(arr[i] % 2 == 0){
        //기존 배열을 복사하면서, 길이가 1 확장된 새로운 배열을 만들고
        //(복사대상 배열, 새롭게 만들 배열의 크기)
        answer = Arrays.copyOf(answer, answer.length+1); 
        //그 새로운 배열 마지막에 새롭게 발견된 짝수를 추가.
        answer[answer.length-1] = arr[i];
      }
    }
    return answer;

    //다른 방법
	} 
}

  1. mergeArrays
package com.codestates.coplit; 

public class Solution { 
	public int[] mergeArrays(int[] arr1, int[] arr2) {
    // TODO:
    int sumLength = arr1.length + arr2.length;
    int[] sum = new int[sumLength];
    
    //arr1을 sum에 복사
    System.arraycopy(arr1,0,sum,0,arr1.length);
    //arr2를 sum에 복사하는데, arr2를 sum의 index3에 복사하였다.
    System.arraycopy(arr2,0,sum, arr1.length,arr2.length);

    return sum;

	} 
}

배열관련 메서드

1. System.arraycopy();

System.arraycopy(원래배열, 어디서부터 복사할까?, 복사된 배열을 어디에 넣을까?, 어디서부터 넣을까? , 얼만큼 가져올까?);

  int[] arr = {0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8};
     int[] arr2 = new int[arr.length-1];

     System.arraycopy(arr, 0, arr2, 0,arr.length-1);

     System.out.println("arr2 = " + Arrays.toString(arr2));
        //arr2 = [0, 1, 0, 1, 2, 3, 4, 5, 6, 7] 출력

2. Arrays.copyOfRange();

배열을 범위만큼 복사해서 return한다.

 int[] arrOri = {0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8};

        int[] arr1 = Arrays.copyOf(arrOri, 3); // 원래배열, 길이
        int[] arr2 = Arrays.copyOfRange(arrOri, 3, 6); // 원래배열, 시작 인덱스, 끝 인덱스

        System.out.println("arr1 = " + Arrays.toString(arr1)); // arr1 = [0, 1, 0]
        System.out.println("arr2 = " + Arrays.toString(arr2)); // arr2 = [1, 2, 3]

#하루 소감
배열은 할 때마다 '현업에서 쓰이나?' 란 생각이 많이 든다. 빨리 콜렉션을 사용하고 싶은 마음이다. 내일부터는 OOP를 들어간다. 자바의 핵심인 만큼 학습에 집중하고 부족한 부분은 꼭 복습을 하자.

profile
성장하는 개발자가 되고자 합니다.

0개의 댓글