본문 바로가기

백트래킹18

[백준-실버2] 6603번 로또(백트래킹, 파이썬) https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net - 아직까지 푼 백트래킹 문제들은 dfs 함수를 구현하는거보다 combinations나 permutations를 이용하는게 더 쉽다,, - 하지만 공부해야하니까 dfs로 연습해야지 - 우선 테스트 케이스의 갯수가 정해지지 않았으므로 while문을 이용하고, k==0일때 종료조건을 설정했다, - 한줄에 다 입력을 받기 때문에 입력을 받고, k와 s를 리스트 슬라이싱으로 지정해주었다. - .. 2022. 2. 7.
[백준-실버2] 15666번 N과 M(12) (백트래킹, 파이썬) https://www.acmicpc.net/problem/15666 15666번: N과 M (12) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net - 드디어 N과 M 마지막 문제,, 이거 풀면 백트래킹 달인 될줄 알았는데,,, 다른문제 풀때 완전탐색이 더 편하다 ㅎ 이게 맞나,,ㅎ - 이번 문제는 같은 수를 고르는 것 허용 (1 1, 7 7 허용) - 순서고려함 (1 7 7 1 중 1 7 허용) n, m = map(int, input().split()) nums = list(map(int, input().split())) stack = .. 2022. 2. 7.
[백준-실버2] 15665번 N과 M(11) (백트래킹, 파이썬) https://www.acmicpc.net/problem/15665 15665번: N과 M (11) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net - N과 M 9번과 다른 점은 같은 수를 고를 수 있다. (1 1, 7 7 등 허용 됨) - 따라서 9번에 있던 if nums[i] not in stack: 조건이 필요 없다. - 여기서 deepcopy를 이용했을때 시간 초과가 떠서 s = stack[:] 슬라이싱으로 복사를 했더니 시간초과 해결되었다. --> 정확한 이유는 모르겠음,, 찾아봤는데 100프로 이해안감(깊은복사,,,얕은복사,, .. 2022. 2. 7.
[백준-실버2] 15664번 N과 M(10) (백트래킹, 파이썬) https://www.acmicpc.net/problem/15664 15664번: N과 M (10) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net - N과 M(9)번 문제는 순서를 고려했지만, 이번 문제는 순서를 고려하지 않는다. --> (1 7 7 1 중 1 7만 허용함) - 따라서 dfs에 start 파라미터를 이용하여 중복을 제거했다. - 나머지는 N과 M 9번문제랑 같으니 참고할 것 - https://it-hyorim.tistory.com/93 [백준-실버2] 15663번 N과 M(9) (백트래킹, 파이썬) http.. 2022. 2. 7.