반응형
[JAVA] 백준 15663번 - N과 M (9)
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) {
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. 기존의 N과 M 유형들이 섞인 유형
2. 이전의 N과 M 풀이시 boolean isUsed[] 배열을 선언해서 true, false로 값을 체크했었음
3. 그러나 M(수열의 길이) 보다 작고 중복의 개수만큼 숫자를 사용하기 때문에 HashMap으로 사용한 값을 체크함
4. StringBuilder를 이용해 정답출력
반응형
'알고리즘 > 백준 문제[추후 옮길예정]' 카테고리의 다른 글
[JAVA] [그래프] 백준 13023번 (0) | 2021.09.07 |
---|---|
[JAVA] 백준 15664번 (0) | 2021.07.26 |
[JAVA] 백준 15657번 (0) | 2021.07.26 |
[JAVA] 백준 12656번 (0) | 2021.07.25 |
[JAVA] 백준 12655번 (0) | 2021.07.25 |