Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 배열
- C
- 피라미드 출력
- 백준 27433번
- 직각 삼각형
- 백준 5597번
- 백준 #11382번 #
- 5073번
- 해석
- 잡다한 일
- 백준 2587번
- 연속된 숫자의 합
- 알고리즘
- Java
- Unity
- 논리 연산
- html
- 차이
- 백준 1269번
- 대칭 차집합
- 일상생활 영어표현
- javascript
- 백준 1157번
- 상세 풀이
- 백준 9506번
- 백준 25305번
- 백준 2501번
- 백준 5086번
- C++
- 백준 2525번
Archives
- Today
- Total
YunDev
[자료구조와 알고리즘] 배열, 최댓값 본문
배열은 같은 자료형의 변수로 이루어진 구성 요소가 모인 것입니다. 배열 구성 요소의 자료형은 int, double 어떤 형이든 상관없이 각각의 배열의 원소는 같은 자료형입니다.
int[] array = new int[5];
이러한 방식으로 배열 변수 선언과 참조할 본체 선언을 같이 할 수 있습니다. 배열의 구성 요소는 자동으로 0으로 초기화됩니다.
int[] a = new int[] {1, 2, 3, 4, 5};
만약 초깃값을 주고 싶은 경우 요솟수를 제외하고 {} 사이의 값을 넣어줄 수도 있습니다.
int[] a = new int[] {1, 2, 3, 4, 5};
int[] b = a.clone();
이 수식은 배열을 복제하고 복제한 배열에 대한 참조를 생성합니다. b 배열의 원소는 a의 복제이기 때문에 전부 같지만 두 배열은 독립된 메모리 공간을 사용하기 때문에 b의 내부 값을 변경한다고 a 배열의 변경이 이루어지지 않습니다. (deep copy)
다음은 입력받을 요소의 갯수를 먼저 입력받고 배열의 값을 순차적으로 입력받은 뒤 최댓값을 구하는 코드입니다.
package org.example;
import java.util.Scanner;
public class Array {
static int MaxArray(int height[]) {
int max = height[0];
for(int i = 0; i < height.length; i++) { //최댓값 구하기
if(height[i] > max) {
max = height[i];
}
}
return max;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("입력하고자 할 원소의 수: ");
int N = sc.nextInt();
int height[] = new int[N];
for(int i = 0; i <N; i++) {
System.out.print((i+1)+":");
height[i] = sc.nextInt();
}
int Max = MaxArray(height); //매개변수로 배열을 전달함
System.out.println("현재 배열의 최댓값은: "+ Max);
}
}
Java에서 배열은 객체로 취급되며, 배열을 매개변수로 메서드에 넘길 때 배열의 메모리 주소가 전달됩니다. 이를 통해 메서드 내부에서 배열에 접근하고, 배열의 내용을 변경하면 원래 배열에도 반영됩니다.
static void ModifyArray(int[] arr) {
arr[0] = 999; // 첫 번째 원소를 999로 변경
}
public static void main(String[] args) {
int[] example = {1, 2, 3, 4, 5};
System.out.println("Before: " + example[0]); // 출력: 1
ModifyArray(example);
System.out.println("After: " + example[0]); // 출력: 999
}
배열을 메서드에 넘기면, 메모리 주소(참조)가 전달됩니다. 메서드 내부에서 배열의 내용을 수정하면, 원래 배열에도 반영됩니다. 하지만 새로운 배열을 생성하거나, 참조 자체를 바꾼다고 해서 원래 배열에 영향을 미치지는 않습니다.
static void ChangeReference(int[] arr) {
arr = new int[] {10, 20, 30}; // 새로운 배열 생성
}
public static void main(String[] args) {
int[] example = {1, 2, 3, 4, 5};
ChangeReference(example);
System.out.println(example[0]); // 여전히 1
}
배열의 참조를 변경하면 메서드 내부에서만 참조가 변경되고, 원본 배열은 영향을 받지 않습니다.
- 참조를 통해 배열의 요소를 수정하는 것은, 다른 사람이 "집 주소"를 알려줘서 그 집에 가구를 바꾼 것과 같습니다. 집 주소는 같으니, 변경 사항이 반영됩니다.
- 참조 자체를 변경하는 것은, 다른 사람이 알려준 집 주소를 새로운 집 주소로 바꾼 것과 같습니다. 하지만 본인만 새로운 집 주소를 알고 있고, 다른 사람은 여전히 원래 집 주소를 알고 있으니 원본에는 영향이 없습니다.
즉 메서드 내부에서 배열 참조를 변경해버리는건 다른 메모리 주소의 새로운 배열을 생성하고 그 메모리 주소에 접근하는 것과 같은 것입니다.
'자료구조와 알고리즘' 카테고리의 다른 글
[자료구조와 알고리즘] 소수 구하기 (0) | 2025.01.21 |
---|---|
[자료구조와 알고리즘] 기수 변환 (1) | 2025.01.17 |
[자료구조와 알고리즘] 다중 루프 (0) | 2025.01.13 |
구조적 프로그래밍, 드모르간 (0) | 2025.01.11 |
1. 알고리즘이란?, 연속된 숫자의 합 (0) | 2025.01.08 |