15649번: N과 M (1)백준/문제2023. 10. 4. 11:15
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/15649
언어 : Kotlin
문제 설명 :
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
- 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
- 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
- 수열은 사전 순으로 증가하는 순서로 출력해야 한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 512MB
입출력 예 :
입력 | 출력 |
3 1 | 1 2 3 |
4 2 | 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4 4 1 4 2 4 3 |
4 4 | 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 2 4 1 3 2 4 3 1 3 1 2 4 3 1 4 2 3 2 1 4 3 2 4 1 3 4 1 2 3 4 2 1 4 1 2 3 4 1 3 2 4 2 1 3 4 2 3 1 4 3 1 2 4 3 2 1 |
풀이 :
import java.io.BufferedWriter
import java.io.OutputStreamWriter
var numList = mutableListOf<String>()
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val (n, m) = readLine().split(" ").map { it.toInt() }
val arr = (1 .. n).map { it }
permutation(0, m, BooleanArray(arr.size), arr, mutableListOf())
numList.forEach{ bw.appendLine(it) }
bw.flush()
bw.close()
}
fun permutation(cnt: Int, depth: Int, visited: BooleanArray, arr: List<Int>, list: MutableList<Int>) {
if (list.size == depth) {
val temp = list.joinToString(" ")
numList += temp
}
for (i in arr.indices) {
if (visited[i]) continue
visited[i] = true
list.add(arr[i])
permutation(cnt, depth, visited, arr, list)
list.removeAt(list.lastIndex)
visited[i] = false
}
}
'백준 > 문제' 카테고리의 다른 글
9935번: 문자열 폭발 (0) | 2023.10.06 |
---|---|
4999번: 아! (1) | 2023.10.05 |
1439번: 뒤집기 (0) | 2023.09.27 |
11656번: 접미사 배열 (0) | 2023.09.27 |
17413번: 단어 뒤집기 2 (0) | 2023.09.26 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!