[백준] 15649 (실버3) - 순열

AI·2025년 9월 5일

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

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
    static int N, M;
    static int[] arr;
    static boolean[] selected;
    static BufferedWriter bw;

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

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

        arr  = new int[M];
        selected = new boolean[N+1];

        perm(0);

        bw.flush();
        bw.close();
        br.close();
    }

    static void perm(int n) throws Exception{

        if(n == M){
            for(int i=0;i<M;i++){
                bw.write(Integer.toString(arr[i]));
                bw.write(' ');
            }
            bw.write('\n');
            return;
        }

        for(int i=1;i<=N;i++){
            if(selected[i]) continue;

            arr[n] = i;
            selected[i] = true;
            perm(n+1);
            selected[i]=false;
        }

    }
}

다른 답안

package bj;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 55492    1680
public class BJ_N과M_1 {
    static int N, M;
    static int[] tgt;
    static boolean[] select;
    
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        
        src = new int[N + 1]; // 0 dummy, 1,2..자연수표현
        select = new boolean[N + 1];
        tgt = new int[M];
        
        perm(0);
    }
    static void perm(int tgtIdx) {
        // 기저 조건
        if( tgtIdx == M ) {
            // 순열 완성, complete code
            // 옆으로 한개씩 공백과 함께 출력
            for (int n : tgt) {
                System.out.print(n + " ");
            }
            System.out.println(); // 개행
            return;
        }
        
        for (int i = 1; i <= N; i++) {
            if( select[i] ) continue;
            
            tgt[tgtIdx] = i;
            
            select[i] = true;
            perm(tgtIdx + 1);
            select[i] = false;
        }
    }
}

====

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// src 배열 X
// StringBuilder 추가
// 23128    236
public class BJ_N과M_1_2 {
    static int N, M;
    static int[] tgt;
    static boolean[] select;
    static StringBuilder sb;
    
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        
        select = new boolean[N + 1];
        tgt = new int[M];
        
        sb = new StringBuilder();
        
        perm(0);
        System.out.println(sb);
    }
    static void perm(int tgtIdx) {
        // 기저 조건
        if( tgtIdx == M ) {
            // 순열 완성, complete code
            // 옆으로 한개씩 공백과 함께 출력
            for (int n : tgt) {
                sb.append(n).append(" ");
            }
            sb.append("\n"); // 개행
            return;
        }
        
        for (int i = 1; i <= N; i++) {
            if( select[i] ) continue;
            
            tgt[tgtIdx] = i; // src[i] 대신 index i 사용
            
            select[i] = true;
            perm(tgtIdx + 1);
            select[i] = false;
        }
    }
}

0개의 댓글