본문 바로가기

Algorithm123

[Swift][DP] 백준 2225번 (합분해) 요구능력 : DP에 대한 이해 코드설명 : 이해가 정말 잘되게 해주신 블로그 우선 구해야되는 배열의 개수가 얼마안되서 그냥 처음부터 끝까지 다 구해버리고 거기서 해당되는 배열[k][n]을 뽑아냈다. 위에 태그해놓은 블로그를 먼저 보고오면 어떤식으로 풀어야할지 감이 잡힌다. 2차원배열인걸 처음에 어떻게 알고 풀지라고 생각했는데,, DP는 입력이 2개가 반드시 들어와서 찾는거라면 2차원이 아닐까.. 라는 생각을 조심스럽게 해본다. 여튼 이제 2차원으로 푸는건 위에 블로그에서 설명해주신대로 표그려서 풀어야겠다.. 후기 : 어려운거 같은데,, 알고나면 이렇게 푸는방법도 있구나 싶은 문제였다. 많은 정보중에서 내가 이 문제를 다시 봤을 때 논리적으로 풀 수 있겠다 싶은 방법으로 풀었다. let nk = readL.. 2021. 11. 1.
[Swift][DP] 백준 14051번 (퇴사) 요구능력 : DP에 대한 이해 코드설명 : 이 문제는 삼성SW역량테스트? 거기서 나온문제라고 한다. 1. 입력받기 let n = Int(String(readLine()!))! var t: [Int] = Array(repeating: 0, count: n + 1) var p: [Int] = Array(repeating: 0, count: n + 1) var dp = Array(repeating: 0, count: 1001) for i in 1...n { let TP = readLine()!.split(separator: " ").map{Int(String($0))!} t[i] = TP[0] p[i] = TP[1] dp[i] = p[i] //넣어놔야 아래코드에서 비교가능 } 2. DP코드 짜기 for i i.. 2021. 10. 8.
[Swift][BFS] 백준 2178번 (미로탐색) 요구능력 : BFS에 대한 이해 코드설명 : 최소의 이동을 요구하는 문제는 BFS로 접근하는게 맞는것같다. DFS로도 풀 수는 있지만 DFS는 모든 경우의수를 다 돌아보기 때문에 자칫하면 시간초과가 날 수 있다. 이 문제는 문제에서 최소의 이동을 요구했기 때문에 BFS로 풀어볼 것이다. 1. n,m 과 좌표의 크기 받기 let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let (n, m) = (nm[0], nm[1]) var arr = [[Int]]() for _ in 0..= m {continue}// nx와 ny가 배열밖으로 넘어가는것을 방지 if arr[nx][ny] == 0 {continue} //1일때만 이동가능하기 때문에 0일떄.. 2021. 10. 8.
[Swift][DP] 백준 1699번 (제곱수의 합) 요구능력 : DP에 대한 이해 코드설명 : 우리는 여기서 최소개수를 구해야한다. 모든 경우의수를 비교해서 최소개수를 구하면 된다. 11은 최소 3개항의 제곱수로 표현 가능하다고 한다. 1부터 8까지만 찾아보자. 1 1의제곱 2 1의제곱 + 1의제곱 3 1의제곱 + 1의제곱 + 1의제곱 4 1) 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 2) 2의제곱 5 1) 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 2) 1의제곱 + 2의제곱 6 1) 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 2) 1의제곱 + 1의제곱 + 2의제곱 7 1) 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 + 1의제곱 2) 1의제곱 + 1의제곱 + 1의제곱 + 2의제.. 2021. 10. 7.