티스토리 뷰

알고리즘

백준 15649 - 파이썬

취뽀가자!! 2023. 5. 29. 20:23

https://www.acmicpc.net/problem/15649

 

15649번: N과 M (1)

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

www.acmicpc.net

문제 풀이

백트래킹을 이용하여 푸는 문제이다. 두 자리수만 출력하는 경우에는 이중 반복문을 통해 해당 값을 리스트에 저장 후 출력하는 경우까지는 생각하여 풀었지만, 길이가 m인 경우를 어떻게 백트래킹으로 구현하면 될지 몰라 다른 사람의 풀이를 찾아 보았다. 

 

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

s = [] # 출력할 숫자 저장할 리스트

def dfs():
  if len(s) == m: # m의 길이와 일치하면 출력
    print(' '.join(map(str, s)))
    return

  for i in range(1, n + 1):
    if i not in s: # s리스트 안에 없는 숫자는 추가
      s.append(i)
      dfs() # 없는 숫자 저장 후 다시 함수 재호출
      s.pop() # 호출이 모두 완료된 후 함수가 종료되면서 s에 있는 값 전부 pop

dfs()

 

아직 백트래킹에 대한 두번째 문제이기 때문에 대충 어떻게 풀면 되겠다는 감만 잡고, 내 생각이 맞는지 바로 다른 사람의 풀이를 보며 확인했다. 방향성에 대해서는 일치했기에 실력이 조금 늘었다 볼 수 있을거 같다. 그래도 아직 직접 백트래킹을 적용하여 풀기에는 역부족이니 좀 더 노력해야 되겠다.

'알고리즘' 카테고리의 다른 글

백준 2206 - 파이썬  (0) 2023.06.06
백준 14888 - 파이썬  (0) 2023.06.04
백준 9663 - 파이썬  (0) 2023.05.28
백준 7562 - 파이썬  (0) 2023.05.27
백준 18405 - 파이썬  (2) 2023.05.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함