Baekjoon78 [Swift][BruteForce] 백준 10974번 (모든 순열) 요구능력 : 순열에 대한 이해 코드설명 : 다음순열을 보고오면 바로 이해가 가능하다. 다음순열의 겉에 팩토리얼로 감싸서 계속해서 순열을 바꿔주고 프린트한게 전부이다. 후기 : 이전에 풀었던 문제중에 다음 순열이 있는데 그 문제를 풀었던 덕분에 쉽게 풀었다. 다음순열에 팩토리얼을 더한 문제 let n = Int(readLine()!)! var sum = 1 var arr: [Int] = [] var result: [Int] = [] factorial(n) for i in 0.. 2021. 9. 24. [Swift][DFS][백트래킹] 백준 15649번 (N과 M (1)) 요구능력 : DFS의 응용 코드설명 : DFS를 활용하는 백트래킹 문제이다. 백트래킹이란? 탐색하는데 필요한 많은 자원을 줄이기 위해 유망성있는 노드들을 중심으로 탐색하는 방법이다. 조건을 줘서 필요없는(유망성없는) 노드에는 방문조차 하지않는다. 백트래킹이라는 방법을 사용하기위해 DFS를 이용한다고 생각하면 된다. 이 문제에서 핵심 두 가지다. 1. 수열을 만들되, 백트래킹을 이용하여 중복되는 수(유망성없는 수)를 방문하지 않는다는것이다. 2. DFS를 사용하기 때문에 Stack을 활용한다는 것이다. 문제예시) 4 4를 입력했다고 치자. 아래 코드를 실행하게 되면, result(0) depth = 0, visitied[1] = false -> visited[1] = true, stack = [1] res.. 2021. 9. 23. [Swift][DP] 백준 11053번 (가장 긴 증가하는 부분수열) 요구능력 : DP의 응용 코드설명 : 이 문제는 앞에있는 숫자가 자기자신보다 작은 숫자의 갯수를 세는것이다. 1. 배열에서 현재 i가 위치한 배열의 앞부분에 현재 arr[i]의 수보다 작은게 있으면 그 자리의 dp는 dp[i]와 dp[j] + 1 중 큰 수를 dp[i]에 넣는다. 그 이유는 디버깅해보면 알겠지만, [10, 20, 10, 30]과 같은 경우에 10일 때는 dp[0] = 1 20일 때는 dp[1] = 2 10일 때는 dp[2] = 1 30일 때는 dp[3] = 3 이 된다. 후기 : 증가하는 부분수열의 점화식은 처음에 구했는데 왜 답이 안나왔었는지 멀리돌아서 왔다. let a = Int(readLine()!)! var arr = readLine()!.split(separator: " ").m.. 2021. 9. 22. [swift][구현] 백준 16935번 (배열 돌리기 3) 요구능력: DFS와 BFS 그리고 스택과 큐의 이해 코드설명 : 1. 1번 배열을 상,하 반전 이건 arr이 2차원 배열이기 때문에 reverse()하면 arr[i][j]일 때, arr[i]의 순서가 거꾸로 되므로 상하반전이 된다. 2. 2번 배열을 좌, 우 반전 좌, 우 반전은 arr[i][j]에서 j(열)을 반전시켜주면 된다. 3. 배열을 오른쪽으로 90도 회전 이 부분에서 조금 헤맸다. n과 m을 스왑안해줘서 원하는 결과가 계속 안나왔다. n과 m을 스왑해줄거면 resultArr도 새로 생성해줘야한다. 어차피 밑에서 arr에 다 넣어주기 때문에 저장은 되어있다. 그리고 배열문제를 잘 푸려면 인덱스 활용을 잘해야된다. resultArr이 0,0일 때 arr은 5,0을 내주어야 한다. 이런식으로 쭉 나.. 2021. 9. 10. 이전 1 2 3 4 5 6 7 8 ··· 20 다음