300x250
반응형
Leetcode 543을 풀다가
https://leetcode.com/problems/diameter-of-binary-tree/description/
처음 나의 풀이는 아래와 같았다.
class Solution {
int max = 0;
public int diameterOfBinaryTree(TreeNode root) {
if(root==null) return 0;
int dpt = diameter(root);
return max;
}
int diameter(TreeNode root){
if(root==null) return 0-1;
int left = diameter(root.left)+1;
int right = diameter(root.right)+1;
max = Math.max(max, left+right);
return Math.max(left, right);
}
}
int max를 필드에 둬서 diameter에서 업데이트를 시켰는데
다른 사람 풀이를 보니 특이하게 어레이를 쓰고 있었다.
그사람 풀이를 참조해서 내 코드를 변형하면 아래와 같은데
class Solution {
public int diameterOfBinaryTree(TreeNode root) {
if(root==null) return 0;
int[] max = new int[1];
int dpt = diameter(root, max);
return max[0];
}
int diameter(TreeNode root, int[] max){
if(root==null) return 0-1;
int left = diameter(root.left, max)+1;
int right = diameter(root.right, max)+1;
max[0] = Math.max(max[0], left+right);
return Math.max(left, right);
}
}
int가 아닌 int[1] 을 diameterofBinaryTree 안에서 정의하여 사용하고 있다.
저렇게 전달해주면 값이 업데이트가 되나? 해서 찾아봄
자바와 call by value
- Java에서는 모든 매개변수 전달이 사실상 call by value임
- 어레이를 사용한 것은 call by value처럼 동작하게 하려는 치팅
타입별 차이
- 기본 자료형 변수를 전달하면 값만 복사해서 전달하고 끝남
- 참조형 변수를 전달하면 참조값이 복사되어 넘어가므로 변경이 가능함.
- 크기가 1인 어레이를 생성해서 참조형 변수로 사용한 것
나의 의문
- 그럼 기본 자료형 int 대신 참조형인 Integer를 쓰면 안되나?
- Integer는 불변객체이기 때문에 값이 업데이트되는 게 아니라 새로운 Integer 객체를 생성해버리기 때문에 안됨

300x250
반응형
'IT > 자바, 스프링' 카테고리의 다른 글
| Intellij에서 새 Java 파일을 만드는데 빈 파일로 생성될 때 (0) | 2025.11.09 |
|---|---|
| (Java) HashMap과 HashSet (0) | 2025.06.26 |
| lombok @Builder 찾지 못하는 문제 (0) | 2025.06.12 |
| 잘 안써서 몰랐지만 유용할(수도 있는) 자바 String 함수 (0) | 2023.07.28 |
| Spring boot와 xml 없는 mybatis 사용하기 (어노테이션 적용) (0) | 2023.06.16 |