15649 N과 M (1)
문제 이해
N과 M(3) 문제에서 중복이 없다는 조건이 추가된 문제이다.
N과 M(3) 문제는 중복이 상관 없었지만 이번 문제에는 중복 관계까지 생각해야 하기 때문에, ArrayList에 data를 저장한 이후 .contains() 메서드를 통해 새로 추가시키고 싶은 data가 이미 존재하는지 여부를 확인하는 과정이 추가로 필요하게 된다.
코드
import java.util.*;
public class Main {
static StringBuilder sb = new StringBuilder();
static int N;
static void rec_fun(int length, ArrayList<Integer> tmp) {
if(length==0) {
String answer = tmp.toString();
sb.append(answer.substring(1,answer.length()-1)
.replaceAll(",","")+"\n");
return;
}
for(int i =1;i<=N;i++) {
if(!tmp.contains(i)) {
// 유일하게 추가되는 내용
// i라는 data를 ArrayList에 넣을 때 해당 data가 존재하지 않을
// 경우에만 ArrayList에 i를 추가한다.
tmp.add(i);
rec_fun(length-1, tmp);
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>());
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) {
if(length==0) {
String answer = tmp.toString();
sb.append(answer.substring(1,answer.length()-1)
.replaceAll(",","")+"\n");
return;
}
for(int i =1;i<=N;i++) {
if(!tmp.contains(i)) {
// 유일하게 추가되는 내용
// i라는 data를 ArrayList에 넣을 때 해당 data가 존재하지 않을
// 경우에만 ArrayList에 i를 추가한다.
tmp.add(i);
rec_fun(length-1, tmp);
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>());
System.out.println(sb.toString());
}
}
Author And Source
이 문제에 관하여(15649 N과 M (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@idj7183/15649-N과-M-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)