15650 N과 M(2)
문제 풀이
N과 M(1) 문제에서 오름차순이라는 조건이 추가되었다.
N과 M(3)과 N과 M(4) 문제에서 활용했던 방식을 사용하여 이전에 ArrayList에 들어갔던 data를 Parameter로 다음 재귀 함수에 넣어주는 방식을 활용하였다.
코드
import java.util.*;
public class Main {
static StringBuilder sb = new StringBuilder();
static int N;
static void rec_fun(int length, ArrayList<Integer> tmp, int before) {
// before : 이전 재귀함수에서 ArrayList에 넣었던 data 값
if(length==0) {
String answer = tmp.toString();
sb.append(answer.substring(1,answer.length()-1)
.replaceAll(",","")+"\n");
return;
}
for(int i = before;i<=N;i++) {
if(!tmp.contains(i)) {
tmp.add(i);
rec_fun(length-1, tmp, i);
tmp.remove(tmp.size()-1);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
int M = sc.nextInt();
rec_fun(M, new ArrayList<Integer>(), 1);
System.out.println(sb.toString());
}
}
결과
import java.util.*;
public class Main {
static StringBuilder sb = new StringBuilder();
static int N;
static void rec_fun(int length, ArrayList<Integer> tmp, int before) {
// before : 이전 재귀함수에서 ArrayList에 넣었던 data 값
if(length==0) {
String answer = tmp.toString();
sb.append(answer.substring(1,answer.length()-1)
.replaceAll(",","")+"\n");
return;
}
for(int i = before;i<=N;i++) {
if(!tmp.contains(i)) {
tmp.add(i);
rec_fun(length-1, tmp, i);
tmp.remove(tmp.size()-1);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
int M = sc.nextInt();
rec_fun(M, new ArrayList<Integer>(), 1);
System.out.println(sb.toString());
}
}
Author And Source
이 문제에 관하여(15650 N과 M(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@idj7183/15650-N과-M2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)