백준 15650번 자바

2021. 4. 5. 00:48카테고리 없음

백준 15650(n과m 순열 문제)

  • 링크 문제

  • 풀이

    얼마전에 순열의 기본 개념을 공부했던 터라 순열문제를 골라서 풀었다. n과m 문제는 1,2번으로 구성되어있는데 첫 번째 문제는 순열, 두 번째 문제는 조합으로 풀면되는 문제였다. 순열의 개념은 개념정리편에서 정리를 했기 때문에 코드에서 간단한 주석으로 설명하겠다.

  • 코드

    private static void dfs(int N, int M, int depth) {//n과m 1번 문제
            if (depth == M) {
                for (int num : arr) {
                    sb.append(num).append(" ");
                }
                sb.append("\n");
                return;//여기서 이 호출된 함수를 끝내야 depth의 outofInedex에러가 안난다.
            }
    
            for (int i=1; i<=N; i++) {//visited 의 index가 0,1,2,3 이렇게 시작되는데 1,2,3,4로 보면 편함
                if (!visited[i]) {
                    visited[i] = true;
                    arr[depth] = i;
                    dfs(N,M,depth + 1);
                    visited[i] = false;
                }
            }
        }
    
        private static void dfs2(int depth,int currentLocation) { //n과m 2번 문제
            if (depth == M) {
                for (int num : arr) {
                    sb.append(num).append(" ");
                }
                sb.append("\n");
                return;//여기서 이 호출된 함수를 끝내야 depth의 outofInedex에러가 안난다.
            }
            for (int i=currentLocation; i<=N; i++) {
                arr[depth] = i;
                dfs2(depth + 1,i+1);
            }
    
        }