코딩테스트/문제
[백준] 15652번: N과 M (4)
스키(ski)
2023. 12. 20. 14:11
문제 내용
https://www.acmicpc.net/problem/15652
15652번: N과 M (4)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
풀이 시간
4분
풀이 과정
백트래킹을 이용해 풀이
중복조합을 구현하는 간단한 풀이
정답 코드
1. 파이썬
import sys
sys_input=sys.stdin.readline
n,m=map(int,sys_input().rstrip().split())
ans=[]
def back_tracking(prev):
if len(ans)==m:
for x in ans:
print(x,end=" ")
print()
return
for i in range(prev,n+1):
ans.append(i)
back_tracking(i)
ans.pop()
back_tracking(1)
2. 자바
import java.io.*;
import java.util.*;
public class Main {
public static int n, m;
public static List<Integer> cur = new ArrayList<>();
public static void back_tracking(int prev) {
if (cur.size() == m) {
for (int x : cur) {
System.out.print(x + " ");
}
System.out.println();
return;
}
for (int i = prev; i <= n; i++) {
cur.add(i);
back_tracking(i);
cur.remove(cur.size() - 1);
}
}
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());
back_tracking(1);
}
}