[백준] N과 M시리즈

FeelingXD·2023년 12월 27일
0

문제풀이

목록 보기
34/34
post-thumbnail

백트래킹의 기본기를 연습 할 수 있는 좋은 문제집 시리즈이다. 😅 순열 ,조합과 여러가지 상황에 대해 접근법을 연습 할 수 있다.

시리즈 문제집 이므로 대표적으로 (1) 번 문제에대해 다루고 접근법에대해서 간략히 작성 합니다. 👀

문제집 바로가기

❓ Problem

🤔 How

시리즈 여러가지 조건에대해서 풀이 접근법

  • 비내림차순인 수열만 고르는경우
for i in range(n):
	if li and li[-1]>i:
    	continue
   # 현재 임시 리스트가 있을경우 리스트 마지막값이 현재 i 의값보다 클경우 pass한다.
  • 수열이 주어지는경우
numbers=[list(map(int,input().split())]
for i in range(len(numbers):
	# index 접근을 통해 문제를 해결한다.
    numbers[i]
  • N개를 선택해서 만든경우
# 이경우 만들어진 li의 길이를 조건에 추가한다.

if len(li)== target:
	answer.append(li)
  • 같은 수를 사용할수없는경우
# 이경우에는 방문여부를 체크하는 visited 배열을 따로 만들어준다.
for i in range(n):
	if not visited[i]:
    	visited[i]=True
    	back(li+[i])
        visited[i]=False

❗ Solve

# N과 M(1) 
import sys
input =sys.stdin.readline
answer=[]
def back(li):
    global M,N
    if len(li)==M:
        answer.append(li[:])
        return
    else:
        for i in range(1,N+1):
            if i in li:
                continue
            back(li+[i])
            
def solution():
    global N,M,answer
    N,M=map(int,input().split())
    back([])
    for v in answer:
        print(*v)
    pass
if __name__=="__main__": # 실행되는 부분
    solution()
    pass
profile
tistory로 이사갑니다. :) https://feelingxd.tistory.com/

0개의 댓글