4. 중복 순열

2024. 2. 3. 22:22·알고리즘/DFS, BFS 활용

1. 문제

1부터 N까지 번호가 적힌 구슬이 있습니다.

이 중 중복을 허락하여 M번을 뽑아 일렬로 나열 하는 방법을 모두 출력합니다.

 

자연수 N과 M이 주어진다. (3 <= N <= 10), (2 <= M <= n)

 

입력 예시 1

3 2

 

출력 예시 1

1 1

 

 

2 - 1. 나의 풀이

맨 처음 풀 때는 매우 어렵게 풀었다.

 

String에 1~n까지 옆으로 붙인 다음

DFS를 호출

DFS호출이 끝나면 그전에 저장해둔 tmp으로 롤백

 

지금 보면 어떻게 이런 생각으로 풀었나 싶음

강의를 수강하고 1주뒤에 다시 풀었다.

 

2 - 2. 나의 코드

package DFS_BFS_levelup;
import java.util.Scanner;

public class dfs_04_myself {
    public static int n;
    public static int m; //m단계 까지만
    public static String answer = "";

    //L은 단계 (m까지)
    public static void DFS(int L) {
        if(L == m){
            System.out.println(answer);
        }else{
            for (int i = 1; i <= n; i++) {
                String tmp = answer;
                answer = answer + i + " ";
                DFS(L + 1);
                answer = tmp;
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();


        DFS(0);



    }
}

 

 

3 - 1. 강의 풀이

계층 L이 m까지 증가하며 DFS 재귀를 호출하는 건 같음

하지만 더 직관적으로 보기 쉽게 풀었다.

 

크기가 m인 int 배열(pm or arr)을 설정하고

pm[L] = i; 후 재귀 호출

 

3 - 2. 강의 코드

package DFS_BFS_levelup;
import java.util.*;

public class pratice_myself {
    public static int n,m;
    public static int[] arr;

    public static void DFS(int L) {
        if (L == m) {
            for(int x : arr) System.out.print(x + " ");
            System.out.println();
        }else {
            for (int i = 1; i <= n; i++) {
                arr[L] = i;
                DFS(L + 1);
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        arr = new int[m];
        DFS(0);

    }
}

 

4. 얻어갈 점

복습의 중요성

'알고리즘 > DFS, BFS 활용' 카테고리의 다른 글

6. 순열 구하기  (0) 2024.02.15
5. 동전교환  (1) 2024.02.11
3. 최대 점수 구하기(DFS)  (0) 2024.01.29
2. 바둑이 승차(DFS)  (1) 2024.01.28
1. 합이 같은 부분집합(DFS : 아마존 인터뷰)  (0) 2024.01.17
'알고리즘/DFS, BFS 활용' 카테고리의 다른 글
  • 6. 순열 구하기
  • 5. 동전교환
  • 3. 최대 점수 구하기(DFS)
  • 2. 바둑이 승차(DFS)
송우석입니다
송우석입니다
  • 송우석입니다
    송우석
    송우석입니다
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (142) N
      • JAVA (1)
      • 알고리즘 (85) N
        • 백준 (9) N
        • String(문자열) (12)
        • Array(1, 2차원 배열) (13) N
        • Two pointers, Sliding windo.. (6)
        • HashMap, TreeSet(해쉬, 정렬지원 S.. (5)
        • Stack, Queue(자료구조) (8)
        • Sorting and Searching(정렬, 이.. (10)
        • Recursive, Tree, Graph(DFS,.. (14)
        • DFS, BFS 활용 (6)
        • 다시 시작! (1)
        • 기초 수학 (1)
      • 일상 (19)
      • Github (1)
      • MSA 공부 (3)
      • 경제, 금융, 디지털, 시사 (3)
      • 라즈베리파이 (10)
      • 프로젝트에서 일어난 일 (13)
      • FrontEnd 공부 (7) N
        • React (6) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
송우석입니다
4. 중복 순열
상단으로

티스토리툴바