먹었으면 뇌를 쓰자
백준 2565 java - 최댓값 본문
문제
잘못된 코드(*런타임 에러 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 으로 처리하면
배열 값들이 첫 번째부터 마지막까지 순서대로 비교되며
올바른 최댓값과 그 인덱스를 구할 수 있다.
'JAVA > 백준 알고리즘' 카테고리의 다른 글
백준 3052 java - 나머지 (풀이 추가: for-each문/HashSet) (0) | 2022.11.24 |
---|---|
백준 5597 java - 과제 안 내신 분..? (이해 안 가는 사람 위한 풀이) (0) | 2022.11.24 |
백준 10818 java - 최소, 최대 (★) (0) | 2022.11.22 |
백준 10871 java - X보다 작은 수 (0) | 2022.11.22 |
백준 10807 java - 개수 세기 (0) | 2022.11.21 |
Comments