목록전체 글 (255)
-
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ccFGwO/btrfTHrYJym/KHPv5Um5mGprbQuNjlxKek/img.png)
# 주소 https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net # 문제 # 문제 해설 및 코드 리뷰 import java.util.*; public class Main { public static boolean[] visit; public static int[] arr; public static int N, M; public static int[] ans; public static StringBuilder sb = new StringBuil..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cDOxHS/btrfPB5QInW/lianrCeViObWYj0reiCpP1/img.png)
# 주소 https://www.acmicpc.net/submit/15652/33669457 로그인 www.acmicpc.net # 문제 # 문제 해석 저번 문제처럼 간단했다. 이번엔 중복을 허용하여 비내림차순(중복허용하여 오름차순)으로 경우의 수를 구하는 것이다. 특히, t = i라고 선언하고 for문을 i = t 부터 시작점을 잡아야 두번째 항, 세번째 항의 값을 구할 때 이전 위치의 항보다 작지 않은 값을 가질 수 있다. 코드로 보면 빠르게 이해할 수 있을 것이다. import java.util.*; public class Main { public static int[] arr; public static int N, M; public static StringBuilder sb = new StringB..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3NcqT/btrfPXAOJr6/BUaCkcFcD5onkCjVrHkWr0/img.png)
# 주소 www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net # 문제 # 문제 분석 이번에도 백트래킹을 이용하여 문제를 해결해야 합니다. 이번엔 저번 문제처럼 간단히 해결할 수 있습니다. 다만 중복을 허용하여 경우의 수를 따지는 것이므로 코드를 작성할 때 arr의 값은 i로 통일하되 arr[depth +1]만 해주어 이전 문제와 마찬가지로 depth == M일 때에만 출력하고 return 하는 방식을 취했습니다. 따라서 dfs함수를 작성하는 방식에 있어서 인수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bLtEiI/btrfMOSbkgW/cZN2ftK90ybudpgH2DCzFK/img.png)
# 코드 해설 이번엔 저번 문제의 N과 M(1) 보다 훨씬 간단한 문제입니다. 중복된 수열에 대해서는 따로 신경 쓸 필요가 없기 때문에 단순히 for문에 대해서 증가되는 수열 값만 출력해주면 되겠습니다. import java.util.Scanner; public class Main { public static int[] arr; public static int N, M; public static void main(String[] args) { Scanner in = new Scanner(System.in); N = in.nextInt(); M = in.nextInt(); arr = new int[M]; dfs(1, 0); } public static void dfs(int at, int depth) { ..