https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
해석 및 팁
먼저 ArrayList를 생성한 후에 만약 list에의 크기가 m이 되면 list안의 값을 StringBuilder에 저장한 후에 출력해 주고 list에서 지워주면 됩니다. m보다 작을 경우에는 반복문을 통해 list안의 값의 존재여부를 판단 후에 중복이 아니라면 list에 값을 저장합니다.
Java 코드
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
static int n;
static int m;
static ArrayList<Integer> list;
static StringBuilder sb;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sb = new StringBuilder();
list = new ArrayList<>();
n = sc.nextInt();
m = sc.nextInt();
dfs();
System.out.println(sb);
}
public static void dfs() {
if(list.size() == m) {
for(int i = 0; i < m; i++) sb.append(list.get(i)+" ");
sb.append("\n");
return;
}
for(int i = 1; i <= n; i++) {
if(!list.contains(i)) {
list.add(i);
dfs();
list.remove(Integer.valueOf(i));
}
}
}
}
'백준' 카테고리의 다른 글
백준 1874 스택 수열(Java) (0) | 2023.01.31 |
---|---|
백준 1002 터렛(Java) (0) | 2023.01.31 |
백준 2579 계단 오르기(Java) (0) | 2023.01.31 |
백준 11726 2xn 타일링(Java) (0) | 2023.01.30 |
백준 2606 바이러스(Java) (0) | 2023.01.30 |