Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- coding test
- Stack
- 이스케이프 문자
- 메모리구조
- 윤성우 열혈자료구조
- 알기쉬운 알고리즘
- 윤성우의 열혈 자료구조
- R
- Serialization
- 이것이 자바다
- datastructure
- Algorithm
- C programming
- C 언어 코딩 도장
- buffer
- Selection Sorting
- Graph
- s
- insertion sort
- stream
- list 컬렉션
- 혼자 공부하는 C언어
- JSON
Archives
- Today
- Total
Engineering Note
[BOJ:15649] N과 M (1) 본문
Link : https://www.acmicpc.net/problem/15649
Note
문제를 잘 읽고 이해하면 쉽게 풀 수 있는 문제다.
1부터 N까지의 자연수 중에서 중복 없이 M개를 고른 수열을 출력하는 프로그램을 작성하면 된다. 예를 들면 N이 4고 M이 2라면 1부터 4까지 자연수 중에서 중복 없이 2개를 고른 수열을 구하면 된다.
nums = [1,2,3,4] 수가 있고 2개를 고르는 방법을 나타내면 다음과 같다.
1부터 N에서 수를 하나 추출하고 다시 중복 없이 1부터 N에서 수를 하나 추출하는 과정을 재귀적으로 구현하면된다.
1번의 과정은 추출한 수가 M개가 될때까지 반복 수행한다.
Code
import sys
def choose(set_nums):
global answers,n,m
if len(set_nums) == m:
for num in set_nums:
print(num,end=" ")
print()
else:
for i in range(1,n+1):
if checked[i]:continue
checked[i] = True
set_nums.append(i)
choose(set_nums.copy())
checked[i] = False
set_nums.remove(i)
input = sys.stdin.readline
n, m = map(int,input().split())
set_nums = []
checked = [False for _ in range(n+1)]
choose(set_nums)
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ:1002] 터렛 (0) | 2022.05.06 |
---|---|
[BOJ:16198] 에너지 모으기 (0) | 2022.05.05 |
[BOJ:1463] 1로 만들기 (0) | 2022.04.30 |
[BOJ:1325] 효율적인 해킹 (0) | 2022.04.28 |
[BOJ:11719] 그대로 출력하기 2 (0) | 2021.11.18 |
Comments