Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- lv0
- 큐
- 이진수 변환
- COS Pro
- 프로그래머스
- 스프링부트 도커로 배포
- 프로그래머스 문자열 정렬
- 알고리즘
- lv2
- 스프링부트 도커 배포
- Lv1
- StringTokenizer
- Programmers
- 스프링부트 도커
- index of
- 프로그래머스 자바
- 자바
- Stack
- 문자열
- java
- 스택
- 백준 N과 M 자바
- 삼각형의 완성조건
- 프로그래머스 풀이
- 백준
- Queue
- 버퍼
- SWEA
- 오름차순 정렬
- 클라이언트
Archives
- Today
- Total
mun dev
[백준] 15654 N과 M(5) 자바(Java) 본문
문제설명
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.
- N개의 자연수 중에서 M개를 고른 수열
입력
첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
풀이
백트래킹 문제를 접해보기 위해 알고리즘 분류에서 선택해서 문제를 풀이했다.
차례대로 출력해야하므로 입력 받은 배열을 정렬 후 DFS 호출하여 M과 카운트가 같다면 해당 배열을 출력하고 종료하도록 구현했다.
통과한 코드 ✅
import java.util.*;
import java.io.*;
public class Main {
static int[] nums;
static int[] arr;
static boolean[] visited;
static int N,M;
static StringBuilder sb = new StringBuilder();
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());
nums = new int[N];
arr = new int [M];
visited = new boolean[N];
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++){
nums[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(nums);
dfs(0);
System.out.println(sb.toString());
}
public static void dfs(int count){
if(count == M){
for(int i=0; i<M; i++){
sb.append(arr[i]).append(" ");
}
sb.append("\n");
return;
}
for(int i=0; i<N; i++){
if(!visited[i]){
visited[i]=true;
arr[count] = nums[i];
dfs(count+1);
visited[i]=false;
}
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 7576 토마토 자바(Java) (0) | 2023.10.30 |
---|---|
[백준] 14502 연구소 자바(Java) (1) | 2023.10.23 |
[백준] 1743 음식물 피하기 자바(Java) (2) | 2023.10.17 |
[백준] 16953 A → B 자바(Java) (0) | 2023.10.16 |
[백준] 15686 치킨 배달 자바(Java) (1) | 2023.10.16 |