본문 바로가기
ALGORITHM/백준

[BOJ/PYTHON] 15665. N과 M (11), 15666. N과 M (12)

by 뭉망뭉 2023. 7. 27.

백준 문제 링크: https://www.acmicpc.net/problem/15665

문제 요약

N개의 자연수 중에서 M개를 고른 수열

수열은 사전 순으로 증가하는 순서로 출력

같은 수를 여러 번 골라도 된다.

중복되는 수열을 여러 번 출력하면 안됨

핵심 아이디어

9번 문제 풀이에서 if i not in array 를 지워줬다.

풀이

# silver3-15665. N과 M (11)

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
nums = list(map(int, input().split()))

nums.sort()
array = []

def back():
    if len(array) == m:
        for i in array:
            print(nums[i], end=' ')
        print()
        return
    last_num = 0
    for i in range(n): # 인덱스        
        if nums[i] != last_num:
            array.append(i)
            last_num = nums[i]
            back()
            array.pop()

back()

실행 시간

메모리 31256KB, 시간 31256ms (python3)

 

 

 

 

 


 

 

 

백준 문제 링크: https://www.acmicpc.net/problem/15666

문제 요약

N개의 자연수 중에서 M개를 고른 수열

수열은 사전 순으로 증가하는 순서로 출력

고른 수열은 비내림차순이어야 한다.

중복되는 수열을 여러 번 출력하면 안됨

고른 수열은 비내림차순

핵심 아이디어

10번 풀이에서 if i not in array를 지워줬다.

풀이

# silver3-15666. N과 M (12)

import sys
input = sys.stdin.readline

# N개의 자연수 중에서 M개를 고른 수열
# 수열은 사전 순으로 증가하는 순서로 출력
# 같은 수를 여러 번 골라도 된다.
# 중복되는 수열을 여러 번 출력하면 안됨
# 고른 수열은 비내림차순

n, m = map(int, input().split())
nums = list(map(int, input().split()))

nums.sort()
array = []

def back(idx):
    if len(array) == m:
        for i in array:
            print(nums[i], end=' ')
        print()
        return
    last_num = 0
    for i in range(idx, n): 
        if nums[i] != last_num:
            array.append(i)
            last_num = nums[i]
            back(i)
            array.pop()

back(0)

실행 시간

메모리 31256KB, 시간 52ms (python3)

'ALGORITHM > 백준' 카테고리의 다른 글

[BOJ/PYTHON] 1000. A+B  (0) 2023.08.17
[BOJ/PYTHON] 11170. 0의 개수  (0) 2023.07.27
[BOJ/PYTHON] 15664. N과 M (10)  (0) 2023.07.27
[BOJ/PYTHON] 15663. N과 M (9)  (0) 2023.07.27
[BOJ/PYTHON] 15657. N과 M (8)  (0) 2023.07.27

댓글