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 | 31 |
Tags
- MySQL RIGHT()
- finalize 수동 호출
- 정규화 장단점
- commit message convention
- @RequestMapping과 @GetMapping
- 알고리즘 1000000007 나누기
- 달리기 경주 파이썬
- 프로세스
- MySQL LEFT()
- 달리기 경주 파이썬 시간초과
- build.gradle 설정 오류
- DDL DML DCL 차이
- Python 1000000007
- 이코테2021
- 백트래킹
- 모듈로 연산
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- java 동기화
- 빌드관리도구
- Spring Security 5
- 기사단원의 무기 파이썬
- Spring Security 버전 문제
- 웹 동작 과정
- 기사단원의 무기 제곱근
- PCB
- RDBMS와 NoSQL 차이
- 프로그래머스 142086
- 빌드관리도구 차이
- OOP의 특징
- www.google.com 검색하면 일어나는 일
Archives
- Today
- Total
BUILD_SSO
[백준] 15649 N과 M(1) python - DFS, 백트래킹 본문
문제링크: https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
예제 입력:
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