15649번: N과 M (1) (acmicpc.net)
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
풀던 코드 - 답을 찾지 못함
def nm(a, b):
empty_list = []
for i in range(1, a+1):
empty_list.append(i)
for j in range(1, len(empty_list)+1):
while j <= b:
empty_list[i].append(j)
j += 1
return empty_list
N, M = map(int, input().split())
print(nm(N, M))
빈 리스트를 만들어 i를 범위에 맞게 설정하고 i와 그 뒤에 M과 주어진 데이터들을 이용해 데이터를 추가하는 방식으로 조합을 짜보려고 했는데 방향이 아예 달랐던 것 같다.
찾아본 코드
def nnm():
if len(lst) == M:
print(' '.join(map(str, lst)))
return
for n in range(1, N+1):
if n not in lst:
lst.append(n)
nnm()
lst.pop()
N, M = map(int, input().split())
lst = []
nnm()
결과

백트래킹과 재귀함수를 같이 쓰는 코드... 배웠는데 백트래킹은 진짜 잘 못쓸거같다. if n not in lst부분이 백트래킹일까....?
재귀함수는 엄청 많이 들어봐서 이제 아는 줄 알았는데 아직도 확실히 아는건 아닌 것 같다. 파이참으로 디버깅하는건 어려워서 파이썬튜터에 돌렸더니 90퍼센트는 이해한 것 같다! 진짜 몇번만 더하면 재귀함수 정복할 수 있을듯!ㅋㅋㅋㅋㅋㅋㅋ
'스터디 1일 1커밋' 카테고리의 다른 글
| 240217 [BOJ/백준] 10828. 스택 (1) | 2024.02.17 |
|---|---|
| 240214 [BOJ/백준] 1935. 후위 표기식2(+수정) (0) | 2024.02.14 |
| 240212 [BOJ/백준] 2606. 바이러스 (+수정) (1) | 2024.02.13 |
| 240211 [BOJ/백준] 11727. 2 x n 타일링 2 (0) | 2024.02.12 |
| 240208 [BOJ/백준] 2798.블랙잭 (+수정) (1) | 2024.02.09 |