수업있는 날을 만나면 그때부터 Day Count를 +1 한다.
수업있는 날을 만날때마다 Class Count를 -1 한다.
대충 아래와 같은 코드였다..
int dayCount = 0;
Boolean start = false; //개강했는지
while(classCount!=0) {
for(int i=0; i<7; i++) {
//수업을 들었다면
if(calender[i]==1) {
start = true;
classCount--;
}
//개강한 상태라면
if(start == true) {
dayCount++;
}
//수업을 다 들었다면
if(classCount==0) {
break;
}
}
}
위에 코드로 제출하니까 100개중에 75개만 맞았다..
문제의 댓글을 보니까 개강일에 따라 최소 일수가 다르기 때문에 수업이 있는 각 요일을 개강일로 했을 때 일수를 구하고 최소 일수를 출력해야 된다는 것이었다.
이게 무슨 말이냐면 처음 구현했던 코드로는
0 1 0 0 0 1 1
라는 스케줄에서 두번 수업을 들어야 된다면 정답이 5로 출력된다. 하지만, 최소 일수는 2일이다.
// 첫 개강일마다의 최소 일수 계산
int min = Integer.MAX_VALUE;
for(int i=0; i<7; i++) {
if(calender[i]==1) {
//i요일을 개강일로 할때 최소 일수 구하기
int start = i;
int cnt=0;
while(true) {
//수업듣기
if(calender[start%7]==1)
cnt++;
//일수 추가
start++;
//수업을 다 들었을때
if(cnt==classNum) {
min = Math.min(min, start -i);
break;
}
}
}
}
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int testCase = Integer.parseInt(sc.next());
for(int t=1; t<=testCase; t++) {
//들어야 되는 수업 수
int classNum = Integer.parseInt(sc.next());
//일주일 수업 일정
int[] calender = new int[7] ;
for(int i=0; i<7; i++) {
calender[i] = sc.nextInt();
}
// 첫 개강일마다의 최소 일수 계산
int min = Integer.MAX_VALUE;
for(int i=0; i<7; i++) {
if(calender[i]==1) {
//i요일을 개강일로 할때 최소 일수 구하기
int start = i;
int cnt=0;
while(true) {
//수업듣기
if(calender[start%7]==1)
cnt++;
//일수 추가
start++;
//수업을 다 들었을때
if(cnt==classNum) {
min = Math.min(min, start -i);
break;
}
}
}
}
//정답 출력
System.out.println("#"+t+" "+min);
}
sc.close();
}
}