반응형
🔺 문제
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.util.*;
import java.io.*;
public class Main {
static int K, N;
static int[] arr, result;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
K = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
arr = new int[K];
for(int i = 0 ; i < arr.length ; i++) {
arr[i] = i + 1;
}
result = new int[N];
back(0);
System.out.println(sb.toString());
}
private static void back(int depth) {
if(depth == N) {
for(int i : result) sb.append(i + " ");
sb.append("\n");
return;
}
for(int i = 0 ; i < K ; i++) {
result[depth] = arr[i];
back(depth + 1);
}
}
}
|
cs |
🧩 해결 아이디어
• 백트래킹
. 재귀함수를 활용해 모든 순열과 조합을 만든다.
🔺 다른 풀이들
- 리스트를 활용해 숫자 뽑고 퇴각
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static int k, n;
public static ArrayList<Integer> selectedNums = new ArrayList<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
k = sc.nextInt();
n = sc.nextInt();
findPermutations(0);
}
// 중복 순열 구하는 메소드
public static void findPermutations(int cnt) {
if(cnt == n) {
printPer();
return;
}
// 1부터 k까지의 각 숫자가 뽑혔을 때의 경우 탐색
for(int i = 1 ; i <= k; i++) {
selectedNums.add(i); // 숫자 뽑기
findPermutations(cnt + 1);
selectedNums.remove(selectedNums.size() - 1); // 숫자 퇴각
}
}
// 원소들 출력 메소드
public static void printPer() {
for(int i = 0; i < selectedNums.size(); i++)
System.out.print(selectedNums.get(i) + " ");
System.out.println();
}
}
|
cs |
💬 느낀 점
백트래킹 너무 오랜만...
내 실력이 퇴각되었구나... 분발...
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[백준/JAVA] 15651번: N과 M (3)
🔺 문제 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로
bono039.tistory.com
반응형
'코테 > 코드트리' 카테고리의 다른 글
[코드트리/INTERMEIDATE LOW] 사각형 채우기 3 (JAVA) (0) | 2023.11.26 |
---|---|
[코드트리/INTERMEDIATE LOW] 마을 구분하기 (JAVA) (0) | 2023.11.25 |
[코드트리/NOVICE MID] 수를 여러번 사용하여 특정 수 만들기 (JAVA) (0) | 2023.11.25 |
[코드트리/NOVICE MID] 숫자 2배 후 하나 제거하기 (JAVA) (0) | 2023.11.25 |
[코드트리/NOVICE MID] 악수와 전염병의 상관관계 2 (JAVA) (0) | 2023.11.24 |