목록코딩 테스트/백준 (139)
미소를뿌리는감자의 코딩
1. 문제https://www.acmicpc.net/problem/11727 2. 접근 방법f(n) = f(n-1) + f(n-2) * 2라는 점화식을 생각해 낼 수 있었다.n-1에서는 1*2 타일 하나만 선택되어서 나올 수 있으며 f(n-2)에서는 2*1과 2*2를 선택함을 통해 f(n)에 도달할 수 있다. 이를 이용해서 코드를 작성하게 되었다. 3. 코드def get_poss(n): dp = [1] * 1001 dp[2] = 3 for i in range(3, n+1, 1): dp[i] = (dp[i-1])%10007 + (2 * dp[i-2])%10007 return dp[n] % 10007if __name__ == "__main__": n = int(inpu..
1. 문제https://www.acmicpc.net/problem/14501 2. 접근 방법이번 문제는 dp를 이용한 문제이다.이는 해당 Ti로부터 뒤에 값이 이용 불가해 지기 때문에, 뒤에서 부터 계산을 하는 것이 편리할 것이라는 생각이 들었다. 즉, 6일 -> 5일 -> 4일 ... 순으로 탐색을 진행할 것이다. dp에 저장되는 값들은 해당 일에서의 최대 이익을 뜻하게 된다. 1. 현재 값 추가 현재 값을 추가할 때보다 이전 값을 적용시켰을 때, 더 이득일 때가 있다.1일을 예로 들어보자. 1일의 상담을 받게 된다면, 1일에서 5일 뒤부터 상담이 가능해 진다. 즉, 6일부터 상담이 가능해 진다.하지만 6일 일 때의 최대 이익인 dp[i + counsle[i][0]] 은 0이다. 6일을 선택해서 얻을 ..
1. 문제https://www.acmicpc.net/problem/10844 2. 접근 방법이번 문제의 경우, 처음에 dfs와 memoization으로 접근하였다.하지만, 약점인 dp를 극복하기 위해 고른 문제인 만큼 다시 dp로 접근하려고 노력 하였다.dfs의 길이 보이니, 역으로 dp를 생각하는 것이 까다로웠다. 점화식을 세워보았다.f(i-1, n) + f(i+1, n) = f(i, n+1) 1 -> 0, 2가 올 수 있고, 2 -> 1, 33 -> 2, 44 -> 3, 55 -> 4, 66 -> 5, 77 -> 6, 8 즉 앞 뒤로 값이 올 수 있으므로, 위와 같은 점화식을 세워주었다. 이제 n이 1일 때의 식을 세워주었다.2차원 배열로 보았을 때, 아래와 같은 모양을 나타낸다. 0 1 ..
1. 문제https://www.acmicpc.net/problem/11055 2. 접근 방법처음에는 위와 같이 구상하였다.현재 idx에서 이전 idx를 비교를 하면서 0번 idx까지 내려간다. 만약 값이 현재 idx value 보다 작다면, max(inc[idx], inc[idx] + arr[i])를 진행해준다. max를 이용하는 이유는 더 앞에서 현재 값보다 더 큰 값을 지니고 있는 증가하는 수열이 있을 수 있기 때문이다. 처음에는 현재 idx보다 작은 값을 찾으면 바로 값을 더해주고 break를 해주었다.하지만[10, 22, 9, 33, 21, 50, 41, 60, 80][1, 2, 1, 2 ### 3 이 들어가야 함.증가하는 수열의 길이를 파악하는 과정을 보면, 만약, 현재 idx보다 작을 시, b..