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());
	}
}

결과

좋은 웹페이지 즐겨찾기