본문 바로가기

프로그래밍/코테 씹어먹기

(2)
[코테 유형별로 씹어먹기] BFS 어떤 문제에 사용될까? 개념 트리나 그래프, 혹은 다른 것들에 대해 탐색을 진행할때 사용하는 방법들이 BFS와 DFS이다. BFS는 한칸씩 이동, DFS는 한쪽으로 이동 대략적으로 이렇게 이해하고 가면 된다. 코테나 대회에서 그래프/트리 문제나 BFS DFS를 응용한 문제들은 꼭 하나씩은 봤던 것 같다. 구현# 크기가 N*M인 2차원 행렬 탐색 (가로 M, 세로 N)from collections import dequedx=[1,-1,0,0]dy=[0,0,-1,1]def bfs(X,Y): vi=[[0]*M for i in range(N)] queue=deque([(X,Y)]) vi[Y][X]=1 while queue: x,y=queue.popleft() for i in range(n): ..
[코테 유형별로 씹어먹기]우선순위 큐 어떤 문제에 사용될까? 개념우선순위 큐는 항상 최소 / 최대 값이 가장 맨 앞에 오도록 하는 자료구조이다.우선순위 큐의 내부는 힙이라는 자료구조로, 완전 이진 트리의 일종이다.그에 따라 우선순위 큐에서 값의 삭제 및 삽입의 시간 복잡도가 LogN이다. 그럼 PS에서 우선순위 큐가 필요한 경우에 대해서 생각해보자,자료구조의 특성을 생각해보면 우선순위 큐가 필요한 상황은 값의 삽입과 삭제가 빈번하게 일어나는 경우이다. 예시만약 10만개의 원소가 있는 배열에서 아래와 같은 문제들을 푼다고 해보자. 1. 원소의 삽입 연산만 10만번 혹은 가장 작은/큰 값 삭제 연산만 10만번 주어진다. 연산 후의 가장 작은 값/ 가장 큰 값을 출력해라 만약 삽입만 일어나거나 삭제만 일어나는 경우에는 가장 작은 값, 가장 큰 값만 알고 있으면 된다. ..