Loading...

DFS/BFS 정복기6 -큐의 길이만큼만 순회해야한다면..-

1. 문제 https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net S에 존재하는 고슴도치가 탈출지점 D로 이동해야하는데, 지도상에 물이 있고, 이 물도 1초에 1번씩 상하좌우로 퍼져나간다. 여기서 고슴도치는 물이 찰 예정인 칸으로 이동할 수 없다 가장 빠른 시간에 탈출할려면 얼마나 걸리는지 구하세요. 2. 나의 풀이 풀이는 전형적인 BFS로 시작점, 도착점을 찾고 물도 퍼져나가기 때문에 물이 어디에 있는지도 큐에 담아놔야겠다 r,c = map(int,stdin.r..

2022. 9. 13. 06:46

트리 이론 기본편4 -이진 탐색 트리 + heap(힙) 간단하게-

1. 수식 트리(expression binary tree) 수식을 표현하는 이진 트리 수식 이진 트리라고도 부른다 연산자는 루트 노드이거나 가지 노드 루트와 잎 사이의 중간 노드들을 가지 노드라고 하나봐 피연산자는 모두 잎 노드에 존재함 전위, 중위, 후위순회를 이용해서 순회하면 수식의 전위표기법, 중위표기법, 후위표기법이 된다 2. 예시 다음과 같은 트리를 전위, 중위, 후위순회 해서 전위표기법, 중위표기법, 후위표기법을 구해보면? 2-1) 구현 예시 #class 정의 class Node: def __init__(self,data): self.data = data self.left = None self.right = None #tree 정의 root = Node('+') root.left = Node(..

2022. 9. 13. 04:16

트리 이론 기본편3 -이진 트리를 표현하는 방법 + 순회 구현 -

1. 배열을 이용한 이진 트리 표현 루트의 번호를 1로 하고 레벨 n에 대하여 왼쪽부터 오른쪽으로 $2^{n}$부터 시작하여 번호를 부여 노드 번호를 index로 해서 배열에 노드 정보를 저장 완전 이진트리일때만 가능할듯 아니라면 빈 부분은 0으로 채우고 데이터를 넣으면 될것 같은데 조금 복잡해질것 같고 높이 h가 주어진다면.. h의 노드 최대개수는 $2^{h+1}-1$개니까 [0]*$2^{h+1}-1$으로 초기화 노드 개수 n개가 주어진다면 뭐 [0]*(n+1)로 초기화하면 될듯 라고 생각했는데.. 이게 아니야 왜 그런지는 뒤에 쓴다 1-1) 노드 번호의 특징 완전이진트리처럼 번호를 붙이는 방식인 1번부터 n번까지를 왼쪽부터 오른쪽으로 차례대로 붙일때만 성립함 1)레벨 n의 시작 노드 번호는 $2^{n..

2022. 9. 13. 02:33

트리 이론 기본편2 -이진 트리 용어 + 트리의 순회 -

1. 이진트리 모든 노드들이 2개의 서브트리를 갖는 특별한 형태의 트리 모든 노드들이 자식 노드를 "최대" 2개까지만 가질 수 있는 트리 각 자식 노드를 왼쪽 자식 노드(left child node), 오른쪽 자식 노드(right child node) 이진 트리 예시 4가지.. 모든 노드가 자식 노드를 "최대" 2개만 가지면 이진 트리가 된다 자식 노드가 아예 없어도 된다는 소리 2. 특징 레벨 i에서(높이 i에서) 노드의 최대 개수는 $2^{i}$개 높이가 h인 이진 트리가 가질 수 있는 노드의 최소 개수는 h+1개 최대 개수는 $2^{h+1}-1$개 3. 종류 이진트리의 종류에 따라 저장, 표현, 알고리즘 등이 달라질 수 있으므로 잘 구분해야한다 3-1) 포화 이진 트리(full binary tree..

2022. 9. 13. 00:40

트리 이론 기본편1 -용어 정리-

1. 트리의 개념 비선형 구조 원소들 간에 1:n 관계를 가지는 자료구조 원소들 간에 계층관계를 가지는 계층형 자료구조 상위 원소에서 하위 원소로 내려가면서 확장되는 트리 모양의 구조 ############### 선형구조와 비선형구조 간단히 ################################# 2. 트리의 정의 1개 이상의 노드로 이루어진 유한 집합 즉, 노드가 1개만 있어도 트리 최상위 노드를 root라고 부른다 루트 이외의 나머지 노드들은 n개의 부분집합 $T_{1}, T_{2}, T_{3},... , T_{n}$으로 분리 가능하다 그림과 같이 $T_{1}, T_{2}, T_{3},... , T_{n}$도 하나의 트리가 되며, 루트의 부 트리(subtree)가 된다 그러니까 어떤 tree의 일..

2022. 9. 11. 17:57

알고리즘 문제를 풀기위해 2차원 배열에서 이해해야할 테크닉들

1. 2차원 배열 선언 1-1) 일반적으로 [ [0,1,2,3], [1,2,3,4] ] 과 같이 [0,1,2,3], [1,2,3,4]는 각각 행을 나타내고 (0,1), (1,2), (2,3), (3,4)는 각각 열을 나타냄 세로의 길이(행의 개수), 가로의 길이(열의 개수)를 필요로 한다 1-2) 입력을 받을때 1 2 3 4 5 6 7 8 9 는 '1 2 3'을 리스트로 바꿀려면, input().split() 123 456 789 는 '123'을 리스트로 바꿀려면 list(input()) 2. 2차원 배열 순회하기 2-1) 행 우선 순회 2차원 배열 각 칸의 좌표를 (x,y)라고 하면, arr[y][x]로 접근할 수 있다 n*m 배열에서 for y in range(n): for x in range(m):..