Notice
Recent Posts
Recent Comments
Link
HwangHub
[백트래킹/자바] 코드트리 IL. 특정 조건에 맞게 k개 중에 1개를 n번 뽑기 본문
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
문제 해석
위 문제는 k<= 4, n<=8 이므로 완전탐색이 웬만해선 가능한 문제이며, 조건에 맞는 숫자 조합을 골라서 출력하는 문제이므로, 백트래킹을 사용하면 된다.
문제 풀이
간단한 문제라 설명은 생략한다.
package 코드트리.완전탐색.백트래킹;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 특정조건에맞게_k개중에1개를_n번뽑기 {
private static List<Integer> li = new ArrayList<>();
private static int n, k;
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());
go();
}
public static void go() {
if (li.size() == n) {
printNumbers();
return;
}
for (int i = 1; i <= k; i++) {
if (li.size() < 2 || !isDuplicate(i)) {
li.add(i);
go();
li.remove(li.size() - 1);
}
}
}
private static boolean isDuplicate(int i) {
return li.size() >= 2 && li.get(li.size() - 2) == li.get(li.size() - 1) && li.get(li.size() - 1) == i;
}
private static void printNumbers() {
for (Integer i : li) {
System.out.print(i + " ");
}
System.out.println();
}
}
'workspace > 알고리즘' 카테고리의 다른 글
[BFS/자바] 코드트리 IL. 최소 경로로 탈출하기 (0) | 2023.09.23 |
---|---|
[백트래킹/자바] 코드트리 IL. 1차원 윷놀이 @얉은복사, 깊은복사 (1) | 2023.09.19 |
[백트래킹/자바] 코드트리 IL. 알파벳과 사칙연산 (0) | 2023.09.15 |
[백트래킹/자바] 코드트리 IL. 겹치지 않게 선분 고르기 (0) | 2023.09.14 |
[브루트포스/자바] 코드트리 NM. 가장 작은 x 찾기 (0) | 2023.09.12 |
Comments