https://www.acmicpc.net/problem/15654
15654번: N과 M (5)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
백트레킹 개념을 이용하여 문제 풀이를 진행했다.
이때 결과값은 정렬된 상태로 출력해주어야 하므로, go 함수를 호출하기 전에 li를 정렬해준다.
M개를 추출을 해야하는 상황에서, arr의 길이가 M과 같아지는 경우(추출 수 충족) 출력 형식에 맞게 출력을 진행해준다.
만약 아직 조건을 충족시키지 못했다면, 아직 arr에 아무것도 없거나 1,1 과 같이 중복 추출이 일어나지 않는 경우
li의 인자를 하나씩 넣어서 go 함수의 재귀호출을 진행해 조건을 만족하는 경우 결과값을 출력한다.
input = __import__('sys').stdin.readline
def go(arr):
if len(arr) == M:
print(' '.join(map(str, arr)))
return
for i in range(N):
if len(arr) == 0 or li[i] not in arr:
arr.append(li[i])
go(arr)
arr.pop()
N, M = map(int, input().split())
li = list(map(int, input().split()))
li.sort()
go([])
'Koala - 9기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/node.js] 18429번 근손실 (0) | 2023.01.08 |
---|---|
[BOJ/Python] 1051 숫자 정사각형 (0) | 2023.01.08 |
[백준/Python] 20410번 추첨상 사수 대작전! (Easy) (0) | 2023.01.08 |
[백준/C++] 14888번 연산자 끼워넣기 (0) | 2023.01.07 |
[백준/python] 6603번 로또 (0) | 2023.01.07 |