Notice
Recent Posts
Recent Comments
«   2024/09   »
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
more
Archives
Today
Total
관리 메뉴

No Limitation

[코딩테스트] 완전 탐색 연습 본문

프로그래밍

[코딩테스트] 완전 탐색 연습

yesungcho 2024. 3. 20. 11:32

많이 나올 거 같은 점화식 유형

 

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

 

9095번: 1, 2, 3 더하기

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

www.acmicpc.net

def DFS(n) : 
    if n == 1 : 
        return 1
    if n == 2 : 
        return 2
    if n == 3 : 
        return 4
    
    return DFS(n-1)+DFS(n-2)+DFS(n-3)

N=  int(input())

for _ in range(N) :
    num = int(input())
    print(DFS(num))

 

문자열과 수를 이용한 완전 탐색을 사용한 단순한 구현 문제 

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

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

 

다음 '셀프 넘버' 문제는 특별히 DFS를 활용하여 풀어보았다.
먼저 기초 일의 자리 자료들 [1,2,3,4,5,6,7,8,9] 들을 활용하여 만들 수 있는 한수들은, 자신들의 수에 자릿수 하나를 더 더하는 방식이므로, 2배를 해준 것과 같다. 
예를 들어 1이라는 생성자를 이용하여 만들 수 있는 수는 1(자기 자신) + 1(자릿수에 해당하는 수) 이므로 2다. 이렇게 먼저 dp table에 만들 수 있는 녀석들은 전부 visited 처리를 해주고,
아직 방문하지 않는 녀석들이 생성자가 존재하지 않는 녀석들이기에 쭉 DFS로 search해주는 방식으로 구현하였다. 

memo = {}

for i in range(1,10000+1) :
    memo[i] = False

for one_int in range(10) :
    memo[one_int*2] = True

def d(n) :
    if n > 10000 :
        memo[n] = True
        return 
    
    for k in str(n) :
        n+=int(k)
        
    memo[n] = True
    d(n)

for i in range(10,10001) :
    d(i)

for last in range(1,10001) :
    if not memo[last] :
        print(last)

 

 

'프로그래밍' 카테고리의 다른 글

[DFS] 모음사전  (0) 2024.03.21
[규칙성 찾기] 프로그래머스-카펫  (0) 2024.03.20
[완전 탐색] 순열 & 조합 익숙해지기  (0) 2024.03.19
[BFS] 섬의 갯수  (1) 2024.03.18
[완전 탐색] 기초 연습  (2) 2024.03.18