๊ธฐ๋ก๋ฐฉ

BOJ_15663 : N๊ณผ M (9) ๋ณธ๋ฌธ

CodingTest/Java

BOJ_15663 : N๊ณผ M (9)

Soom_1n 2023. 6. 11. 00:12

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

15663๋ฒˆ: N๊ณผ M (9)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด

www.acmicpc.net

 



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N๊ฐœ์˜ ์ž์—ฐ์ˆ˜ ์ค‘ M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด์„ ๋ชจ๋‘ ๊ตฌํ•œ๋‹ค.
    • ์ˆ˜์—ด์€ ์ค‘๋ณต๋˜์„  ์•ˆ๋˜๋ฉฐ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
    • N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋Š” ์ค‘๋ณต์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ˆœ์—ด๋กœ M๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ณ ๋ฅด๊ณ , ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {
    private static int N, M, selected[];
    private static boolean[] checked;
    private static ArrayList<Integer> nums;
    private static ArrayList<String> ans;

    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        nums = new ArrayList<>();
        selected = new int[M];
        checked = new boolean[N];
        ans = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            nums.add(Integer.parseInt(st.nextToken()));
        }

        Collections.sort(nums);

        // Permutation
        perm(0);

        // Output
        for (String s : ans) {
            sb.append(s).append('\n');
        }
        sb.deleteCharAt(sb.length() - 1);
        bw.write(sb.toString());
        bw.flush();
    }

    private static void perm(int cnt) {
        if (cnt == M) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < M; i++) {
                sb.append(selected[i]).append(' ');
            }
            sb.deleteCharAt(sb.length() - 1);

            if (!ans.contains(sb.toString()))
                ans.add(sb.toString());
            return;
        }
        for (int i = 0; i < N; i++) {
            if (!checked[i]) {
                checked[i] = true;
                selected[cnt] = nums.get(i);
                perm(cnt + 1);
                checked[i] = false;
            }
        }
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์ „ํ˜•์ ์ธ ์ˆœ์—ด ์ฝ”๋“œ์—์„œ ์ค‘๋ณต์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด ArrayList๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
    • ์ˆ˜์—ด์ด ArrayList ans์— ์—†๋‹ค๋ฉด ์ถ”๊ฐ€ํ•˜๊ณ , ์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ans์˜ ์›์†Œ๋ฅผ ์ค„์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ด ๋ฌธ์ œ๋ฅผ ์ˆœ์—ด์ด ์•„๋‹Œ ์กฐํ•ฉ์œผ๋กœ ํ’€๋‹ค๊ฐ€ ์˜ˆ์ œ 2๋ฒˆ์—์„œ ์ž˜๋ชป๋๋‹ค๋Š” ๊ฑธ ์•Œ์•„์ฑ˜๋‹ค.
  • ๋ฌธ์ œ์—์„œ ์–ธ๊ธ‰ํ•œ ์‚ฌ์ „์‹ ์ •๋ ฌ์„ ์œ„ํ•ด ans๋ฅผ ArrayList๊ฐ€ ์•„๋‹Œ TreeSet์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๊ฐ€ ํ‹€๋ ธ๋‹ค.
    • ์ˆ˜์—ด์„ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์ „์‹ ์ •๋ ฌํ•˜๋ฉด, ์›์†Œ์˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ 10์˜ ์ž๋ฆฌ ์ด์ƒ์ด๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธด๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด 3 2 / 10 10 9 ๋ผ๋ฉด, 9 10 / 10 9 / 10 10 ์ด์–ด์•ผ ํ•˜๋Š”๋ฐ,
      ๋ฌธ์ž์—ด๋กœ ์ •๋ ฌํ•˜๋ฉด 10 10 / 10 9 / 9 10 ์ด ๋‚˜์˜จ๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1238 : ํŒŒํ‹ฐ  (0) 2023.06.27
BOJ_1167 : ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„  (0) 2023.06.25
BOJ_1043 : ๊ฑฐ์ง“๋ง  (0) 2023.06.09
BOJ_1149 : RGB๊ฑฐ๋ฆฌ  (0) 2023.06.08
Lv.1 : ๊ณต์› ์‚ฐ์ฑ…  (0) 2023.04.26