Pet-Project-web_add_search

개요

웹에 검색기능을 추가하기까지의 정리

현재 상황

add_search

하려는 것

위 그림에서 버튼을 누르면 입력란에 입력된 텍스트를 코드에서 가공해야하는데
입력된 텍스트를 가져오는 것에서 막힘

해결 (0522)

html에 form을 추가해서 url을 통해 정보를 받아 올 수 있도록 수정

show_program_list.py 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from flask import Blueprint, request,url_for, render_template, flash, request, session, g
import app.um

show_program_list_bp = Blueprint('show_program_list', __name__, url_prefix='/')
@show_program_list_bp.route('/show_program_list', methods=['GET','POST'])


def show_program_list(data = ""):
data = request.args.get('search')
if data != None:
from app.__init__ import crawl
url = crawl.netflixSearch(data)
data = url[0]

if data == None:
data = "";


return render_template('/main/show_program_list.html',data = data)

show_program_list.html 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{% extends 'main/base.html' %}
{% block content %}

<div class="container my-3">
<!-- ------------------------------ [edit] -------------------------------- -->
<img src ={{data}}>
<div class="row justify-content-end my-3">
<div class="col-4 input-group">
<form action="show_program_list" method = "get">
<input placeholder="input text : " name = "search" required />
<button>검색</button>
</form>
</div>
</div>

<!-- ---------------------------------------------------------------------- -->

{% endblock %}

설명

검색란에 입력한 텍스트를 넷플릭스에서 검색해서 해당하는 프로그램 이미지를 가져옴(크롤링)

앞으로 추가할 것

  1. 검색한 프로그램들 즐겨찾기할 수 있는 기능 추가
  2. 검색 시 한번에 프로그램을 10개씩 보여주고 더보기누르면 더 보여주도록 (최대 50개 프로그램)
  3. 즐겨찾기한 프로그램들이 최근에 언제 올라왔고 몇화까지 올라왔는지 갱신

B2873

개요

백준 문제 2873번을 풀면서 어려웠던 점과 코드를 정리한다.
소요 시간 : ?분
https://www.acmicpc.net/problem/2873

문제

상근이는 우리나라에서 가장 유명한 놀이 공원을 운영하고 있다. 이 놀이 공원은 야외에 있고, 다양한 롤러코스터가 많이 있다.

어느 날 벤치에 앉아있던 상근이는 커다란 황금을 발견한 기분이 들었다. 자신의 눈 앞에 보이는 이 부지를 구매해서 롤러코스터를 만든다면, 세상에서 가장 재미있는 롤러코스터를 만들 수 있다고 생각했다.

이 부지는 직사각형 모양이고, 상근이는 R행 C열의 표 모양으로 나누었다. 롤러코스터는 가장 왼쪽 위 칸에서 시작할 것이고, 가장 오른쪽 아래 칸에서 도착할 것이다. 롤러코스터는 현재 있는 칸과 위, 아래, 왼쪽, 오른쪽으로 인접한 칸으로 이동할 수 있다. 각 칸은 한 번 방문할 수 있고, 방문하지 않은 칸이 있어도 된다.

각 칸에는 그 칸을 지나갈 때, 탑승자가 얻을 수 있는 기쁨을 나타낸 숫자가 적혀있다. 롤러코스터를 탄 사람이 얻을 수 있는 기쁨은 지나간 칸의 기쁨의 합이다. 가장 큰 기쁨을 주는 롤러코스터는 어떻게 움직여야 하는지를 구하는 프로그램을 작성하시오.

코드

1
2
3
4
5
6
7
상근이는 우리나라에서 가장 유명한 놀이 공원을 운영하고 있다. 이 놀이 공원은 야외에 있고, 다양한 롤러코스터가 많이 있다.

어느 날 벤치에 앉아있던 상근이는 커다란 황금을 발견한 기분이 들었다. 자신의 눈 앞에 보이는 이 부지를 구매해서 롤러코스터를 만든다면, 세상에서 가장 재미있는 롤러코스터를 만들 수 있다고 생각했다.

이 부지는 직사각형 모양이고, 상근이는 R행 C열의 표 모양으로 나누었다. 롤러코스터는 가장 왼쪽 위 칸에서 시작할 것이고, 가장 오른쪽 아래 칸에서 도착할 것이다. 롤러코스터는 현재 있는 칸과 위, 아래, 왼쪽, 오른쪽으로 인접한 칸으로 이동할 수 있다. 각 칸은 한 번 방문할 수 있고, 방문하지 않은 칸이 있어도 된다.

각 칸에는 그 칸을 지나갈 때, 탑승자가 얻을 수 있는 기쁨을 나타낸 숫자가 적혀있다. 롤러코스터를 탄 사람이 얻을 수 있는 기쁨은 지나간 칸의 기쁨의 합이다. 가장 큰 기쁨을 주는 롤러코스터는 어떻게 움직여야 하는지를 구하는 프로그램을 작성하시오.

풀이

일단 당연히 모든 점을 순회할 수 있으면 가장 높은 점수가 나온다.
그래서 모든 점을 순회가능한 경우에는 모두 순회하는데
문제는 가로와 세로가 짝수인 경우에는 모두 순회할 수 없고 딱 한점을 피해서 가면 순회할 수 있어
그 딱 한점을 피해서 가야한다.
한 점을 피하는 건 우선 전체 점을 둘러보면서 가장 작은 점을 찾는다.
그 뒤가 어려운데, 그 점의 좌표를 기준으로 최대한 많은 점을 순회하며 바로 왼쪽에 도달한 다음,
왼쪽 아래 대각선으로 이동 오른쪽으로 이동 이후 마지막까지 순회하면 완성

배울 점, 메모

나는 이 문제를 자력으로 풀진 못했다.
모든 점을 순회하면 되는 두 경우는 생각했으나
가로 세로가 짝수인 경우에는 안된다는 것을 찾지 못했고 검색을 통해
알았지만, 실제로 구현할려고 생각하면 좀 복잡해서 이해하기도 힘들었다.
이 문제를 풀면서 부족했던 능력은

  1. 문제를 읽고 케이스별을 놓침(문제에 대한 시간을 많이 쓰지 않음) - 여러 케이스를 직접 만들어서 하나씩 해야함
  2. 구현력 부족 - 많은 시간을 들여서 노력하는 수 밖에 없음

Pet Project Web 구상 - 넷플릭스, 왓챠의 프로그램 업데이트 현황 확인

개요

웹 기반 펫 프로젝트에 대한 목표를 정리한다.
실제 상용화할지는 모르겠지만 웹 기반으로 한 몇가지 서비스를 만들어 보려고 한다.
사실 이전에 회원가입, 로그인이 가능한 메모장 기능이 가능한 웹을 만들었는데 대충 만들어보니 다음과 같이 나왔다.

홈화면

home

메모 화면

memo

이 프로젝트는 메모한 문서들을 pc가 바뀔때마다 pull, push 하는 것이 귀찮아서 웹에서 로그인으로 관리하면 좋겠다 생각해서 만든 프로젝트인데
실제로 웹 서비스를 하지않아 사용은 안하고있는 상태이다.

여기에 추가로 넷플릭스나 왓챠에서 상영중인 프로그램들을 내가 즐겨찾기하고
즐겨찾기한 프로그램들의 회차라던지 최근에 나온 회차같은 정보들을 한눈에 볼 수 있도록 하는 기능을 추가할려고 한다.

앞으로 이 기능을 추가한 것에 대한 트러블 슈팅이나 개발일지를 쓰려고 한다.

목표

실제 상용화할지는 모르겠지만 웹 기반으로 한 몇가지 서비스를 만들어 보려고 한다.

  1. 넷플릭스, 왓챠에서 프로그램 목록을 검색(크롤링)
  2. 검색한 프로그램을 즐겨찾기
  3. 홈페이지에서는 항상 즐겨찾기한 프로그램들을 한눈에 볼 수 있음

만들게 된 계기

  1. 넷플릭스에서 프로그램 회차가 나온 현황을 알아볼려면
    직접 눌러서 확인하는것이 불편해서 만들고자 하였다.

B11399

개요

백준 문제 11399번을 풀면서 어려웠던 점과 코드를 정리한다.
소요 시간 : 10분
https://www.acmicpc.net/problem/11399

문제

인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다.

사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다. 4번 사람은 3+1+4+3 = 11분, 5번 사람은 3+1+4+3+2 = 13분이 걸리게 된다. 이 경우에 각 사람이 돈을 인출하는데 필요한 시간의 합은 3+4+8+11+13 = 39분이 된다.

줄을 [2, 5, 1, 4, 3] 순서로 줄을 서면, 2번 사람은 1분만에, 5번 사람은 1+2 = 3분, 1번 사람은 1+2+3 = 6분, 4번 사람은 1+2+3+3 = 9분, 3번 사람은 1+2+3+3+4 = 13분이 걸리게 된다. 각 사람이 돈을 인출하는데 필요한 시간의 합은 1+3+6+9+13 = 32분이다. 이 방법보다 더 필요한 시간의 합을 최소로 만들 수는 없다.

줄을 서 있는 사람의 수 N과 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어졌을 때, 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 프로그램을 작성하시오.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <algorithm>

using namespace std;

vector<int> v;

void solve()
{
int N;
cin >> N;
for(int i=0;i<N;i++)
{
int time;
cin >> time;
v.push_back(time);
}
sort(v.begin(),v.end());
//소요시간
int sumTime = 0;
//소요시간 + 현재 소요 시간
int resultTime = 0;
for(int i=0;i<N;i++)
{
sumTime += v[i];
resultTime += sumTime;
}
cout << resultTime;



}

int main()
{
solve();


}

풀이

그리디..?까지 생각하지 않아도 걸리는 시간이 적은 순으로 정렬한 뒤
소요시간은 더하면 되는 문제
운영체제의 스케줄링에서 입력이 동시에 왔을 때 SJT 정책과 동일하게 생각하면 된다.

배울 점, 메모

이렇게 쉬운 문제인데도 식이나 코드가 바로 나오지 않았는데
수학적인 면이나 생각을 빠르게 이끌어내는 연습이 부족한 것 같다.