본문 바로가기

백준177

[Swift][DFS][백트래킹] 백준 15654번 (N과 M (5)) 요구능력 : DFS와 백트래킹에 대한 이해 코드설명 : N과M(1) 에서 1부터 n까지 썻던 배열을 이 문제에서는 입력받아서 쓰는 차이가 있다. 바뀐건 아래 코드에 주석처리한 부분과 입력받는부분이 하나 더 추가된점 외에는 없다. 후기 : N과M문제는 N과M(1)만 잘 이해하고 있으면 연쇄적으로 잘풀려서 기분은 좋은거같다. let input = readLine()!.split(separator: " ").map{Int(String($0))!} let n = input[0] let m = input[1] var arr = readLine()!.split(separator: " ").map{Int(String($0))!} var visited: [Bool] = Array(repeating: false, cou.. 2021. 9. 29.
[Swift][DFS] 백준 15651번 (N과 M (3)) 요구능력 : DFS와 백트래킹에 대한 이해 코드설명 : N과 M(1) 에서 "같은 수를 여러번 골라도 된다." 라는 조건이 더해졌다. 기존의 N과M에서 방문여부를 따지지 않으면 된다. n = 4, m = 4 인 경우를 생각해보자. 1 1 1 1 1 1 1 2 1 1 1 3 . . 간단하게 스택을 생각하면 된다. [1, 1, 1, 1]일 때, 모든 dfs의 i = 1일 때 이다. 이걸 str에 추가하고 나서 return하면 result = [1, 1, 1]이 되고, i = 2가 실행된다. 그럼 result = [1, 1, 1, 2]가 되고, str에 추가된다. 이런식으로 맨 나중에 들어온걸 빼고 그 다음수를 넣는 식으로 스택이 진행된다. 후기 : N과M(1) 문제에 간단한 조건1개만 추가한 문제 N과 M의.. 2021. 9. 27.
[Swift][BFS] 백준 1697번 (숨바꼭질) 요구능력 : BFS에 대한 이해 코드설명 : 왜 BFS로 풀어야되는지에 대한 설명이 아주 잘나와있다.https://chanhuiseok.github.io/posts/baek-14/ [백준] 1697번 - 숨바꼭질 컴퓨터/IT/알고리즘 정리 블로그 chanhuiseok.github.io 스위프트의 경우에는 큐를 구현해줘야하기 때문에 필요한 부분만 구현해줬다. BFS의 경우 처음에 큐가 비어있기 때문에 큐에 입력받은 수를 푸쉬해준다. 그리고 큐에서 데이터를 하나 꺼내오고 꺼내온 데이터가 k와 같다면 while문을 빠져나가준다. while문의 조건을 true로 놔둬도 상관없다. 문제풀이이기 때문에, data가 k와 같지않은 경우는 없기때문이다. 아래의 세 가지 경우를 모두 돌면서 1) x - 1 2) x + .. 2021. 9. 27.
[Swift][DFS] 백준 11724번 (연결 요소의 개수) 요구능력 : DFS와 인접리스트에 대한 이해 코드설명 : 평범한 DFS문제처럼 인접리스트를 구해준다. 문제에서 따로 함수를 빠져나갈 조건이 나오지 않았으므로 사실 depth도 필요는 없다. 그냥적은거다. 조건이 없으니 방문처리만하고 나가는 처리는 할필요가 없다. 여기서 핵심은 인접리스트를 다 돌면서 이미 방문한 노드들은 돌지않고 돌게되는 인접리스트는 카운트를 해주는 것이다. 이미 방문한 노드들은 한개의 묶음의 노드이기 때문이다. (하나의 연결요소이기 때문이다.) DFS는 같은 묶음에 있는 노드는 다 돌게 되어있다. 그러니 방문하지 않은 노드는 다른 연결요소라는 뜻이다. 후기 : DFS문제는 아직 어렵다 .. 적응이 좀 더 필요하다.. let arr = readLine()!.split(separator: .. 2021. 9. 26.