J 크 2023. 8. 20. 23:43
728x90
반응형

https://www.acmicpc.net/problem/15650

 

15650번: N과 M (2)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

주말도 재귀 해주세요!!! 22222


※  문제를 요약하면 아래와 같습니다.

https://heih.tistory.com/64

 

[실버3] 15649. N과 M(1)

https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

heih.tistory.com

 위 문제의 추가 조건으로 고른 수열이 오름차순일 때만 출력

 Input : 1 <= M <= N <= 8

 Output : 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력, 각 수열은 공백으로 구분해서 출력


◈ Input - 1 

4 2

◈ Output - 1

1 2
1 3
1 4
2 3
2 4
3 4

◈ Input - 2

4 4

◈ Output - 2

1 2 3 4

 ◎  코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

 N까지의 숫자를 각 자리수 별로 출력. (N 고정)

 공백으로 구분하여 M번 만큼 출력, M번의 반복문을 M번의 재귀 형태로 설계

 반복하여 출력 중, 반드시 중복된 숫자는 생략

 DFS 형태의 재귀 함수 구현

수의 출력이 오름차순이 아닐 시, 함수가 재귀 하지 않게 조건 추가

 차후, 추가 설명 작성 예정


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	public static int[] narr = new int[10];
	public static boolean[] barrSearch = new boolean[10];
	static BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));

	static int N;
	static int M;
	
	public static void NandM(int nNum) throws IOException {
		if(nNum == M) {
			for(int i = 0; i < M; i++) {
				bWriter.write(narr[i] + " ");
			}
			bWriter.write("\n");
			return;
		}
		
		for(int i = 1; i <= N ; i++) {
			if(!barrSearch[i]) {
				if(nNum != 0 && narr[nNum-1] > i)
					continue;
				narr[nNum] = i;
				barrSearch[i] = true;
				NandM(nNum+1);
				barrSearch[i] = false;
			}
		}
	}

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(bReader.readLine());
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		NandM(0);
		
		bWriter.flush();
		bWriter.close();

	}

}

힘들지만 재밌다!!333

읽어주셔서 감사합니다!

Good Luck! (피드백 감사합니다!)