반응형
문제
N과 M 시리즈 문제 해설 보러가기
- [BOJ][Java] 15649번 - N과 M (1)
- [BOJ][Java] 15650번 - N과 M (2)
- [BOJ][Java] 15651번 - N과 M (3)
- [BOJ][Java] 15652번 - N과 M (4)
문제 설명
1부터 n까지 중복 관계 없이 m개를 고르는 문제
15649번 문제에서 중복을 체크할 필요가 없어졌다.
그래서 앞의 문제들과는 다르게 방문 여부를 체크하는 visited 배열을 쓰지 않아도 됐다.
그리고 Scanner를 사용하면 시간 초과로 실패가 나와서 BufferedReader, BufferedWriter를 사용했다.
성공 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
static int[] arr;
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter((System.out)));
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken()); // 1부터 n까지
int m = Integer.parseInt(st.nextToken()); // m개를 고르기
arr = new int[m];
dfs(n, m, 0);
br.close();
bw.close();
}
public static void dfs(int n, int m, int d) throws IOException {
if (d == m) {
for (int s : arr)
bw.write(s + " ");
bw.write("\n");
} else {
for (int i = 1; i <= n; i++) {
arr[d] = i;
dfs(n, m, d+1);
}
}
}
}
반응형