출처: https://www.acmicpc.net/problem/15656
15656번: N과 M (7)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
제출 날짜: 2021년 8월 28일 토요일
생각
백준저지 N과 M 시리즈 중 3번(https://www.acmicpc.net/problem/15651)과 거의 동일한 문제다. 그냥 Scanner와 System.out.println()을 사용했더니 시간 초과가 나서 BufferedReader, BufferedWriter, StringTokenizer, StringBuilder를 몽땅 사용해서 통과했다. BufferedWriter는 static 전역변수로 선언해도 되는 건 알았는데 사용은 처음 해봤다.
그런데 검색(https://stackoverflow.com/questions/22148487/using-a-bufferedwriter-in-a-static-class, https://stackoverflow.com/questions/28003137/declaring-a-static-filewriter-and-filereader)해보니 선언은 static으로 하되 생성은 사용할 때 하는 게 나은 것 같다.
코드
// 출처: 백준저지 15656번 N과 M (7) https://www.acmicpc.net/problem/15656
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ15656 {
static int N, M;
static int[] input, nums;
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());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
input = new int[N];
nums = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
input[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(input);
getNum(0);
bw.flush();
bw.close();
}
private static void getNum(int cnt) throws IOException {
if (cnt == M) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
sb.append(nums[i] + " ");
}
bw.write(sb + "\n");
return;
}
for (int i = 0; i < N; i++) {
nums[cnt] = input[i];
getNum(cnt + 1);
}
}
}
'알고리즘 > 백준저지' 카테고리의 다른 글
백준저지 2669번 직사각형 네개의 합집합의 면적 구하기 (0) | 2021.08.30 |
---|---|
백준저지 10163번 색종이 (0) | 2021.08.29 |
백준저지 2309번 일곱 난쟁이 (0) | 2021.08.27 |
백준저지 2116번 주사위 쌓기 (0) | 2021.08.26 |
백준저지 2527번 직사각형 (0) | 2021.08.25 |