티스토리 뷰
https://www.acmicpc.net/problem/6603
설명
DFS를 이용해 푼 코드이다.
우선 숫자를 입력받는 nums, 결과를 출력하기 위한 res 변수들을 정의한다.
BackTracking 함수를 사용하기 위해 인자로 start(시작 index)와 cnt(길이)를 준다
* non-promising 조건
로또 갯수가 6개이면 종료하여야 하므로 cnt == 6 인 경우 return
for i in range(start, len(nums)): # 인자로 넘어온 start index 부터 마지막 까지 반복하며
res[cnt] = nums[i] # res의 최신값을 nums[i]로 할당한 후
BackTracking(i+1, cnt+1) # 재귀적으로 호출
예를들어 1 2 3 5 8 13 21 34 가 입력으로 주어진 경우
1 2 3 5 8 ... 에서 13이 들어온 경우 1 2 3 5 8 13출력하고 return
다시 1 2 3 5 8 에서 13의 다음번째인 21이 들어온 경우 1 2 3 5 8 21을 출력하고 return
이런식으로 반복하면 된다.
import sys
def BackTracking(start, cnt):
if cnt == 6: # 길이가 6이 되면 res를 출력하고 return
print(*res)
return
for i in range(start, len(nums)): # 인자로 넘어온 start index 부터 마지막 까지 반복하며
res[cnt] = nums[i] # res의 최신값을 nums[i]로 할당한 후
BackTracking(i+1, cnt+1) # 재귀적으로 호출
while True:
global res, nums
nums = list(map(int, sys.stdin.readline().split()))
head = nums[0]
if head == 0:
break
nums = nums[1:] # 첫번째 원소빼고 다시 nums 정의
res = [0] * 6 # 결과를 출력하기 위한 변수 초기화
BackTracking(0,0)
print()
'알고리즘' 카테고리의 다른 글
[프로그래머스] 괄호 회전하기 - 파이썬 (0) | 2022.01.26 |
---|---|
[프로그래머스] 오픈채팅방 - 파이썬 (0) | 2022.01.25 |
[백준] 1780 : 종이의 개수 - Python(파이썬) (2) | 2021.08.11 |
[백준] 13305 : 주유소 - Python(파이썬) (0) | 2021.08.10 |
[백준] 11726 : 2xn 타일링 - Python(파이썬) (0) | 2021.08.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ZNS
- 스프링MVC
- dm-zoned 코드분석
- 네트워크
- 3차 데모데이
- 우테코 회고
- 팀프로젝트
- 5주차 회고
- 파이썬
- jpa
- 프로젝트
- 우테코
- ZNS SSD
- 피움 6주차 회고
- CI/CD
- 스프링 Logback
- 스프링 프레임워크
- 피움
- 스프링 부트
- Spring
- 회고
- java
- 백준
- 환경 별 로깅 전략 분리
- dm-zoned
- 알림기능개선기
- 8주차 회고
- 2차 데모데이
- 런칭 페스티벌
- 알림개선기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
글 보관함