Idea ¶
AnEasyProblem/강소현과 비슷해서 복붙함.
(ex) k = 7일 때, 1 여섯개와 0 한개로 이루어진 이진수를 내림차순으로 정렬
1111110
1111101
1111011
1110111
1101111
1011111
0111111
1111101
1111011
1110111
1101111
1011111
0111111
k = 8이면 1 여섯개와 0 두개로 이루어진 이진수를 내림차순으로 정렬 ... k = 12까지 비슷하게 전개됨
Source ¶
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNextInt()){ int k = sc.nextInt(); if(k==0) System.exit(0); int[] S = new int [k]; for(int i=0; i<k; i++) S[i] = sc.nextInt(); printPossibleNum(S); } } private static void printPossibleNum(int[] S) { int num = (int) (Math.pow(2,S.length-6)-1); while(num < Math.pow(2, S.length)){ int [] bin = decToBin(num); int count = 0; for(int i=0; i<S.length; i++){ if(bin[S.length-i-1]==0){ if(++count != 6) System.out.print(S[i]+" "); else System.out.println(S[i]); } } num = increase(bin); } System.out.println(""); } private static int increase(int[] bin){ int num = 0, count=0; while(num<bin.length-1){ if(bin[num] == 1){ if(bin[num+1] == 0){ bin[num+1] = 1; bin[num] = 0; break; }else{ bin[num] = 0; bin[count++] = 1; } } num++; } int result = 0; for(int k=0; k<bin.length;k++){ result += bin[k]*Math.pow(2,k); } return result; } private static int[] decToBin(int i){ int [] temp = new int[13]; int num = 0; while(i>0){ temp[num++] = i%2; i = i/2; } return temp; } }