4/27 스터디 문제

hyejun sang·2022년 4월 27일
0

알고리즘

목록 보기
24/28
post-thumbnail

1번 문제.
https://www.acmicpc.net/problem/15651
-> N과 M(3)

1번 문제 풀이 코드

import sys

n, m = map(int, sys.stdin.readline().rstrip().split())
# 값들을 담아줄 리스트
list = []

def dfs():
    # 리스트의 길이가 m인 숫자들을 출력한다.
    if len(list) == m:
        # 리스트 값이 '1', '2' ... 이런 형식이므로 join을 이용해 1 2 형식으로 바꿔줌
        print(' '.join(map(str, list)))
        return

    # 1부터 n까지의 숫자들로 반복문 실행
    for i in range(1, n+1):
        # 리스트에 i값을 넣어주고
        list.append(i)
        # 리스트 안의 숫자들을 출력해줌
        dfs()
        # 출력된 값들은 제거한다.
        list.pop()

dfs()

=======================================================

2번 문제.
https://www.acmicpc.net/problem/15652
-> N과 M(4)

2번 문제 풀이 코드

import sys

n, m = map(int, sys.stdin.readline().rstrip().split())
# 값들을 담아줄 리스트
list = []

# 시작 값의 변화를 통해 비내림순열을 만든다.
def dfs(start):
    # 리스트의 길이가 m인 숫자들을 출력한다.
    if len(list) == m:
        # 리스트 값이 '1', '2' ... 이런 형식이므로 join을 이용해 1 2 형식으로 바꿔줌
        print(' '.join(map(str, list)))
        return

    # start 값부터 n까지의 숫자들로 반복문 실행
    for i in range(start, n+1):
        # 리스트에 값 넣기
        list.append(i)
        # 함수에 숫자를 하나씩 올리면서 값을 출력
        dfs(i)
        # 출력된 값은 제거
        list.pop()

# 1부터 시작
dfs(1)

=======================================================
백트래킹을 사용해서 문제를 푸는건 정말 많이 헷갈린다... 되게 단순한 것도.ㅎ

0개의 댓글