본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 15650번: N과 M (2) -Python

728x90

[백준알고리즘] 15650번: N과 M (2) -Python

https://www.acmicpc.net/problem/15650

 

15650번: N과 M (2)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다.

www.acmicpc.net

저번에 풀었던 N과 M (1)의 다음 문제이다.

조건을 보면 "고른 수열은 오름차순이다."가 추가되었다.

별로 추가된 것도 없고 그냥 풀었다. itertools를 쓰면서 이 추가된 조건을 처리하려 하는 것보다 그냥 짜는 게 훨씬 쉬워 보여서 그냥 짰다. 얼른 백 트랙킹 마무리 지어야겠다.

 

import sys

def testCase():
    input_val = list(map(int, sys.stdin.readline().split()))
    global N, M
    N, M = input_val

def solve(remain, result=[]):
    if len(result) == M:
        for r in result:
            print(r, end=' ')
        print()
        return
        
    for idx in range(len(remain)):
        result.append(remain[idx])
        solve(remain[idx+1:], result)
        result.pop(-1)

if __name__ == "__main__":
    testCase()
    solve(range(1, N+1))

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90