ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 조합
    STUDYING/Algorithm 2021. 10. 5. 14:33
    728x90

    조합

    1. For문 사용 ( n이 정해져 있을 때)
    public class 조합_for {
        public static void main(String[] args) {
            int[] arr = {1, 3, 5, 7, 9};
    
            // 5C3 arr의 5개 원소중 임의의 3개 선택
            for (int i = 0; i < arr.length - 2; i++)
                for (int j = i + 1; j < arr.length - 1; j++)
                    for (int k = j + 1; k < arr.length; k++)
                        System.out.println(arr[i] + " " + arr[j] + " " + arr[k]);
        }
    }
    1. 재귀사용
    import java.util.Arrays;
    
    public class 조합_재귀 {
    
        public static int[] arr = { 1, 3, 5, 7, 9 };
        public static int[] trr; // 선택한 원소를 저장할 배열
    
        public static void main(String[] args) {
            int n = arr.length;
            int r = 3;
            trr = new int[r];
    
            comb(n, r);
        }
    
        public static void comb(int n, int r) {
            if (r == 0) { // 종료파트
                System.out.println(Arrays.toString(trr));
            } else if (n < r) {
                return; // 조합 규칙에 벗어남 nCr! n개중에 r개뽑을때, r이 더 클 수 없음.
            } else { // 재귀파트
                trr[r - 1] = arr[n - 1];
                comb(n - 1, r - 1);
                comb(n - 1, r);
            }
        }
    }
    1. 비트마스크 사용
    public class 조합_비트마스크 {
    
        public static char[] src = {'A', 'B', 'C', 'D', 'E'};
        public static void main(String[] args) {
    
            // 3개 뽑기
            for (int i = 0; i < 1 << src.length; i++) {
                  // true가 3개인것 뽑기
                if(Integer.bitCount(i) == 3) {
                    for (int j = 0; j < src.length; j++) {
                        if ( (i & (1 << j)) > 0) {
                            System.out.print(src[j] + " ");
                        }
                    }
                    System.out.println();
                }
            }
        }
    }

     

    'STUDYING > Algorithm' 카테고리의 다른 글

    재귀  (0) 2021.10.14
    [Programmers] H-Index  (0) 2021.09.27
    [Programmers] 경주로 건설  (0) 2021.09.27
    [Programmers] 자연수 뒤집어 배열로 만들기  (0) 2021.09.27
    [Programmers] 수박수박수박수박수박수?  (0) 2021.09.27
Designed by Tistory.