분류 전체보기 753

[알고리즘] DFS 와 BFS 깊이 우선 탐색, 너비 우선 탐색

DFS/ BFS 자료의 검색, 트리나 그래프를 탐색하는 방법 한 노드를 시작으로 인접한 다른 노드를 재귀적으로 탐색해가고 끝까지 탐색하면 다시 위로 올라와서 다음을 탐색하여 검색하는 것. DFS (깊이 우선 탐색) 노드를 방문하고 깊이 우선으로 인접한 노드를 방문한다 끝까지 방문하면 다시 돌아와서 다시 끝까지 방문한다. 이렇게 그래프가 있을 때 깊이 우선은 숫자 순서대로 탐색한다 1 2 3 4 까지 갔다가 다시 1로 올라와서 5 6 7 을 방문하고 다시 5로 올라와서 8을 방문하고 다시 1로 올라와서 9 10을 방문한다. 재귀함수로 이를 표현한다 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 # 위의 그래프를 예..

알고리즘/이론 2021.06.21

[백준] 1021 회전하는 큐 파이썬 풀이 (큐)

코드 from collections import deque def move_left(queue): first = queue.popleft() queue.append(first) def move_right(queue): last = queue.pop() queue.appendleft(last) def find_index(queue, num): index = 0 for index in range(len(queue)): if queue[index] == num: break return index # -------------------------------------------- N,M = map(int, input().split()) queue = deque() find_number = [] for i in ..

[백준] 1874 스택수열 파이썬 풀이 (스택)

코드 num = int(input()) #원소가 몇 개 있는지 original_list = [] # 원래 주어지는 배열 for i in range(num): a = int(input()) #리스트의 원소들 original_list.append(a) # print(original_list) ordered_list = sorted(original_list) #오름차순 정렬한 배열 stack = [] origin_index = 0 #원래 배열과 비교하기 위한 변수 push_pop=[] #연산을 저장하는 배열 for index in range(len(ordered_list)): stack.append(ordered_list[index]) push_pop.append('+') for i in range(len(s..

[백준] 4949 균형잡힌 세상 파이썬 풀이 (스택)

코드 while True: string = input() if string == '.': break stack = [] check = True for i in string: if i == '(' or i == '[': #stack에 넣음 stack.append(i) elif i == ')': if stack and stack[-1] == '(': #stack이 안비었으면 stack.pop() else: check = False break elif i == ']': if stack and stack[-1] == '[': #stack이 안비었으면 stack.pop() else: check = False break if not stack and check: print('yes') else: print('no'..

[백준] 1010 다리 놓기 파이썬 풀이 (정수론 및 조합론)

코드 def factorial(n): num = 1 for i in range(1, n+1): num *=i return num test_case = int(input()) for i in range(test_case): n,m = map(int, input().split()) bridge = factorial(m)/( factorial(n)* factorial(m-n)) print(int(bridge)) 풀이 조합으로 풀면 됨 2021.06.21 - [알고리즘/백준 문제풀이] - [백준] 11050 이항계수 1 파이썬 풀이 (정수론 및 조합론) [백준] 11050 이항계수 1 파이썬 풀이 (정수론 및 조합론) 코드 import math N,K = map(int, input().split()) resul..

[백준] 1934 최소 공배수 파이썬 풀이 (정수론 및 조합론)

코드 num = int(input()) for i in range(num): a,b = map(int,input().split()) A,B = a,b while a!=0: b = b%a a,b = b,a # print(a,b) gcd = b lcm = A * B //b print(lcm) 풀이 2021.06.20 - [알고리즘/백준 문제풀이] - [백준] 2609 최대 공약수와 최소 공배수 파이썬 풀이 [백준] 2609 최대 공약수와 최소 공배수 파이썬 풀이 코드 A,B = map(int, input().split()) # 최대 공약수는 # 둘중에 작은 수와 큰수%작은수와의 최대공약수와 같다 # 작은 수가 0이 될때까지 반복한다. 그럼 큰 수가 최대 공약수이다. a,b = A,B while b!=0: a..

[백준] 10773 제로 파이썬 풀이 (스택)

코드 import sys num= int(sys.stdin.readline()) total = [] max = 0 for i in range(num): money = int(sys.stdin.readline()) if money > 0: total.append(money) max+=money else: max-=total[-1] total.pop() print(max) 풀이 0을 부르지 않으면 total 배열에 부른 수를 append하고 max(총 합)에 부른 수를 더한다 0을 부르면 total에서 마지막에 부른 수를 없앤다. 그리고 max에서도 빼준다.

[백준] 10828 스택 파이썬 풀이 (스택)

코드 import sys stack = [] num= int(sys.stdin.readline()) #input()을 쓰면 시간 초과 for i in range(num): order = sys.stdin.readline().split() #공백 기준으로 띄워서 배열로 들어감 if order[0] == 'push': stack.append(order[1]) elif order[0] == 'top': if len(stack)>0: print(stack[-1]) else: print(-1) elif order[0] == 'size': print(len(stack)) elif order[0] == 'pop': if len(stack)>0: print(stack[-1]) stack.pop(-1) else: pri..