📌 고정 게시글

📢 공지합니다

이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.

최코딩의 개발

[백준 15666번] N과 M(12) 본문

코딩테스트/백준

[백준 15666번] N과 M(12)

seung_ho_choi.s 2025. 3. 23. 01:20
728x90

https://www.acmicpc.net/problem/15666

 

package dp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class DP15666 {
    static int N;
    static int M;

    static List<String> num;
    static List<Integer> inputNum;
    static List<String> list = new ArrayList<>();
    static StringBuilder sb;

    static Set<String> answer = new LinkedHashSet<>();

    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());

        inputNum = new ArrayList<>();
        num= new ArrayList<>();
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            inputNum.add(Integer.parseInt(st.nextToken()));
        }

        Collections.sort(inputNum);
        for (Integer i : inputNum) {
            num.add(String.valueOf(i));
        }
        dfs(0);

        for (String s : answer) {
            System.out.println(s);
        }
    }

    public static void dfs(int level) {
        if (level == M) {
            sb=new StringBuilder();
            for (String s : list) {
                sb.append(s).append(" ");
            }
            answer.add(sb.toString().trim());

            return;
        }

        for (int i = 0; i < N; i++) {
            if (list.size() == 0 || Integer.parseInt(list.get(list.size() - 1)) <= Integer.parseInt(num.get(i))) {
                list.add(num.get(i));
                dfs(level + 1);
                list.remove(list.size() - 1);
            }
        }
    }
}
// 1. visit 배열이 너무 많았다 - > hastSet으로 해결
// 2. StringBuilder로 값을 저장했는데 두자릿수 이상일떄는 오류남 -> list로 개별 단위로 저장
// 3. 입력받을때 num이 String 타입이라서 정렬이 안됐었음 -> InputNum으로 Integer로 받고 정렬한 다음 num한테 문자열로 저장하게 함~!
728x90

'코딩테스트 > 백준' 카테고리의 다른 글

[백준 2156번] 포도주 시식  (0) 2025.03.25
[백준 15666번] 로봇 조종하기  (0) 2025.03.24
[백준 2877번] 4와 7  (0) 2025.03.19
[백준 17070번] 파이프 옮기기 1  (0) 2025.03.18
[백준 12865번] 평범한 배낭  (1) 2025.02.28