본문 바로가기

알고리즘/BFS

(19)
690. Employee Importance 출처 [문제 설명] 직원들의 리스트와 직원 아이디가 주어졌을 때, 주어진 아이디와 일치하는 직원의 중요도와 그 직원의 모든 부하직원들의 중요도의 총합을 구하시오. 예제에서는 주어진 id가 1이고, 부하 직원이 두명 밖에 없으므로 이 셋의 합인 5+3+3인 11이 됩니다. [처음 생각한 접근 방법] 보자마자 생각 난 건 일단 리스트로 직원이 주어졌으니 리스트(employees)에서 아이디(id)와 일치하는 employee를 찾아서 뽑는 것입니다. 그 후에 해당 employee를 Queue에 넣고 bfs로 모든 요소를 검색한 후, 각 요소들의 중요도(importance)를 총합을 구합니다. 이렇게 풀려고 했는데 막상 보니까 employee의 subordinates가 아이디(id)를 담은 리스트였습니다. 저는..
BFS 참고한 영상 BFS 위키백과 너비 우선 탐색(Depth-First Search) 너비 우선 탐색(Breadth-first search, BFS)은 맹목적 탐색방법의 하나로 시작 정점을 방문한 후 시작 정점에 인접한 모든 정점들을 우선 방문하는 방법이다. 큐를 이용해서 구현합니다. 장점 출발노드에서 목표노드까지의 최단 길이 경로를 보장한다. 단점 경로가 매우 길 경우에는 탐색 가지가 급격히 증가함에 따라 보다 많은 기억 공간을 필요로 하게 된다. 해가 존재하지 않는다면 유한 그래프(finite graph)의 경우에는 모든 그래프를 탐색한 후에 실패로 끝난다. 무한 그래프(infinite graph)의 경우에는 결코 해를 찾지도 못하고, 끝내지도 못한다. 영상 보면서 직접 코틀린으로 구현해본 소스 코드. i..
01 Matrix 각 블록에서 가장 가까운 0을 찾는 문제. 자신이 0이면 그 블록에 값은 0이고, 옆에 있으면 1이 됨. 블록은 상하좌우로만 움직임. 처음 문제를 봤을 때 구현 문제가 생각났음. 처음 블록에서 주변 상하좌우를 확인한 후, 없으면 상,하,좌,우 이동한다. 그 다음에 다시 상,하,좌,우에 0이 있나 확인. 접근 방법은 생각났는데 코드 구현을 못해서 계속 헤메다가 BFS가 떠올라서 BFS 검색해서 어설프게 구현했음. 제일 헤멨던 게 x,y좌표 구분에서 엄청 헤멨음. x,y를 명확하게 뭐라고 확실히 정하고 하지 않아서 굉장히 고생함. 다음에 좌표 문제가 나오면 x,y 확실히 정하고 풀어야겠음. 다음엔 밑에 2가지를 신경 써서 풀어야겠음. 1. BFS 제대로 구현 2.x,y 좌표 명확하게 잡기. 푼 거. impo..