Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

전공공부

[BOJ_15664] N과 M (9~12) 본문

Study/Problem Solving

[BOJ_15664] N과 M (9~12)

monitor 2023. 10. 3. 17:02
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class BOJ_15663 {
    static int N,M;
    static int num[];
    static int arr[];
    static StringBuilder sb;

    static Set<String> ans;
    static boolean [] visited;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer tk = new StringTokenizer(br.readLine()," ");
        N = Integer.parseInt(tk.nextToken());
        M = Integer.parseInt(tk.nextToken());

        tk = new StringTokenizer(br.readLine()," ");
        sb = new StringBuilder();
        num = new int[N];
        arr = new int[M];
        ans = new LinkedHashSet<>();
        visited = new boolean[N];
        for (int i = 0; i < N; i++) {
            num[i] = Integer.parseInt(tk.nextToken());
        }
        Arrays.sort(num);
        go(0,0);
        ans.stream().forEach(i -> sb.append(i));
        System.out.println(sb.toString());
    }

    private static void go(int idx,int start) {
        if(idx == M){
            String tmp = "";
            for(int i = 0; i < M; i++){
                tmp += String.valueOf(arr[i]) + " ";
            }
            tmp += "\n";
            ans.add(tmp);
            return;
        }
        for(int i = 0; i < N; i++){
            if(!visited[i]) {
                visited[i] = true;
                arr[idx] = num[i];
                go(idx + 1, i);
                visited[i] = false;
            }
        }
    }
}
 

15663번: N과 M (9)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

package backtracking;

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

public class BOJ_15664 {
    static int N,M;
    static int num[];
    static int arr[];
    static StringBuilder sb;

    static Set<String> ans;
    static boolean [] visited;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer tk = new StringTokenizer(br.readLine()," ");
        N = Integer.parseInt(tk.nextToken());
        M = Integer.parseInt(tk.nextToken());

        tk = new StringTokenizer(br.readLine()," ");
        sb = new StringBuilder();
        num = new int[N];
        arr = new int[M];
        ans = new LinkedHashSet<>();
        visited = new boolean[N];
        for (int i = 0; i < N; i++) {
            num[i] = Integer.parseInt(tk.nextToken());
        }
        Arrays.sort(num);
        go(0,0);
        ans.stream().forEach(i -> sb.append(i));
        System.out.println(sb.toString());
    }

    private static void go(int idx,int start) {
        if(idx == M){
            String tmp = "";
            for(int i = 0; i < M; i++){
                tmp += String.valueOf(arr[i]) + " ";
            }
            tmp += "\n";
            ans.add(tmp);
            return;
        }
        for(int i = start; i < N; i++){
                arr[idx] = num[i];
                go(idx + 1, i+1);
        }
    }
}
 

15664번: N과 M (10)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

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

public class BOJ_15665 {
    static int N,M;
    static int num[];
    static int arr[];
    static StringBuilder sb;

    static Set<String> ans;
    static boolean [] visited;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer tk = new StringTokenizer(br.readLine()," ");
        N = Integer.parseInt(tk.nextToken());
        M = Integer.parseInt(tk.nextToken());

        tk = new StringTokenizer(br.readLine()," ");
        sb = new StringBuilder();
        num = new int[N];
        arr = new int[M];
        ans = new LinkedHashSet<>();
        visited = new boolean[N];
        for (int i = 0; i < N; i++) {
            num[i] = Integer.parseInt(tk.nextToken());
        }
        Arrays.sort(num);
        go(0,0);
        ans.stream().forEach(i -> sb.append(i));
        System.out.println(sb.toString());
    }

    private static void go(int idx,int start) {
        if(idx == M){
            String tmp = "";
            for(int i = 0; i < M; i++){
                tmp += String.valueOf(arr[i]) + " ";
            }
            tmp += "\n";
            ans.add(tmp);
            return;
        }
        for(int i = 0; i < N; i++){
                arr[idx] = num[i];
                go(idx + 1, i+1);
        }
    }
}​
 

15665번: N과 M (11)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

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

public class BOJ_15666 {
    static int N,M;
    static int num[];
    static int arr[];
    static StringBuilder sb;

    static Set<String> ans;
    static boolean [] visited;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer tk = new StringTokenizer(br.readLine()," ");
        N = Integer.parseInt(tk.nextToken());
        M = Integer.parseInt(tk.nextToken());

        tk = new StringTokenizer(br.readLine()," ");
        sb = new StringBuilder();
        num = new int[N];
        arr = new int[M];
        ans = new LinkedHashSet<>();
        visited = new boolean[N];
        for (int i = 0; i < N; i++) {
            num[i] = Integer.parseInt(tk.nextToken());
        }
        Arrays.sort(num);
        go(0,0);
        ans.stream().forEach(i -> sb.append(i));
        System.out.println(sb.toString());
    }

    private static void go(int idx,int start) {
        if(idx == M){
            String tmp = "";
            for(int i = 0; i < M; i++){
                tmp += String.valueOf(arr[i]) + " ";
            }
            tmp += "\n";
            ans.add(tmp);
            return;
        }
        for(int i = start; i < N; i++){
            arr[idx] = num[i];
            go(idx + 1, i);
        }
    }
}
 

15666번: N과 M (12)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_1789] 수들의 합  (1) 2023.10.04
[BOJ_1182] 부분수열의 합  (1) 2023.10.04
[BOJ_15656] N과 M (7)  (0) 2023.10.02
[BOJ_15655] N과 M (6)  (1) 2023.10.02
[BOJ_15654] N과 M (5)  (0) 2023.10.02