문제풀이/자바

TIL - 자바의정석 연습문제[ch6 - 23]

Mo_bi!e 2023. 1. 7. 22:13

[6 - 23]

1. 문제설명

2. 나의 해답

package ex6_23;

public class Exercise6_23 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int[] data = {3,2,9,4,7};
		System.out.println(java.util.Arrays.toString(data));
		System.out.println("최대값:"+max(data));
		System.out.println("최대값:"+max(null));
		System.out.println("최대값:"+max(new int[]{})); // 크기가 0인 배열
	}

	private static int max(int[] data) {
		// TODO Auto-generated method stub
		
		// 데이터 검증
		if(data == null ||data.length == 0)
			return -999999;
		
		int max = 0;
		
		for(int i = 0 ; i < data.length ; i++) {
			
			if(data[i] > max)
				max = data[i];
			
		}
		return max;
	}

}

정답

3. 정답 코드

4. 보충 및 회고 

(1) 보충

 

(2) 회고 : 문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.

 

1) 유효성 체크는 이제 바로 쉽게 할 수있다

다만 Null부터 먼저 체크하자 그러지않으면 문제가 발생한다.

왜나하면 null인 상태로 인수가 오면 length는 어차피 null이여서 나올수있는 값 자체가 있을 수없기 때문이다.

 

 

2) 최댓값으로 max를 0으로 선언해주기 보다는 배열의 0번째를 넣어주는것이 바람직하다.

그리고 시작을 배열을 1번째부터 비교하면 더욱더 좋다

한번의 반복을 줄일수있기 때문이다.

 

for(int i = 0 ; i < data.length - 1 ; i++) {

    if(data[i + 1] > max)
        max = data[i + 1];

}

내 생각으로 모범답안은 index의 시작을 1로했지만, 보다 바람직한 방법은 0부터 시작하고 그 외의 값을 i + 1로 하는것이 바람직 하다고 생각한다.

이 경우 out of index가 발생할 수있기 때문에 종료절도 -1로 해주면 충분히 해결될 수있다.