문제 13038번 (브루트포스)
교환학생들을 위한 수업은 특정 요일에만 진행된다 ( a1 ~ a7 )
- 수업 미진행 = 0 / 수업 진행 = 1
- 일요일 = a1 / 월요일 = a2 / 토요일 = a7
- 수업이 어떠한 요일에도 열리지 않는 경우는 없다.
교환학생으로 n일 동안 수업을 들으려고 한다. 최소 일수를 출력하라
[입력]
: 첫 번째 줄에 테스트 케이스의 수
: 각 테스트케이스의 첫 번째 줄에는 첫 번째 줄에 정수 n (1≤ n ≤105)
그 다음 줄에는 7개의 정수 a1, a2, …, a7
[출력]
: "#테스트케이스 정답" 출력

[과정]
탐색하자 → 브루트포스 / dfs → 조건이 있어서 다시 되돌아 간다 → 백트래킹
※ 과정 ※
- 시작 요일을 바꿔가며 가장 최소일 수인 min 값을 출력한다
- 다만 수업이 있는 날부터 일 수를 체크하기 시작한다
- arr = 1이 되면 그때부터 day++
- start는 시작 요일을 구분하기 위해 만든 것
[코드]
import java.util.*;
import java.io.*;
class Solution
{
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T= Integer.parseInt(br.readLine());
for(int t = 1; t <= T; t++)
{
int N = Integer.parseInt(br.readLine());
int arr[] = new int [7];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i =0; i<7; i++){
arr[i]=Integer.parseInt(st.nextToken());
}
int min = Integer.MAX_VALUE;
for(int i =0; i<7; i++){
if(arr[i]==0){
continue;
}
int start = i;
int day = 0;
int count = 0;
while(count <N){
if(arr[start%7] == 1){
count++;
}
day++;
start++;
}
min= Math.min(min, day);
}
System.out.println("#"+t+" "+min);
}
}
}
[해설]
: for(int t = 1; t <= T; t++)
{
int N = Integer.parseInt(br.readLine()); 들어야하는 수업횟수
int arr[] = new int [7]; 일주일
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i =0; i<7; i++){
arr[i]=Integer.parseInt(st.nextToken()); 수업체크
}
int min = Integer.MAX_VALUE; 초기화
for(int i =0; i<7; i++){ 7일 동안 어디서부터 시작할 지 정하기
if(arr[i]==0){ 수업이 없을 경우 넘어간다
continue;
}
int start = i; 요일 기록 (1이 되는 순간 호출할 것)
int day = 0; 일수 체크
int count = 0; 수업횟수 체크
while(count <N){ 수업횟수 채워지면 종료
if(arr[start%7] == 1){ 수업이 있는 날부터 시작
count++; 카운트
}
day++; 지금부터 일수 체크 시작
start++; 다음 요일로 옮기기
}
min= Math.min(min, day); 그동안 저장한 일수 최솟값 출력
}
System.out.println("#"+t+" "+min);
}
이제 풀어보러 갈께요 :)
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXxNn6GaPW4DFASZ
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *
'SWEA' 카테고리의 다른 글
[SWEA] 1491. 원재의 벽 꾸미기 D3 JAVA (자바) 풀이 (0) | 2024.05.12 |
---|---|
[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View D3 JAVA (자바) 풀이 (0) | 2024.05.12 |
[SWEA] 3307. 최장 증가 부분 수열 D3 JAVA (자바) 풀이 (1) | 2024.05.07 |
[SWEA] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 D3 JAVA (자바) 풀이 (0) | 2024.05.06 |