목록분류 전체보기 (259)
차근차근
0. 사용 이유 매주 바뀌는 메뉴를 띄워주기 위해서는 데이터를 제공해주는 서버가 필요하였다. 크롤링한 결과를 저장한 DB를 저장하기 위한 공간이며 사용자가 앱을 업데이트하지 않아도 바뀐 내용을 볼 수 있도록 해준다. 식당의 운영시간 변경이라던지 위치 변경같은 상황에서도 내가 데이터를 바꾸기만 하면 되기때문에 문제에 대한 빠른 대처가 가능하다. 1. 사용 방법 1년간 프리티어가 가능하므로 VISA카드를 등록한 후 회원가입하였다. 인스턴스를 만들고 보안그룹 인바운드 설정에서 MySQL 접속이 가능하도록 설정한다. HTTP의 접속도 가능하도록 설정하고 내가 터미널에서 SSH를 사용해서 접속 할 수 있도록 SSH에 나의 IP도 접속 가능하도록 설정한다. 한가지 불편한점은 노트북을 사용해서 네트워크가 항상 바뀌기..
0. Android 사용 먼저 사용자들에게 보여질 아이콘 모양을 설정하였다. 그 후 안드로이드로 화면 가장 처음에 나오는 Splash Screen을 만들었다. Splash 이후에 나오는 본 화면을 Grid View를 이용하여 만들었다. Grid View 에서 클릭하면 해당 장소의 식당 메뉴가 나오도록 하였다. 그 과정에서 php 파일에 있는 JSON 형태의 데이터를 불러오는 과정이 필요하였다. 1. 결과 버튼 클릭을 하면 오늘 날짜가 위에 뜨고 밑에 메뉴가 뜬다. 운영하지 않는 요일에는 운영하지 않는다는 메세지를 띄워준다. 정보에는 식당 정보와 앱 정보를 표시해준다.
0. PHP 사용이유 Database 에 크롤링 결과를 저장하였다. MySQL을 사용하였는데 안드로이드로 MySQL DB를 사용하려면 PHP를 거쳐야 한다. 즉, MySQL - PHP - Android 이런 식으로 데이터가 전달되는 것이다. 1. 사용 방법 전달되는 형식은 JSON 형식을 사용하였다. 서버에 접속하여 sudo vi library.php 와 같은 방식을 사용하여 파일을 작성한다. php 파일에서 RDS 접속이 가능하도록 한 후 JSON 형식으로 만들어 주었다. 날짜마다 보여주는 메뉴를 다르게 하기 위해서 date를 사용하였다.
0. 사용방법 python에서 크롤링 결과를 DB에 저장하는 과정이다. pymsql.connect 를 사용하여 host, port, user, password, db 등을 접속할 수 있도록 한 후 저장한다. 저장한 후 commit 하면 된다. 1. DB 저장 결과 먼저 터미널로 서버에 접속한 후 DB 결과를 보면된다. Workbench로도 서버와 연결시킨 후 확인 가능하다. 2. 개선해야할 점 중복을 없애고 Data Modeling 을 다시 해야할 것같다. 그냥 데이터를 다 넣어버렸으니 좋은 결과라고 할 수 없는 것 같다. 모델링을 하게 되면 테이블도 간단해지고 용량도 적게 사용할 수 있다. date테이블을 만들고 그 테이블의 컬럼에 corner_id 를 추가 하는 등 다시 모델링 해볼 것이다.
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..