반응형

   문제

   https://www.acmicpc.net/problem/15649




백트래킹과 브루트포스는 굉장히 비슷해보인다

차이점을 찾아봤다.

백트래킹은 이미 지나쳐온 곳을 다시 돌아가서 다른 가능성을 시도해보는 걸 반복하는 

기법입니다. 반드시 DFS만으로 가능한 게 아니고 BFS 등으로도 가능하지만 일반적으로

 DFS와 연관이 깊기는 합니다.브루트 포스는 꼭 '깊이'나 '탐색'의 개념이 아니더라도, 모든 

경우의 수를 다 대입해보는 것이면 브루트 포스입니다. 

어떤 종류의 문제에서 어떤 방법을 쓰더라도요.

DFS는 여러 지점을 한 단계씩 거쳐가면서 탐색하고, 스택의 개념을 이용해서 이전 단계로

 돌아가야만 DFS입니다.순서의 여부가 중요한게 아닐까?

어쨋든 문제로 들어가 보면 재귀를 잘 활용한다면 백트래킹 브루트포스 DFS등을 풀기 

쉬울것이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
n, m = map(int, input().split())    # n까지 m개
check=[0 for _ in range(n+1)]
result=[0 for _ in range(m)]
 
def sequence(index,n,m):
    if index==m:
        for i in range(m):
            print(result[i], end=' ')
        print()
        return
 
    for i in range(1,n+1):
        if check[i]==1:#이전에 썻다면
            continue
        result[index]=#해당위치에 넣어줌
        check[i]=1  #들어간거 체크표시
        sequence(index+1,n,m)
        check[i]=0 #다음수로 넘어가기전에 초기화
 
 
sequence(0,n,m)
cs



재귀 잘쓰는 사람보면 멋있어 보인다.

제일 처음 프로그래밍을 배울때 재귀를 웬만하면 사용하지 말라는 말을 들어서 재귀를 사

용하지 않았는데 알고리즘을 구현하는데 있어서는 필수역량이 아닌가 생각이 든다.




반응형

'알고리즘(python) > 탐색' 카테고리의 다른 글

[Python]백트래킹 백준 15651  (0) 2020.01.04
[Python]백트래킹 백준 15650  (0) 2020.01.04
[Python]Brute force 백준 1436  (0) 2019.12.17
[Python]Brute force 백준 1018  (0) 2019.12.17
[Python]Brute force 백준 7568  (0) 2019.12.16
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기