먹었으면 뇌를 쓰자

백준 2565 java - 최댓값 본문

JAVA/백준 알고리즘

백준 2565 java - 최댓값

뇌이비 2022. 11. 23. 15:23

문제

 

 

 

 

잘못된 코드(*런타임 에러 ArrayIndexOutOfBounds)

로직의 큰 줄기는 괜찮았지만 ... 

 

 

 

 

1) int max = arr [0]

뒤에서 자세히 수정한다.

 

2) for문 조건절

인덱스를 0번째부터 찾으면 +1 처리를 해야 하니까

maxIndex를 아예 1부터 선언하고, for문 조건절도 int j=1로 해버렸다.

그러니까 if절에서 두 번째 값부터 돌리게 되는 불상사가 일어났다! 

 

3) bw.write() 개행 처리 

BufferedWriter는 개행 처리 안 된다 명심하자... 

 

 

 

 

정답

2)와 3)은 무사히 수정을 완료했고,

1)의 경우 이전 문제였던 최대 최소처럼 int max = arr [0] 으로 처리하면?

int maxIndex 에서 오류가 발생한다. 

 

가령 {5,2,3,4}와 같은 배열에서는

첫번째 값인 5가 max이면서 arr [0]이 된다. 

 

그런데 maxIndex는

max보다 arr [ j ]의 값이 클 경우 

max에 저장된 arr [ j ] 값에서 j 값을 저장한다. 

 

즉 최대 최소 문제와 달리 인덱스 j 값을 저장하는 추가 절차가 있는데, 

max와 arr [0]이 같아서 if문을 돌릴 필요가 없으면

인덱스 j 값을 저장할 수가 없게 된다.

 

입력 값은 자연수이므로

오른쪽처럼 int max = 0 으로 처리하면

배열 값들이 첫 번째부터 마지막까지 순서대로 비교되며

올바른 최댓값과 그 인덱스를 구할 수 있다. 

 

 

 

Comments