본문 바로가기
코딩 테스트/코딩테스트 - 학습

완전 탐색

by 안스 인민군 2023. 1. 18.

에라토스테네스의 체

n=1000
primes=list(range(n+1))
primes[1] = 0

for i in range(2,int((n+1)**0.5)):
  if primes[i] != 0:
    for j in range(2*i, n+1, i):
        primes[i] = 0

+ 추가적으로 그냥 반목문에 의해 소수 구하기

def sol1(n):
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False

    return True

number = 100
print(sol1(number))

백트랙킹

아래의 문제들은 파이썬 라이브러리를 사용하면 간단히 풀수 있지만 백트랙킹을 이해하는데 좋은 문제들이다.

결과값의 순서를 보고 코드의 차이점을 머리속으로 생각을 해보자!

1. 중복O + 순서있게 (product 함수)

n,m = 3,2
arr = []
result = []
def sol(depth):
    global n,m,arr,result
    if m == depth:
        result.append(list(arr))
        return

    for i in range(1,n+1):
        arr.append(i)
        sol(depth+1)
        arr.pop()

sol(0)
print(result)

2. 중복 x + 순서있게 (permutations 함수)

 

15649번: N과 M (1)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

n,m = 3,2
arr = []
visit = [False]*(n+1)
result = []

def sol(depth):
    global n,m,arr,visit,result
    if depth == m:
        result.append(list(arr))
        return

    for i in range(1,n+1):
        if visit[i] == False:
            visit[i] = True
            arr.append(i)
            sol(depth+1)
            arr.pop()
            visit[i] = False

sol(0)
print(result)

 

3. 중복O + 고르기 (combinations_with_replacement 함수)

 

15652번: N과 M (4)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

n,m = 3,2
arr = []
result = []

def sol(depth,start):
    global n,m,arr,result

    if depth == m:
        result.append(list(arr))
        return

    for i in range(start,n+1):
        arr.append(i)
        sol(depth+1, i)
        arr.pop()

sol(0,1)
print(result)

4. 중복x + 고르기 (combinations 함수)

 

15650번: N과 M (2)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

n,m = 3,2
arr = []
result = []

def sol(depth,start):
    global n,m,arr,result
    if depth == m:
        result.append(list(arr))
        return
    for i in range(start,n+1):
            arr.append(i)
            sol(depth+1, i + 1)
            arr.pop()

sol(0, 1)
print(result)

'코딩 테스트 > 코딩테스트 - 학습' 카테고리의 다른 글

다익스트라  (0) 2023.01.20
정렬  (0) 2023.01.20
dfs bfs  (0) 2023.01.14
코딩 테스트 파이썬 문법 (중간편)  (0) 2023.01.12
코딩테스트 파이썬 문법 (기초편)  (0) 2023.01.12