본문 바로가기

알고리즘/백준

[JAVA]백준_10974_모든 순열

문제 : www.acmicpc.net/problem/10974

 

10974번: 모든 순열

N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

문제 유형 : 순열(넥퍼연습하려고 품) 

 

풀이방식 : 넥퍼 

 

소스코드

package BOJ;

import java.util.Scanner;

public class BOJ_10974_모든순열_Main {

	private static int N;
	private static int[] arr;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		arr = new int[N];
		for (int i = 0; i < N; i++) {
			arr[i] = i+1;
		}
		do {
			for (int i = 0; i < N; i++) {
				if(i==N-1) System.out.println(arr[i]);
				else System.out.print(arr[i]+" ");
			}
		}while(next_permutaion());
	}

	private static boolean next_permutaion() {
		int i = N-1;
		while(i>0&&arr[i-1]>=arr[i]) --i;
		if(i==0) return false;
		
		int j = N-1;
		while(arr[i-1]>=arr[j]) --j;
		
		swap(i-1, j);
		j = N-1;
		
		while(i<j) swap(i++,j--);
		
		return true;
	}

	private static void swap(int i, int j) {
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}

}

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA]백준_13335_트럭  (0) 2021.01.20
[JAVA]백준_10819_차이를최대로  (0) 2021.01.19
[JAVA]백준_10597_순열장난  (0) 2021.01.18
[JAVA]백준_6087_레이저통신  (0) 2020.09.23
[JAVA]백준_19637_IF문좀대신써줘  (0) 2020.09.22