728x90
https://www.acmicpc.net/problem/15663
| 1 초 | 512 MB | 42476 | 21160 | 16101 | 49.263% |
문제
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- N개의 자연수 중에서 M개를 고른 수열
입력
첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.

제출 코드
import sys
input = sys.stdin.readline
def recur():
global result
check = 0
if len(num) == M:
print(*num)
return
for i in range(N):
if not vis[i] and check != lst[i]:
vis[i] = True
num.append(lst[i])
check = lst[i]
recur()
num.pop()
vis[i] = False
N, M = map(int, input().split())
lst = list(map(int, input().split()))
vis = [False] * N
num = []
lst.sort()
recur()
기본 구조는 잘 설계하고 check 를 쓰는 과정이 오래걸렸다.
체크포인트를 설계하는게 늘 어렵다..
9, 9 를 내보내는게 어려웠는데 1, 7, 9, 9 일 때, 세번째 9를 들고있을 때 check는 7이다.
원래 들고있는 9는 if문에서 걸러지게 되고 9, 1 / 9, 7, / 9, 9 를 내보낼 수 있다.
'알고리즘 > 백준' 카테고리의 다른 글
| [BOJ#15686] 치킨 배달 (1) | 2024.06.07 |
|---|---|
| [BOJ#1149] RGB거리 (1) | 2024.06.04 |
| [BOJ#19637] IF문 좀 대신 써줘 (0) | 2024.05.28 |
| [BOJ#1926] 그림 (0) | 2024.05.28 |
| [BOJ#14889] 스타트와 링크 (0) | 2024.05.28 |