[백준][15649번] N과 M(1)
Updated:
문제 URL
https://www.acmicpc.net/problem/15649
내풀이
import java.io.*;
import java.util.StringTokenizer;
public class Main {
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
boolean[] ok = new boolean[n + 1];
int[] ans = new int[m];
cal(0, n, m, ok, ans);
bw.flush();
bw.close();
}
public static void cal(int idx, int n, int m, boolean[] ok, int[] ans) throws IOException {
if (idx == m) {
StringBuilder sb = new StringBuilder();
for (int a : ans)
sb.append(a + " ");
bw.write(sb.toString());
bw.newLine();
return;
}
for (int i = 1; i <= n; i++) {
if (ok[i])
continue;
ok[i] = true;
ans[idx] = i;
cal(idx + 1, n, m, ok, ans);
ok[i] = false;
}
}
}
다른 풀이
import java.util.*;
public class Main {
static boolean[] c = new boolean[10]; // 사용했으면 true, 안했으면 false
static int[] a = new int[10]; // 결과
static void go(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;
go(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();
go(0,n,m);
}
}
느낀점
전형적인 브루트포스다.
각각 순서에 어떤 수가 들어가는지 알아야 다음 수에 어떤 수를 넣는지 알수있다. 백준 강의에서 배운대로 순서관련 문제이다.
Leave a comment