• 문제 링크
16457번: 단풍잎 이야기
첫째 줄에 키의 개수 n, 퀘스트의 개수 m, 퀘스트 당 사용해야 하는 스킬의 수 k가 주어진다. n은 10 이하, k는 n 이하의 양의 정수이며, m은 100 이하의 양의 정수이다. 둘째 줄부터 m개의 줄에는 각각
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int n, m, k, max;
static int[][] arr;
static boolean[] visit;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
arr = new int[m][k];
visit = new boolean[101];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < k; j++)
arr[i][j] = Integer.parseInt(st.nextToken());
}
recur(0, 1);
bw.write(String.valueOf(max));
bw.flush();
}
private static void recur(int depth, int idx) {
if (depth == n) {
int cnt = 0;
loop:
for (int i = 0; i < m; i++) {
for (int j = 0; j < k; j++) {
if (!visit[arr[i][j]])
continue loop;
}
cnt++;
}
max = Math.max(max, cnt);
return;
}
for (int i = idx; i <= n * 2; i++) {
if (visit[i])
continue;
visit[i] = true;
recur(depth + 1, i + 1);
visit[i] = false;
}
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 15558 점프 게임 - Graph Theory / Java (0) | 2023.03.06 |
---|---|
[백준] 12761 돌다리 - Graph Theory / Java (0) | 2023.03.05 |
[백준] 23284 모든 스택 수열 - Backtracking / Java (0) | 2023.03.03 |
[백준] 15270 친구 팰린드롬 - Backtracking / Java (0) | 2023.03.02 |
[백준] 25328 문자열 집합 조합하기 - Backtracking / Java (0) | 2023.03.01 |
댓글