Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Python 1000000007
- www.google.com 검색하면 일어나는 일
- 달리기 경주 파이썬 시간초과
- 빌드관리도구
- 모듈로 연산
- OOP의 특징
- PCB
- 기사단원의 무기 파이썬
- 웹 동작 과정
- 백트래킹
- commit message convention
- Spring Security 버전 문제
- MySQL RIGHT()
- finalize 수동 호출
- @RequestMapping과 @GetMapping
- Spring Security 5
- MySQL LEFT()
- 프로세스
- 기사단원의 무기 제곱근
- 빌드관리도구 차이
- 달리기 경주 파이썬
- 정규화 장단점
- 프로그래머스 142086
- java 동기화
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- 이코테2021
- RDBMS와 NoSQL 차이
- DDL DML DCL 차이
- build.gradle 설정 오류
- 알고리즘 1000000007 나누기
Archives
- Today
- Total
BUILD_SSO
[백준] 15649 N과 M(1) python - DFS, 백트래킹 본문
문제링크: https://www.acmicpc.net/problem/15649
예제 입력:
3 1
예제 출력:
1
2
3
🔵백트래킹
백트래킹 이론을 아무리 봐도 이해가 가지 않아 N과M 문제의 코드를 먼저보고 분석해보았다.
백트래킹이란 DFS에 기반을 두고 있는 전략으로, 불필요한 경우를 배제하며 원하는 답에 도달할 때까지 탐색하는 알고리즘이다.
DFS를 기반으로 하고있기 때문에 스택(stack)을 이용해 퇴각하며 다음 탐색을 진행한다.
백트래킹 같은 경우 기본적으로 모든 경우의 수를 탐색하는 완전탐색(브루트포스)전략을 취하지만, 처리속도를 향상시키기 위해 가지치기(pruning)라는전략을 이용한다.
정답코드:
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
res = []
def backtracking():
if len(res) == m: #종료조건
print(' '.join(map(str, res)))
for i in range(1, n+1):
if i not in res:
res.append(i)
backtracking()
res.pop()
backtracking()
백트래킹의 가장 중요한 키워드
-> 가능한 모든 경우를 실행한다
모든경우를 실행하는 가장 좋은 경우는
-> 트리형태
첫번째숫자는 뭘로 할거냐?
n은 선택된 숫자의 길이(갯수)
*우리가 구해야하는것: 길이M짜리 수열
'Problem Solving > Algorithm' 카테고리의 다른 글
[프로그래머스] 기사단원의 무기 Python 풀이(제곱근 이용) (0) | 2023.06.03 |
---|---|
[프로그래머스] 142086 가장 가까운 같은 글자 python (0) | 2023.05.11 |
[백준] 14889 스타트와 링크 python - 백트래킹, 조합 (0) | 2023.03.24 |
[백준] 14888 연산자 우선순위 python - 구현, 백트래킹 (0) | 2023.03.22 |
Bruteforce: 브루트포스/완전탐색 알고리즘 (+구현) (0) | 2023.03.22 |
Comments