반응형
[JAVA] 백준 15664번 - N과 M (10)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static StringBuilder sb = new StringBuilder();
static int[] answerArr; // 정답을 저장할 배열
static HashMap<Integer, Integer> numberCountMap; // 사용할 숫자의 중복개수
static ArrayList<Integer> numberList; // 사용할 숫자
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
answerArr = new int[M];
numberCountMap = new HashMap<Integer, Integer>();
numberList = new ArrayList<Integer>();
st = new StringTokenizer(br.readLine());
while (st.hasMoreTokens()) {
int num = Integer.parseInt(st.nextToken());
if (numberCountMap.get(num) == null) { // 사용할 숫자 리스트에 1번만 값을 넣어줌
numberCountMap.put(num, 1);
numberList.add(num);
} else if (numberCountMap.get(num) < M) { // 사용할 숫자의 중복개수를 넣어줌
numberCountMap.put(num, numberCountMap.get(num) + 1);
}
}
Collections.sort(numberList);
int depth = 0;
solution(depth);
System.out.print(sb.toString());
}
private static void solution(int depth) {
if (depth == M) {
for (int num : answerArr) {
sb.append(num).append(" ");
}
sb.append("\n");
return;
}
for (int i = 0; i < numberList.size(); i++) {
if (numberCountMap.get(numberList.get(i)) > 0) {
if (depth == 0 || (depth > 0 && answerArr[depth - 1] <= numberList.get(i))) {
numberCountMap.put(numberList.get(i), numberCountMap.get(numberList.get(i)) - 1);
answerArr[depth] = numberList.get(i);
solution(depth + 1);
numberCountMap.put(numberList.get(i), numberCountMap.get(numberList.get(i)) + 1);
}
}
}
}
}
백준 백트래킹 문제
정답을 맞춘 풀이방법
1. depth == 0 인경우 또는 이전 수열보다 현재수열이 크거나 같은경우에만 solution함수를 실행함
※ HashMap이 아닌 HashSet과 별도의 boolean[] 배열을 쓰는 방법도 있었음
반응형
'알고리즘 > 백준 문제[추후 옮길예정]' 카테고리의 다른 글
[JAVA] [그래프] 백준 11724번 (0) | 2021.09.07 |
---|---|
[JAVA] [그래프] 백준 13023번 (0) | 2021.09.07 |
[JAVA] 백준 15663번 (0) | 2021.07.26 |
[JAVA] 백준 15657번 (0) | 2021.07.26 |
[JAVA] 백준 12656번 (0) | 2021.07.25 |