15655번

2022. 12. 29. 09:27·CS 이론/알고리즘
728x90

https://www.acmicpc.net/problem/15655

 

15655번: N과 M (6)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

이 문제는 15654번과 15650번을 합친 문제라고 생각할 수 있다. 풀이는 간단하다. 입력 받은 배열을 이용하여 dfs를 구현하는 것이다.

중요한 것은 중복이 없고 앞자리 수보다 작은 수는 오지 않게 만든다는 것이다. 그럼으로 15650번과 마찬가지로 at 변수를 사용하여 시작지점을 설정하여 출력하면 된다.

15650번과 같은 방식과 15654의 배열 이용 방법을 이용한 것이기 때문에 설명은 생략하려고 한다.

아래의 링크를 통해 자료를 확인해보면 좋을 것 같다.

 

https://parkjunbackend.tistory.com/22 

 

b15650번, b15651번, b15652번

https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

parkjunbackend.tistory.com

https://parkjunbackend.tistory.com/25

 

b15654번

https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수

parkjunbackend.tistory.com

 

정답코드는 아래와 같다.

package backjoon.b15655;
import java.io.*;
import java.util.*;
public class b15655 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        st=new StringTokenizer(br.readLine());
        int[] arr = new int[N];

        for(int i=0; i<N; i++){
            arr[i]= Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);
        Graph g = new Graph(N,M,arr);
        g.dfs(0,0);
        System.out.println(g.sb);
    }
}
class Graph{
    int n;
    int m;
    int[] arr;
    Stack<Integer> answer;
    StringBuilder sb;
    public Graph(int n, int m , int[] arr){
        this.n = n;
        this.m = m;
        this.arr = arr;
        answer = new Stack<>();
        sb  = new StringBuilder();
    }

    public void dfs(int at, int depth){
        if(depth==m){
            for(int i : answer){
                sb.append(i).append(" ");
            }
            sb.append("\n");
            return;
        }
        for(int i=at; i<n; i++){
            answer.add(arr[i]);
            dfs(at+1,depth+1);
            answer.pop();
            at++;
        }
    }
}
728x90

'CS 이론 > 알고리즘' 카테고리의 다른 글

15663번  (0) 2022.12.31
1003번  (2) 2022.12.29
15654번  (1) 2022.12.28
14889번  (0) 2022.12.27
15650번, 15651번, 15652번  (2) 2022.12.25
'CS 이론/알고리즘' 카테고리의 다른 글
  • 15663번
  • 1003번
  • 15654번
  • 14889번
Bello's
Bello's
개발하는 벨로
  • Bello's
    벨로의 개발일지
    Bello's
  • 전체
    오늘
    어제
    • 분류 전체보기 (199) N
      • 노예 일지 (7)
        • 스타트업 노예일지 (3)
      • CS 이론 (81)
        • 학과 수업 (4)
        • 알고리즘 (64)
        • 시스템 프로그래밍 (3)
        • 데이터 통신 (1)
        • 운영체제 (2)
        • 데이터베이스 (1)
      • project (3)
      • 나는 감자다. (4)
      • Spring (27)
      • 모각코 (45)
        • 절개와지조(모각코) (7)
        • 어쩌다보니 박준태가 조장이조 (11)
        • 어쩌다보니 박준태가 또 조장이조 (12)
      • LikeLion🦁 (20)
      • 캘리포니아 감자 (4)
      • OpenSource Contribute (1)
      • 우아한테크벨로 (1) N
        • 프리코스 회고록 (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    JPA
    회고록
    DFS
    백준
    모각코
    Spring
    그래프 순회
    티스토리챌린지
    나는 감자
    오블완
    뛰슈
    타임리프
    8기
    자바
    어렵다
    절개와지조
    프리코스
    BFS
    누적합
    감자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Bello's
15655번
상단으로

티스토리툴바