[백준] 15650번: N과 M (2)

ByWindow·2022년 2월 7일
0

Algorithm

목록 보기
77/104
post-thumbnail

📝 문제

백트레킹으로 사용한 숫자인지 표시를 해야하는데 문제를 풀다보니 굳이 해야하나? 하는 생각이 들었다
어차피 오름차순의 순열이고 이전의 숫자보다 큰 숫자들 중에서 다음 수를 선택하는거니까
필요 없다는 생각이 들었다.
그래서 그냥 재귀 알고리즘으로 코드를 짰다.

📌 코드

package Baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ15650 {

  static int n,m;
  static StringBuilder sb = new StringBuilder();

  static void dfs(int cur, int cnt, String str){
    if(cnt == m) {
      sb.append(str).append("\n");
      return;
    }
    if(cur > n) return;
    for(int i = cur+1; i <= n; i++){
      String curStr = str + " " + i;
      dfs(i, cnt+1, curStr);
    }
  }

  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());

    for(int i = 1; i <= n+1-m; i++){
      dfs(i, 1, String.valueOf(i));
    }
    System.out.println(sb.toString());
  }
}
profile
step by step...my devlog

0개의 댓글