dfs 4

[Algorithm] DFS/BFS stack과 queue를 이용한 완전탐색 알고리즘

안녕하세요. 오늘은 DFS와 BFS알고리즘에 대해서 알아 보겠습니다. DFS와 BFS는 그래프의 완전탐색 알고리즘입니다. 시간복잡도 두 알고리즘의 시간 복잡도에 대해서 먼저 설명드리겠습니다. 인접리스트형식으로 표현된 그래프와 인접행렬법으로 표현된 그래프에서의 시간복잡도는 다릅니다. 우선 인접행렬법(V by V 행렬 : V은 정점의 개수 입니다.)에서는 O(V^2)입니다. 각각의 노드에서 모든 노드로 간선이 있는지 여부를 알아야 하기 때문입니다. 두번째로 인접리스트형식(V: 정점의 개수, E: 간선의 개수)으로 표현된 그래프에서는 O(V+E)입니다. 각각의 노드에서 다른 노드로 간선이 리스트형식으로 존재함을 알기 때문에 V+E로 모두 탐색 가능합니다. 알고리즘 설명 DFS부터 알고리즘 설명 드리겠습니다. ..

[프로그래머스] 깊이/너비 우선 탐색(DFS/BFS) 타겟 넘버 with Swift

안녕하세요. 오늘은 프로그래머스 2레벨 타겟넘버 문제를 풀어보겠습니다! 타겟넘버는 전형적인 dfs문제입니다! 각각의 입력이 +와 -일때마다 달라지는 결과가 target과 같으면 결과가 1씩 증가하도록 문제를 하면 되는데요! dfs의 깊이가 입력의 Index로 작용하게 만들어 주시면 됩니다! 그리고 depth가 max일때 target과 모든 결과의 합과 비교해서 answer의 증감을 결정해 주시면 됩니다! import Foundation var result:Int = 0 var targetResult:Int = 0 var targetDepth:Int = 0 var sourceNumbers:[Int] = [Int]() var resultsNumbers:[Int] = [Int]() var answer:Int ..

[프로그래머스] 코딩테스트 연습 2017 카카오코드 본선 단체사진 찍기 with C++(brute force)

안녕하세요! 오늘은 프로그래머스 단체사진 찍기 문제를 풀어보겠습니다. 이 문제는 제 기준에선 참 문제를 이해하기 어렵게 만들었다고 생각했는데요. 왜냐면 일렬로 선다고 해놓고 나란히 선다고 하고 저는 전체 경우의 수가 시그마n=1to8 8P(8-n)*n^(8-n)개인줄 알았습니다... 그래서 레벨2에도 엄청난 수열문제가 나올 수 있구나... 이런 마음이였는데요 다행히 그건아니고 최대 8!개를 탐색하는 문제였습니다! 또, 맞왜틀(맞는데 왜 틀리지?!) 문제입니다! 한 session에 하나의 testcase가 아니라 여러 testcase가 들어있어 전역 변수를 초기화 해주지 않으면 오답이 됩니다! 모두 구현한 뒤 오답이길레 한참 헤맸습니다 ㅠㅠ 잡설은 이쯤하고! 같이 문제 풀어보시죠! 알고리즘은 brute f..

[프로그래머스] 코딩테스트 연습 2017 카카오코드 예선 카카오프렌즈 컬러링북 with C++

안녕하세요! 오늘은 프로그래머스 카카오프렌즈 컬러링북 문제를 풀어보았습니다! 2레벨은 문제가 몇개 안되 C++문제도 같이 풀려고합니다! Swift로 풀어보고 싶었으나 어쩔 수 없죠 ㅠ 이 문제는 기본적인 탐색 문제입니다! bfs(Breadth First Search)나 dfs(Depth First Search) 중 사용하면 되는데요! 서로 장단점이 있는 알고리즘입니다! 나중에 포스팅으로 dfs와 bfs에 대해 자세히 포스팅 하도록하겠습니다! 저는 dfs로 문제를 풀었는데요! 같이한번 살펴보시죠! 우선 인자로 들어온 vector picture 를 함수 내부에서 사용하기 좋게 전역변수로 선언한 map으로 옮겨줍니다! 옮겨주면서 isVisitedMap도 같이 초기화해줍니다! for(int i = 0; i < ..