https://www.acmicpc.net/problem/15649
● N과 M (1) (15649번)
package bruteForce;
import java.util.*;
public class Main {
static boolean[] c = new boolean[10];
static int[] a = new int[10];
static void func(int index, int n, int m) {
if (index == m) {
for (int i = 0; i < m; i++) {
System.out.print(a[i]);
if (i != m - 1)
System.out.print(' ');
}
System.out.println();
return;
}
for (int i = 1; i <= n; i++) {
if (c[i]) {
continue;
}
c[i] = true;
a[index] = i;
func(index + 1, n, m);
c[i] = false;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
func(0, n, m);
}
}
↓ 소스풀이 ↓
c배열을 통해 값이 들어가있는것을 체크해주기위해 bool타입으로 선언해줍니다.
Main메소드에서 n과 m변수를 각각 사용자에게 입력받습니다.
그리고 func()메소드에 재귀함수를 이용했고 파라미터로 0,n,m을 보내줍니다.
재귀함수 func()메소드에서 if문으로 입력한 m자리수와
index가 일치하면 출력해주는 소스를 입력해줍니다.
그리고 다음 for반복문을 통해 1부터 n까지 반복해주고
만약에 [0]자리에 값이 들어가있다면 중복하면 안되기에
c배열을 통해 true를 만들어줍니다.
그리고 실제 a배열에 해당 i값을 저장해줍니다.
다시 재귀함수로 go메소드로 이동하고 index+1해서 넘겨줍니다.
그렇게 돌리고나서, c배열을 하나씩 false해주면서 체크를 빼주고
다시 값넣고 m과 자릿수가 일치하면 출력을 반복해줍니다.
이미 1의 값을 사용을 다했으므로, 2로 넘어가서 반복해줍니다.
< 백준알고리즘 강의를 보고 참고하였습니다! >
'Dev. Etc > Algorithm' 카테고리의 다른 글
[JAVA] 백준 알고리즘 2309번 문제풀이 (일곱 난쟁이) (0) | 2019.11.12 |
---|---|
[JAVA] 백준 알고리즘 14226번 문제풀이 (이모티콘) (0) | 2019.11.11 |
[JAVA] 백준 알고리즘 1697번 문제풀이 (숨바꼭질) (0) | 2019.11.10 |
[JAVA] 백준 알고리즘 7576번 문제풀이 (토마토) (0) | 2019.11.09 |
[JAVA] 백준 알고리즘 2750번 문제풀이 (수 정렬하기) (0) | 2019.11.07 |
[JAVA] 백준 알고리즘 1182번 문제풀이 (부분집합의 합) (0) | 2019.11.06 |
[JAVA] 백준 알고리즘 10974번 문제풀이 (모든 순열) (0) | 2019.11.05 |
[JAVA] 백준 알고리즘 1978번 문제풀이 (소수 찾기) (0) | 2019.11.04 |