Skip to content

Commit

Permalink
[Silver III] Title: N과 M (5), Time: 348 ms, Memory: 33224 KB -Baekjoo…
Browse files Browse the repository at this point in the history
…nHub
  • Loading branch information
dukbong committed Feb 8, 2024
1 parent 7b7271e commit c77f9cf
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
55 changes: 55 additions & 0 deletions 백준/Silver/15654. N과 M (5)/N과 M (5).java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

public class Main {

int[] nums;
int limit;
StringBuilder sb = new StringBuilder();
int[] result;
boolean[] visited;

public static void main(String[] args) throws Exception {
new Main().solution();
}

public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
nums = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
limit = arr[1];
visited = new boolean[nums.length];
result = new int[limit];
Arrays.sort(nums);
dfs(0,0);
System.out.println(sb);
}

private void dfs(int num, int level) {
if(level == limit) {
for(int i = 0; i < result.length; i++) {
if(i != result.length - 1) {
sb.append(result[i]).append(" ");
}else {
sb.append(result[i]);
}
}
sb.append("\n");
return;
}

for(int i = num; i < nums.length; i++) {
if(visited[i] == false) {
result[level] = nums[i];
visited[i] = true;
dfs(num, level + 1);
visited[i] = false;
}
}

}

}
36 changes: 36 additions & 0 deletions 백준/Silver/15654. N과 M (5)/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# [Silver III] N과 M (5) - 15654

[문제 링크](https://www.acmicpc.net/problem/15654)

### 성능 요약

메모리: 33224 KB, 시간: 348 ms

### 분류

백트래킹

### 제출 일자

2024년 2월 8일 12:58:43

### 문제 설명

<p>N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.</p>

<ul>
<li>N개의 자연수 중에서 M개를 고른 수열</li>
</ul>

### 입력

<p>첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)</p>

<p>둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.</p>

### 출력

<p>한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.</p>

<p>수열은 사전 순으로 증가하는 순서로 출력해야 한다.</p>

0 comments on commit c77f9cf

Please sign in to comment.