728x90
반응형

DFS 26

[Baekjoon 15655 / Python / 실버3] N과 M (6)

import sysinput = sys.stdin.readline# 중복 없으며 뒷 숫자가 더 커야 한다N, M = map(int, input().split())numbers = list(map(int, input().split()))numbers.sort()box = []def compare(a, b):    if a >= b:        return False    return Truedef backTracking(depth):    if depth == M:        print(' '.join(map(str, box)))        return        for i in range(N):        if depth == 0 or (numbers[i] not in box and compar..

[Baekjoon 15654 / Python / 실버3] N과 M (5)

import sysinput = sys.stdin.readlineN, M = map(int, input().split())numList = list(map(int, input().split()))numList.sort()box = []def backTracking(depth):    if depth == M:        print(' '.join(map(str, box)))        return        for i in range(N):        if not numList[i] in box:            box.append(numList[i])            backTracking(depth + 1)            box.pop()backTracking(0) 앞선 N과 M ..

[Baekjoon 15652 / Python / 실버3] N과 M (4)

import sysinput = sys.stdin.readline# 1 ~ N 까지의 수, M자리N, M = map(int, input().split())def compare(a, b):    if a > b:        return False    return Truedef backTracking(depth, num):    if depth == M:        print(' '.join(num))        return        for i in range(1, N + 1):        if depth == 0 or compare(int(num[-1]), i):            backTracking(depth + 1, num + str(i))backTracking(0, '') 앞선 N과..

[Baekjoon 15651 / Python / 실버3] N과 M (3)

import sysinput = sys.stdin.readline# 1 ~ N 까지의 수 / 길이는 MN, M = map(int, input().split())def backTracking(depth, num):        if depth == M:        print(' '.join(num))        return        for i in range(1, N + 1):        backTracking(depth + 1, num + str(i))backTracking(0, '') 백트래킹이라고 부르기도 좀 민망하긴 하다. 이전 N과 M 문제를 풀면서 올라왔다면 매우 쉽게 풀 것이다. 그냥 1 ~ N 까지의 수, M 길이를 가지는 모든 수열을 출력하면 된다.visited를 사용할 필요도 없..

[Baekjoon 15650 / Python / 실버3] N과 M (2)

# 우선 모든 경우의 수 수열을 만드는 코드를 짠다# depth가 0일 땐 바로 재귀 돌린다# depth가 0이 아니라면 "이전 숫자와 비교해 더 클 경우" 재귀 돌린다# num은 str 형태로 전달되며, 비교할 때만 int로 변환해 비교한다# 수열이 완성되면 str형태의 num을 중간에 공백을 추가해서 result 리스트에 담는다# result 리스트의 완성된 수열들을 차례로 출력한다import sysinput = sys.stdin.readline# 1 ~ N 까지의 수 / M개를 고른다N, M = map(int, input().split())visited = [False] * (N + 1) # 수와 인덱스를 맞추기 위해 + 1 한다result = []# 조건 검사 함수def compare(a, b):..

[Baekjoon 2529 / Python / 실버1] 부등호

import sysinput = sys.stdin.readlineN = int(input()) # 부등호 개수boo = list(input().split()) # 부등호 리스트result = []visited = [False] * 10 # depth는 숫자 개수만큼def compare(a, b, op):    if op == '>':        if a b: return False    elif op == ':        if a > b: return False    return True# 깊이, 현재숫자(문자열)def backTracking(depth, num):    # 숫자가 완성되었다면 결과 리스트에 추가    if depth == N + 1:        result.append(num) ..

[Baekjoon 18429 / Java / 실버3] 근손실

기본 3대중량은 500이다.매일매일 중량은 K 씩 감소한다.매일매일 하나의 운동 키트를 사용하여 중량을 증가시킬 수 있다. 3대중량이 단 하루도 500 미만으로 내려가지 않도록, 운동 키트를 사용하는 순서의 경우의 수를 모두 찾기 결국 중량의 변화는 (K + 키트로 인한 중량 증가량) 이므로, 입력받은 배열에서 미리 K를 빼 주었다.중량 변화가 음수일 경우 500 미만으로 내려가는 것 이므로, 중량 변화량이 N일동안 계속해서 양수인 경우의 수를 찾으면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class 근손실_18429 {        // 결과 저장할 변..

[크래프톤 정글 5기] week02 알고리즘 주차 열네번째 날, 최소 스패닝 트리, 프림 알고리즘, 이분 그래프

신장 트리(Spanning Tree) - 그래프 내의 모든 정점을 포함하면서 사이클이 없는 부분 트리 최소 스패닝(신장) 트리(Minimum Spanning Tree, MST) - 가중치가 있는 양방향 그래프에서 싸이클 없이 모든 정점을 포함하며 가중치의 합이 최소인 트리 - 모든 정점을 연결하는 트리를 형성하면서, 가중치 합이 최소화되도록 하는 것 프림(Prim) 알고리즘 - 크루스칼 알고리즘과 더불어 그리디 알고리즘을 기반으로 최소 신장 트리를 구하는 대표적인 알고리즘 - 가중치가 작은 순으로 노드를 그래프에 포함시켜야 하기 때문에 우선순위 큐를 사용한다. - 이미 그래프에 속한 노드엔 적용시키지 않기 위해 visited를 사용한다. 프림 알고리즘 동작원리 1. 임의의 시작 노드를 설정하고 T(트리)..

[Baekjoon 1707 / python / 골드4] 이분 그래프

import sys sys.setrecursionlimit(10 ** 9) input = sys.stdin.readline # 이분 그래프 판별 DFS 함수 def DFS(graph, start, visited, group): visited[start] = group for i in graph[start]: if visited[i] == 0: # 방문 안 한 곳이라면 result = DFS(graph, i, visited, -group) if not result: return False # 하위에서 이분 그래프 아니라고 판단했다면 함수 종료 elif visited[i] == group: # 인접노드인데 그룹이 같을경우 이분그래프 아님 return False return True # 입력받은 갯수만큼 그래..

Algorithm/Graph 2024.04.03

[Baekjoon 14888 / python / 실버1] 연산자 끼워넣기

import sys input = sys.stdin.readline n = int(input()) numList = list(map(int, input().split())) add, sub, mul, div = map(int, input().split()) maxValue = -1e9 minValue = 1e9 def DFS(i, calc): global add, sub, mul, div, maxValue, minValue if i == n: # 수열의 끝에 오면 최대/최솟값 구하기, 수열번호와 인덱스번호 헷갈리지 말자. # 수열번호가 1이면 인덱스번호는 0 maxValue = max(maxValue, calc) minValue = min(minValue, calc) else: if add > 0: ad..

728x90
반응형