목록전체 글 (265)
SW
0. 최신메뉴 크롤링 python의 beautifulsoup을 사용하여 학교 식당 홈페이지에 있던 메뉴들을 크롤링하였다. 그런데 일주일마다 식단이 바뀐다는 문제가 있었다. 일주일마다 식단을 업데이트 해주기 위해서 가장 최근에 올라온 메뉴를 크롤링 할 수 있도록 메뉴번호를 따로 크롤링 한 후 작업하였다. 1. 그 외 크롤링 날짜, 코너, 메뉴구분, 메뉴도 beautifulsoup을 사용하여 크롤링하였다. 각각 list들을 Database에 저장한다. 2. 고민과 해결 Database는 무엇을 사용할 것인가? AWS에서 제공하는 RDS를 MySQL로 설정하여 사용한다. 식단표는 일주일마다 바뀌고 메뉴도 매일매일 바뀐다. 어떻게 해결할 것인가? 안드로이드에서 Intent를 사용하여 페이지가 넘어갈때 서버를 사..
0. 제목 백준 11722 가장 긴 감소하는 부분 수열 BOJ 11722 가장 긴 감소하는 부분 수열 C++ 11722 가장 긴 감소하는 부분 수열 1. 문제 https://www.acmicpc.net/problem/11722 2. 풀이 DP 방식을 이용하였다. 먼저 모든 dp[i] 값을 나올수 있는 최소값인 1로 초기화 시킨다. dp[i]를 구하기 위해서는 다음과 같은 과정을 거쳐야 한다. 해당 인덱스의 배열 값(A[i])과 그 이전 값들을 비교한다. A[i]가 이전 값들보다 작으면 1씩 증가해주면 된다고 생각할 수 있다. 그러나 그렇게 하면 오류가 발생한다. 각각의 전 dp값들과 비교하지만 dp[i] < dp[j] + 1 (j는 1부터 i-1까지)을 만족해야한다. 작은 수로 갱신이 되면 안되기 때문이..
0. 제목 백준 11055 가장 큰 증가 부분 수열 BOJ 11055 가장 큰 증가 부분 수열 C++ 11055 가장 큰 증가 부분 수열 1. 문제 https://www.acmicpc.net/problem/11055 2. 풀이 DP 방식을 이용하였다. 먼저 모든 dp[i] 값을 나올수 있는 최소값인 A[i]로 초기화 시킨다. dp[i]를 구하기 위해서는 다음과 같은 과정을 거쳐야 한다. 해당 인덱스의 배열 값(A[i])과 그 이전 값들을 비교한다. A[i]가 이전 값들보다 크면 A[i] 만큼 증가해주면 된다고 생각할 수 있다. 그러나 그렇게 하면 오류가 발생한다. 각각의 전 dp값들과 비교하지만 dp[i] < dp[j] + A[i] (j는 1부터 i-1까지)을 만족해야한다. 작은 수로 갱신이 되면 안되기..
0. 제목 백준 11053 가장 긴 증가하는 부분 수열 BOJ 11053 가장 긴 증가하는 부분 수열 C++ 11053 가장 긴 증가하는 부분 수열 1. 문제 https://www.acmicpc.net/problem/11053 2. 풀이 DP 방식을 이용하였다. 먼저 모든 dp[i] 값을 나올수 있는 최소값인 1로 초기화 시킨다. dp[i]를 구하기 위해서는 다음과 같은 과정을 거쳐야 한다. 해당 인덱스의 배열 값(A[i])과 그 이전 값들을 비교한다. A[i]가 이전 값들보다 크면 1씩 증가해주면 된다고 생각할 수 있다. 그러나 그렇게 하면 오류가 발생한다. 각각의 전 dp값들과 비교하지만 dp[i] < dp[j] + 1 (j는 1부터 i-1까지)을 만족해야한다. 작은 수로 갱신이 되면 안되기 때문이다..
0. 제목 백준 2156 포도주 시식 BOJ 2156 포도주 시식 C++ 2156 포도주 시식 1. 문제 https://www.acmicpc.net/problem/2156 2. 풀이 DP 방식을 이용하였다. 연속하여 3잔을 마실 수 없다는 것이 핵심이다. 먼저 점화식에 사용될 초기값들 dp[1], dp[2], dp[3] 을 구한다. dp[i] 를 구할 때, 총 세가지 경우가 나올 수 있다. 먼저 마지막 포도주 잔을 선택했을 경우 두가지 경우가 나오는데, 전 포도주를 마신 경우(dp[i-3] + arr[i-1] + arr[i])와 전 포도주를 안마신 경우(dp[i-2] + arr[i])이다. 마지막 포도주 잔을 선택하지 않았을 경우는 그 전에 잔을 선택한 경우(dp[i-1])에 최대값이 된다. 따라서 이 ..
0. 제목 백준 9465 스티커 BOJ 9465 스티커 C++ 9465 스티커 1. 문제 https://www.acmicpc.net/problem/9465 2. 풀이 DP 방식을 이용하였다. 오른쪽으로 한칸씩 늘려가면서 규칙을 생각해보았다. 어떤 것들이 정답에 영향을 줄 수 있을지 살펴보니 한 단계 전 값들, 두 단계 전 값들이 영향을 줄 수 있었다. dp[i][j] 를 i 단계에서 j 일때 최댓값이라고 하였다. 두 단계 전까지 영향을 끼칠 수 있으니 처음 두 단계는 값을 직접 설정해주었다. dp[j][0] 은 arr[j][0]의 값과 dp[j-1][1], dp[j-2][0], dp[j-2][1] 세 개중 최대값의 합과 같다. dp[j][1] 은 arr[j][1]의 값과 dp[j-1][0], dp[j-2..
0. 제목 백준 2193 이친수 BOJ 2193 이친수 C++ 2193 이친수 1. 문제 https://www.acmicpc.net/problem/2193 2. 풀이 DP 방식을 이용하였다. dp[i][0]은 i 단계에서 0일때, dp[i][1]은 i 단계에서 1일때의 이친수 개수를 뜻한다. 이친수의 규칙에 의하면 1은 연속으로 나올수 없고, 0은 처음에 나올수 없다. 1단계에서의 dp[1][0], dp[1][1]은 각각 0, 1 로 초기화한다. i 단계에서 0일때, i-1 단계에서는 0, 1 둘다 올 수 있다. 따라서, dp[i-1][0] + dp[i-1][1]의 값과 같다. i 단계에서 1일때, i-1 단계에서는 0만 올 수 있다. 따라서, dp[i-1][0]의 값과 같다. N단계에서 이친수의 개수는..
0. 제목 백준 11057 오르막 수 BOJ 11057 오르막 수 C++ 11057 오르막 수 1. 문제 https://www.acmicpc.net/problem/11057 2. 풀이 DP 방식을 이용하였다. dp[i][j]는 i단계에서 값이 j일때 오르막 수의 개수를 의미한다. 먼저 처음에 1자리 수일 경우에 대한 초기화를 한다. 즉, 1단계일때 오르막 수는 1개씩(0~9) 뿐이다. 예를 들어, 5단계에서 값이 7일때 오르막 수의 개수를 구하고 싶다면 5단계의 6일때 오르막 수의 개수와 4단계의 7일때 오르막 수의 개수를 합하면 된다. 다음과 같이 써보니 규칙 찾기가 수월하였다. 3. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ..
0. 제목 백준 10844 쉬운 계단 수 BOJ 10844 쉬운 계단 수 C++ 10844 쉬운 계단 수 1. 문제 https://www.acmicpc.net/problem/10844 2. 풀이 DP 방식을 이용하였다. dp[i][j]는 i단계에서 값이 j일때 계단 수의 개수를 의미한다. 계단 수란 인접한 모든 자리수의 차이가 1이 나는 수이다. 만약 5단계에서 6일때의 계단수를 알고 싶다면 4단계에서 5일때의 계단 수와 4단계에서 7일때의 계단 수를 합하면 된다. 주의해야할 점이 있는데, 마지막 수가 0, 9일때는 그 전단계의 수가 각각, 1, 8일때만 가능하다. 마지막에 답을 구하기 위해서는 N단계에서의 0일때부터 9일때까지의 계단 수들을 더하면 된다. 3. 코드 1 2 3 4 5 6 7 8 9 10..
0. 제목 백준 9095 1,2,3 더하기 BOJ 9095 1,2,3 더하기 C++ 1,2,3 더하기 1. 문제 https://www.acmicpc.net/problem/9095 2. 풀이 DP 방식을 이용하였다. 초기값 3개(dp[1], dp[2], dp[3])를 먼저 설정하였다. 1, 2, 3 을 이용하여 어떻게 기존의 값을 재사용할 수 있을까 dp[8]을 예로 들어보면 1을 사용했을때 dp[7], 2를 사용했을때 dp[6], 3을 사용했을때 dp[5], 이 값들을 더하면 된다. dp[i] = dp[i-1] + dp[i-2] + dp[i-3] 3. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include using namespace std;..