| 제출 1 |
# 백트래킹
import sys
input = sys.stdin.readline
#from itertools import permutations
N, M = map(int, input().split())
nums = sorted(list(map(int, input().split())))
keep = []
def recur(x):
if len(keep) == M:
print(" ".join(list(map(str, keep))))
return
for i in range(x, len(nums)):
if nums[i] not in keep:
keep.append(nums[i])
recur(i+1)
keep.pop()
recur(0)
: 으아 또 이틀 쉬고 보니까 한 번에 구조가 안 읽혔다. 차근차근 되짚어가니 풀 수 있었다.
: 해당 N과M의 키포인트는 정렬된 수 기준으로 한 번 스캔하고 각 스캔된 수의 다음 수부터 끝까지 재귀적으로 쭉 스캔하는 식이다.
: 처음 for문으로 기본 배열을 쭉 훑고 각각 들어갈 때 본인을 포함 안 하기 위해서, if nums[i] not in keep:구문을 넣어줬다. 그리고 해당 파트에서 현재 기준 값의 다음 값부터 끝까지 재귀적으로 돌고 프린트 찍힐 때마다 pop으로 꺼내 준다..
: 앞선 문제들과 거의 비슷하지만 큰 인덱스 범위를 잡아주는 데서 특징적인 문제였다.
| 제출 2 |
# combinations 사용 / 중복조합(순서O)
import sys
input = sys.stdin.readline
from itertools import combinations
N, M = map(int, input().split())
nums = sorted(list(map(int, input().split())))
for c in list(combinations(nums, M)):
print(*c)
: 순서를 고려해서 중복 안 되게 뽑는 중복조합 사용 (combinations 메서드)
: combinations까지 써보니까 아무리 생각해도 이런 문제 앞의 N과M에서 했는데? 싶었는데 답, 로직은 같은데 그 때는 값이 있는 배열 인풋이 없었고 지금은 있는, 그런 차이였다. ( N과M(2) )
'CodingTest > Baekjun Online Judge' 카테고리의 다른 글
[ BOJ / 파이썬 ] 15657 N과M(8) (0) | 2022.08.29 |
---|---|
[ BOJ / 파이썬 ] 15656 N과M(7) (0) | 2022.08.29 |
[ BOJ / 파이썬 ] 15654 N과M (5) (0) | 2022.08.26 |
[ BOJ / 파이썬 ] 15652 N과 M(4) (0) | 2022.08.26 |
[ BOJ / 파이썬 ] 15651 N과 M(3) (0) | 2022.08.26 |