인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

simononze님의 프로필 이미지
simononze

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

9. 뮤직비디오(결정알고리즘)

코드질문

작성

·

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

채점사이트에서 오답입니다를 클릭하면 답이 나오지 안는 입력케이스를 볼 수 있습니다. 강의소개란에 입력케이스를 볼 수 있는 방법을 설명해 놓았습니다. 앞으로 오답이 나오면 이 기능을 사용해 스스로 디버그해 보세요.

simononze님의 프로필 이미지
simononze

작성한 질문수

질문하기