[백준] N과 M (2)

개발자 P군·2025년 6월 23일

백준

목록 보기
31/57
post-thumbnail

🔗 문제 보기 - [백준] N과 M (2)

📖 문제

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
  • 고른 수열은 오름차순이어야 한다.

✍ 입력

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

📄 출력

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

✅ 코드

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.StringTokenizer;  
  
public class Main {  
    static StringBuilder sb = new StringBuilder();  
    static int n, m;  
    static int[] arr;  
  
    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringTokenizer st = new StringTokenizer(br.readLine());  
        n = Integer.parseInt(st.nextToken());  
        m = Integer.parseInt(st.nextToken());  
        arr = new int[m];  
  
        backtracking(1, 0);  
  
        System.out.println(sb);  
  
    }  
  
    public static void backtracking(int val, int depth) {  
        if(depth == m) {  
            for(int i = 0; i < m; i++) {  
                sb.append(arr[i]).append(" ");  
            }  
            sb.append("\n");  
  
            return;  
        }
        
        for(int i = val; i <= n; i++) {  
            arr[depth] = i;  
            backtracking(i + 1,depth + 1);  
        }
    }  
}

🧩 코드풀이

  1. 현재 탐색하는 숫자 val과 선택된 길이depth를 인자값으로 갖는 메소드 backtracking를 호출합니다.
  2. 입력된 val부터 순차적으로 탐색하여 depthm과 동일할때 배열 arr에 담아뒀던 값들을 차례대로 출력해줍니다.
profile
문제를 발견하고 해결하는 과정을 통해 얻은 새로운 지식을 공유하고자 합니다.

0개의 댓글