작성
·
219
0
안녕하세요 자바 코딩테스트 강의 수강중인 학생입니다. 항상 좋은 강의 감사합니다.
선생님께서 앞에 결정알고리즘 개념을 설명한 상태에서 혼자 코드를 작성했습니다. 작성한 후 채점을 받으니 오답처리 되어, 강의를 마져 보았습니다. 제가 처음 작성한 코드와 접근 방식은 비슷한 것 같은데, 제 코드로 채점하면 오류가 떠서 혼자 계속 고민 해봤는데, 해결이 안되서 글 올립니다.
감사합니다. 좋은 하루 되십시오.
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public boolean isOkay(int mid, int m, int[] arr) {//중간값이 적절한건지 판단해주는 함수
int sum = 0;
int cnt = 1;
for(int i=0; i<arr.length; i++) {
sum = sum+arr[i];
if(sum>mid) {//앞에서부터 합이 mid 넘으면 카운트 업
cnt++;
sum = arr[i];//카운트하고 합 초기화
}
}
if(cnt<=m) return true;//카운트가 m보다 작아야함
return false;
}
public int solution(int n, int m, int[] arr) {
int answer = 0;
Arrays.sort(arr);
int lt = arr[n-1];//외쪽값은 배열의 최대값 => 적어도 DVD길이는 이만큼은 되야함
int rt = 0;
for(int x: arr)rt = rt+x;//오른쪾값은 배열의 합 => DVD길이가 이거보다 클 이유가 없음
while(lt<=rt) {
int mid = (rt+lt)/2;
if (isOkay(mid, m, arr)){
rt = mid-1;
answer = mid;
System.out.println(answer);
}
else lt = mid+1;
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] arr = new int[n];
for(int i=0; i<n; i++) {
arr[i] = kb.nextInt();
}
System.out.println(T.solution(n, m, arr));
}
}
답변 1
0
안녕하세요^^
유효성 검사 함수에서 문제가 있는 것 같습니다.
반례입니다. 답은 24입니다.
10 3 6 5 8 5 6 8 7 6 6 7
채점사이트에서 오답입니다를 클릭하면 답이 나오지 안는 입력케이스를 볼 수 있습니다. 강의소개란에 입력케이스를 볼 수 있는 방법을 설명해 놓았습니다. 앞으로 오답이 나오면 이 기능을 사용해 스스로 디버그해 보세요.