문제 주소
https://school.programmers.co.kr/learn/courses/30/lessons/138477
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
기존 코드
import java.util.Arrays;
class Solution {
public int[] solution(int k, int[] score) {
int[] tempArray = new int[k];
int[] answer = new int[score.length];
Arrays.fill(tempArray, score[0]);
for (int i = 0; i < score.length; i++) {
if(i < k) {
tempArray[i] = score[i];
} else {
if (score[i] > tempArray[0]) {
tempArray[0] = score[i];
}
}
Arrays.sort(tempArray);
answer[i] = tempArray[0];
}
return answer;
}
}
오류 발생 이유
최초에 코드를 작성하면서 입력값 중에 최소값만 출력하면 되고, 값이 쌓이면 score[0]이 이미 배열 모두 입력되어있더라도 추가되는 값들로 배열이 새로이 구성되면서 문제가 전혀 없이 작동할거라 생각했지만 테스트 통과율이 채 50퍼센트에 미치지 못함.
스스로 오류를 찾지 못하여 생성형 AI에 질문한 결과로는
Arrays.fill(tempArray, score[0]) 이 문제라고 함.
해당 부분에서 score[0]이 배열 전체에 들어가면서 이후 진행에서 다른값과의 충돌이 있을 수 있다고 뜨면서 해당 부분의 코드를 수정하는것을 추천함.
AI가 추천한 코드는 Arrays.fill(tempArray, Integer.MIN_VALUE) 였음.
최소값을 넣어서 다른값과의 충돌을 피하라는 뜻인거 같은데, 해당 코드로 수정하고 돌리면 Arrays.sort 과정에서 맨 앞에 Integer.MIN_VALUE 값이 들어가게 되어 무조건 실패함.
이 부분에서 스스로 해결을 못하고 기존 코드로 되돌리기를 꽤나 오랜 시간 반복하였고, 포기하고 샤워하고 정리하고 다시 봤다가 해당 부분을 MIN_VALUE가 아닌 MAX_VALUE로 바꿈.
그렇게 된다면 최대값들이 들어가있는 상태에서 tempArray[0]에 score[0] 값이 들어가고 Arrays.sort를 하게되면 나머지 값들은 MAX_VALUE이기 때문에 score[0] 값이 정상적으로 나오리라 기대하였고, 모든 테스트를 통과.
결론
초기값에 대한 생각을 조금 더 철저하게 할 필요가 있는듯.
초기값에서 오류가 생겼는데 그 부분에 대한 캐치는 다른 로직에서의 캐치보다 확연히 둔감한 것처럼 보임.
AI 믿지말자. 생각보다 저런 오류에 도움이 안되는듯 하다.
그리고 강사님과 주변 지인들이 말해준 것처럼 코드가 안풀린다고 부여잡고 낑낑대지말고 잠시 쉬다오던가 다른걸 하다오자...
수정된 코드
import java.util.Arrays;
class Solution {
public int[] solution(int k, int[] score) {
int[] tempArray = new int[k];
int[] answer = new int[score.length];
Arrays.fill(tempArray, Integer.MAX_VALUE);
for (int i = 0; i < score.length; i++) {
if(i < k) {
tempArray[i] = score[i];
} else {
if (score[i] > tempArray[0]) {
tempArray[0] = score[i];
}
}
Arrays.sort(tempArray);
answer[i] = tempArray[0];
}
return answer;
}
}
'코딩공부' 카테고리의 다른 글
| 240725 코딩테스트 난관(StringIndexOutOfBoundsException) (0) | 2024.07.25 |
|---|---|
| 240723 JPA 시작 오류 (0) | 2024.07.24 |
| Spring Security 인증 처리 흐름 (0) | 2024.07.05 |
| Spring Test (0) | 2024.06.28 |
| Spring MVC 동작 방식과 구성요소 (0) | 2024.06.10 |