반응형
문제
https://www.acmicpc.net/problem/6603
6603번: 로또
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로
www.acmicpc.net
코드
from collections import deque
while True:
nums = deque(map(int, input().split()))
k = nums.popleft()
if k == 0:
break
s = []
def dfs():
if len(s) == 6:
print(' '.join(map(str,s)))
return
for i in sorted(nums):
if i not in s:
if s:
if s[-1] > i:
continue
s.append(i)
dfs()
s.pop()
dfs()
print()
설명
연속적으로 주어지는 수의 제일 첫 입력(k)을 빠르게 제거하기 위해 덱을 사용해서 popleft 해주었다.
이때 k가 0이면 break 해준다.
그 외의 경우에는 백트래킹을 통해 문제를 해결해 준다.
우선 빈 리스트 s를 생성해 준다.
dfs를 돌리는데 정렬된 nums의 요소에 대해
1. s안에 존재하지 않는 수
2. 만약 s가 있다면 s의 -1번 인덱스(끝 수) 보다 큰 수
이와 같은 기준으로 s에 추가해 준다.
s의 개수가 6개가 되었다면 해당 수를 출력해 준다.
출력 형식을 맞추기 위해 한 사이클이 끝났으면 빈 공백을 프린트한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 2407: 조합 (0) | 2023.07.21 |
---|---|
[파이썬, Python] 백준 4963: 섬의 개수 (0) | 2023.07.20 |
[파이썬, Python] 백준 2417: 정수 제곱근 (0) | 2023.07.19 |
[파이썬, Python] 백준 1072: 게임 (0) | 2023.07.18 |
[파이썬, Python] 백준 15655: N과 M (6) (0) | 2023.07.17 |