35일차 - java (배열 - 탐색, 삽입, 정렬)

Yohan·2024년 4월 9일
0

코딩기록

목록 보기
50/156
post-custom-banner
  • equls()를 통해 찾고있는게 배열에 존재하는지 확인
    -> 찾았다면 index 반환
        String[] foods = {"족발", "파스타", "치킨", "삼겹살"};

        String target = "치킨";

        // 탐색 알고리즘
        int index = -1; // 기본값 설정
        for (int i = 0; i < foods.length; i++) {
            if (target.equals(foods[i])) {
                index = i;
                break;
            }
        }
        System.out.println("index = " + index);

배열 중간에 삽입 (insert)

  1. 사이즈가 1개 더 큰 배열을 생성
  2. 기존 데이터 복사
  3. 삽입 위치를 기준으로 뒤의 데이터들을 뒤로 1칸씩 이동
    -> 이동 순서는 맨 끝에서부터!
  4. 새로운 데이터를 타겟 인덱스자리에 복사
  5. 주소값 이전
int[] arr = {10, 50, 90, 100, 150};
        int newNumber = 66;
        int targetIndex = 2; // 들어가고싶은 인덱스

        // 50과 90 사이에 66을 삽입!

        // 1. 사이즈가 1개 더 큰 배열 생성
        int[] temp= new int[arr.length + 1];

        // 2, 기존데이터 복사
        for (int i = 0; i < arr.length; i++) {
            temp[i] = arr[i];
        }

        // 3. 삽입위치에서 데이터 뒤로 1칸씩 이동
        //    이동 순서는 끝에서부터 시작해야 함
        for (int i = arr.length; i > targetIndex; i--) {
            temp[i] = temp[i-1];
        }
//        temp[5] = temp[4]; // [10, 50, 90, 100, 150, 150]
//        temp[4] = temp[3]; // [10, 50, 90, 100, 100, 150]
//        temp[3] = temp[2]; // [10, 50, 90, 90, 100, 150]

        // 4. 새로운 데이터를 타겟 인덱스자리에 복사
        temp[targetIndex] = newNumber;

        // 5. 주소값 이전
        arr = temp;
        temp = null;

        System.out.println("arr = " + Arrays.toString(arr));
        System.out.println("temp = " + Arrays.toString(temp));

11. 2차원 배열

  • Heap: 1차원 배열을 담음
  • stack: 1차원 배열을 가리킬 수 있는 주소값을 가진 2차원 배열을 담음
    -> 즉, stack에서 1차원배열의 주소값을 가지고 있기 때문에 1차원배열들 각각을 들여다 볼 수 있음
int[][] classScores = {scoresKim, scoresPark, scoresHong};

System.out.println(Arrays.toString(classScores[1])); // [100, 22, 56]
System.out.println(Arrays.toString(classScores)); // [[I@49e4cb85, [I@2133c8f8, [I@43a25848]
System.out.println(Arrays.deepToString(classScores)); // [[77, 100, 99], [100, 22, 56], [40, 90, 80]]
  • 1차원 배열은 Arrays.toString() 을 통해 배열을 들여다 볼 때 사용
  • 2차원 배열은 Arrays.deepToString() 을 통해 배열을 들여다 볼 때 사용

2차원 배열 순회

  • for문을 통해 가능
  • 향상된 for문을 통해서도 가능
    -> js에서 for ~ of문이라고 불렸지만 java에서는 enhanced for loop, iteration, foreach 등으로 불림
for (int i = 0; i < classScores.length; i++) {
            for (int j = 0; j < classScores[i].length; j++) {
                System.out.printf("%d ", classScores[i][j]);
            }
            System.out.println();
        }
        
        
System.out.println("===================");
for(int[] scores : classScores) {
   for (int n : scores) {
       System.out.printf("%d ", n);
   }
       System.out.println();
}

12. 메서드

  • 메서드는 반복되는 코드를 줄여주고, 좀 더 구조화(모듈화) 시켜서 코드의 가독성을 좋게만듦
  • 객체지향 프로그래밍에서 메서드는 ‘객체가 가져야할 기능 이라고도 함
// 기본 메서드 생김새
[리턴타입] [메서드명](매개변수) {
    // 메서드의 기능 구현
}
  • 리턴타입을 맞춰서 적어주는 것이 중요
  • 반환할 값이 없는 경우에는 void 를 사용
    -> void를 사용할 경우 함수의 결과를 변수에 담을 수 없고 반드시 단독호출해서 사용!!!
  • 클래스 블록에 선언 (main 안에서 X, main도 메서드)
  • 메서드의 호출은 메서드 내부에서 진행

spread문법 사용

  • 파라미터에 배열이 들어갈 때 int[] numbers 라고 쓰는게 정석
    -> spread를 사용하여 int... numbers 라고 쓸 수 있음
// n개의 정수를 전달받아 그 총합을 반환하는 함수
// int[] numbers 대신에 int... 으로 사용가능 (스프레드)
    static int addAll(int... numbers) {
        int total = 0;
        for (int n : numbers) {
            total += n;
        }
        return total;
    }
profile
백엔드 개발자
post-custom-banner

0개의 댓글