15650번: N과M(2)

2023. 3. 7. 13:54· 알고리즘/백준
728x90
 

15650번: N과 M (2)

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

www.acmicpc.net

15649번 N과M(1) 문제와 거의 똑같지만 다른 점은, 

고른 수열이 오름차순이어야 한다는 점!

 


# 15650번: N과M(2)

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

visited = [False] * (n+1)
result = [0]

temp = 0

def backTracking(num):
    if num == m:
        print(*result[1:])
        return
    
    for i in range(1, n+1):
        if not visited[i] and i > max(result):
            visited[i] = True
            result.append(i)
            backTracking(num+1)
            visited[i] = False
            result.pop()


backTracking(0)

backTracking 함수를 돌면서 수열에 들어갈 숫자를 고를 때, 해당 숫자(i)가 지금까지 들어간 수열의 최댓값보다 큰 경우에만 숫자를 넣도록 한다.

result 배열을 0으로 초기화해줬으므로, 0은 빼고 출력해야 한다.

그러므로 result[1:]을 출력한다.

 


다른 풀이

# 15650번: N과M(2)

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

visited = [False] * (n+1)
result = []

temp = 0

def backTracking(num):
    if len(result) == m:
        print(*result)
        return
    
    for i in range(num, n+1):
        if not visited[i]:
            visited[i] = True
            result.append(i)
            backTracking(i+1)
            visited[i] = False
            result.pop()


backTracking(1)

굳이 최댓값을 비교하는게 아니라, backTracking 재귀를 돌 때, 수열에 들어갈 숫자 + 1을 재귀로 돌면, 최댓값을 비교할 필요 없이 오름차순으로 수열을 만들 수 있다.

그리고 종료 조건은 N과M(1) 문제와 다르게, 출력할 수열의 길이가 m이 되는 경우에 result를 출력하고 종료한다.

 


참고

 

[Python/파이썬] 백준 알고리즘 15649번 - N과 M (1) (BackTracking)

1. 아이디어 for문으로 1부터 N까지 돌리면서 이미 선택한 값이 아닌 경우 선택 M개 선택하는 경우 출력하고 return 하나의 리스트를 사용할 것이고 return해서 위 depth로 올라왔을 때 그대로 append만

kbwplace.tistory.com

 

728x90

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

15652번: N과M(4)  (0) 2023.03.08
15651번: N과M(3)  (0) 2023.03.07
15649번: N과 M(1)  (0) 2023.03.07
1002번: 터렛  (0) 2023.03.03
2447번: 별 찍기 - 10  (0) 2023.02.28
'알고리즘/백준' 카테고리의 다른 글
  • 15652번: N과M(4)
  • 15651번: N과M(3)
  • 15649번: N과 M(1)
  • 1002번: 터렛
happenundo
happenundo
happenundo
2023~ 개발블로그
happenundo
전체
오늘
어제
  • 분류 전체보기 (207)
    • TIL (3)
    • 알고리즘 (188)
      • 프로그래머스 (47)
      • 백준 (69)
      • 파이썬 문법 (11)
      • 이것이 코딩테스트다 (46)
      • 알고리즘 노트 (6)
      • SQL (8)
    • Spring (4)
      • Spring 입문 (2)
      • 개인 프로젝트 (1)
      • 인텔리제이 (1)
    • CS (8)
      • DB (2)
      • 네트워크 (1)
      • 그외 (5)
    • ~2022 (1)
    • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 이것이코딩테스트다
  • 스택
  • distinct
  • dfs
  • 완전탐색
  • 플로이드워셜
  • 파이썬
  • 알고리즘
  • 이코테
  • 구현
  • 재귀
  • 백트래킹
  • 괄호변환
  • 프로그래머스
  • sql
  • BinarySearch
  • 동적프로그래밍
  • 그리디
  • 우선순위큐
  • 큐
  • 정렬
  • 이진탐색
  • 다익스트라
  • deepcopy
  • 다이나믹프로그래밍
  • 최단거리
  • CS
  • DP
  • BFS
  • 백준

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
happenundo
15650번: N과M(2)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.