dfs 3

프로그래머스 Lv. 3 Swift 알고리즘 - 네트워크_DFS

간만에 프로그래머스 문제를 푸는것 같다... 그 동안 백준 문제를 풀었는데 프로그래머스가 확실히 백준보다 좀 쉬운거 같기도..? 하지만 이번 문제는 실제 난이도에 비해 푸는데 오래 걸리긴 했다 😇 이 문제를 풀면서 생각한 논리적 흐름은 네트워크가 연결되어 있으면 연결된 개체를 전부 묶어서 Count + 1 이다. 그렇다면 연결이 끊어질때까지 이어보자 -> DFS 항상 그렇듯이 vistied 배열을 만들어준다. 이때 우리는 n개의 컴퓨터의 각각 상황만 파악하면 되기 때문에 vistied를 2차원 배열이 아닌 1차원 배열로 만들어준다. A부터 시작하면 어디까지 연결될까? Try... B부터 시작하면 어디까지 연결될까? Try... 이렇게 반복인데 이때 A에서 시작했을 경우 B와 연결이 되어있었다면 이미 vi..

백준 1941번 Swift 알고리즘 연습 - 소문난 칠공주_DFS

익숙해질만할 때 어려운 문제가 나왔다...! 이 문제는 고민을 거듭하다 결국 다른 분들의 코드를 많이 참고했는데 심지어 Swift로 된 코드는 없어서 Python 코드를 많이 참고했다..! 풀이를 보니 Combination, DFS+BFS, Backtracking 등등 다양한 개념을 혼합하여 사용해야했다. 어쩐지 BFS 하나로 안풀리더라니... 일단 기존에 풀어왔던 문제들과 제일 다른점은 현재 좌표에서 다음 좌표로 넘어갈 때 해당 지역의 값이 움직임에 영향을 전혀 미치지 않는다는 것이다. 즉, Y나 S에 상관없이 움직일 수 있었고 이때 이 모든 경로를 가능하게 하면 너무 많은 케이스가 발생하니 흔히 말하는 '가지치기'를 적용해야 했다. 그래서 dfs 함수를 사용할 때 Y가 4를 넘은 경우 바로 retur..

프로그래머스 Lv. 2 Swift 알고리즘 - 메뉴 리뉴얼

못 풀었다... 이건 그냥 못 풀었다 ㅠㅠ 다른 분들의 글을 참고해보니 DFS, Combination 등등 비슷한 맥락이지만 각자만의 방식대로 풀이가 있었다. 그중 내가 가장 인상깊게 본 코드는 아래 블로그를 운영하신 분의 코드다... 다른 코드들이 굉장히 긴 코드들이 많았는데 이 분의 코드는 엄청나게 정갈하다..! 그리고 뭔가 클로져를 팍팍 쓰신 것이... 클로져 달인이신 느낌을 받았다. 이 문제는 표시해놓고 꼭 다시 한 번 복습해야겠다! (참고한 블로그: https://aios.tistory.com/entry/swift-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%A9%94%EB%89%B4-%EB%A6%AC..