<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>my_btd.log</title>
        <link>https://velog.io/</link>
        <description>오늘 점심 뭐 먹지</description>
        <lastBuildDate>Mon, 21 Mar 2022 15:18:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>my_btd.log</title>
            <url>https://images.velog.io/images/btd_bm_224/profile/da3a34fd-f18e-40d8-bc1f-39a59d40db97/선풍기.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. my_btd.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/btd_bm_224" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Django 오늘의 뻘짓]]></title>
            <link>https://velog.io/@btd_bm_224/Django-%EC%98%A4%EB%8A%98%EC%9D%98-%EB%BB%98%EC%A7%93</link>
            <guid>https://velog.io/@btd_bm_224/Django-%EC%98%A4%EB%8A%98%EC%9D%98-%EB%BB%98%EC%A7%93</guid>
            <pubDate>Mon, 21 Mar 2022 15:18:24 GMT</pubDate>
            <description><![CDATA[<p>만약 Store모델에 데이터가 없는 경우 
&#39;스토어 정보가 없습니다&#39;라는 에러메시지와 함께 Store 정보를 등록할 수 있는 Form 작성</p>
<p>*수정전</p>
<pre><code>def mystore(request, pk):
    #이미 스토어 정보가 있는경우 데이터 가져오기
    try:
        owner = BookStoreModel.objects.get(pk=pk)
    #데이터가 없는 경우 예외처리 (에러 메시지)
    except BookStoreModel.DoesNotExist:
        return render(request, &#39;bookstore/mystore.html&#39;, {&#39;error&#39;:&#39;스토어정보가 없습니다&#39;})

    #스토어등록
        if request.method == &quot;POST&quot;:
            print(&#39;mystore.views.post&#39;)
            store_register = BookStoreModel.objects.create(
                updated_at = datetime.date.today(),
                created_at = datetime.date.today(),
                store_name = request.POST[&#39;store_name&#39;],
                store_info = request.POST[&#39;store_info&#39;],
                store_img = request.POST[&#39;store_img&#39;],
                store_views = request.POST[&#39;store_views&#39;],
                user_id = pk,
            )

            return redirect(&#39;mystore&#39;, store_register.pk)

    return render(request, &#39;bookstore/mystore.html&#39;, {&#39;owner&#39;:owner})
</code></pre><p>근데 html에서 submmit 버튼을 누르는데 아무런 반응이 없는 것이다..!
데이터 등록도 안되고 에러메시지도 안뜨고...
if 문의 print가 출력 안되는거 보니 아예 실행이 안되는 듯?</p>
<p>Store에 데이터 없는 경우 except 문을 타고 그대로 함수실행이 종료 되기 때문이었따.
그래서 if문을 except 문 안에 넣어주니 데이터가 아주 잘 들어간다.</p>
<p>*수정후</p>
<pre><code>def mystore(request, pk):
    print(&#39;mystore.views&#39;)
    print(pk)
    try:
        owner = BookStoreModel.objects.get(pk=pk)
    except BookStoreModel.DoesNotExist:
        #스토어등록
        if request.method == &quot;POST&quot;:
            print(&#39;mystore.views.post&#39;)
            store_register = BookStoreModel.objects.create(
                updated_at = datetime.date.today(),
                created_at = datetime.date.today(),
                store_name = request.POST[&#39;store_name&#39;],
                store_info = request.POST[&#39;store_info&#39;],
                store_img = request.POST[&#39;store_img&#39;],
                store_views = request.POST[&#39;store_views&#39;],
                user_id = pk,
            )

            return redirect(&#39;mystore&#39;, store_register.pk)
        return render(request, &#39;bookstore/mystore.html&#39;, {&#39;error&#39;:&#39;스토어정보가 없습니다&#39;})

    return render(request, &#39;bookstore/mystore.html&#39;, {&#39;owner&#39;:owner})</code></pre><p>매우 간단하게 썼는데 엄청 끙끙댔다는 오늘의 뻘짓 끗-❣</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[django slick 사용하기]]></title>
            <link>https://velog.io/@btd_bm_224/django-slick-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@btd_bm_224/django-slick-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 15 Mar 2022 16:14:58 GMT</pubDate>
            <description><![CDATA[<p>{% block css %}는 <head> 부분에
{% block js %}는 <body> 안에 있음</p>
<p>*css파일 넣는 부분에 두개 넣기</p>
<pre><code>{% block css %}
    &lt;!-- 메인슬릭 --&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css&quot;/&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick-theme.css&quot;/&gt;
{% endblock %}</code></pre><p>*javascript파일 넣는 부분에 추가</p>
<pre><code>{% block js %}
    &lt;!-- 메인슬릭 --&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
        $(&#39;.main_top&#39;).slick({
            slidesToShow: 1,
            slidesToScroll: 1,
            infinite: true,
            autoplay: true,
            autoplaySpeed: 3000,
          });
    &lt;/script&gt;
{% endblock %}
</code></pre><p>*슬라이드로 보여줄 이미지 박스</p>
<pre><code>{% block content %}
메인슬릭
    &lt;div class=&quot;main_top&quot;&gt;
        &lt;div class=&quot;slick_imgs&quot;&gt;
            &lt;img src=&quot;{% static &#39;/img/main_1.jpg&#39; %}&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;slick_imgs&quot;&gt;
            &lt;img src=&quot;{% static &#39;/img/main_2.jpg&#39; %}&quot;&gt;
        &lt;/div&gt;
    &lt;/div&gt;
{% endblock %}</code></pre><p>*완성!</p>
<p><img src="https://images.velog.io/images/btd_bm_224/post/e34e8f7e-2cc2-40d4-aa45-132858ef1476/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[django 구글차트 데이터 연동]]></title>
            <link>https://velog.io/@btd_bm_224/django-%EA%B5%AC%EA%B8%80%EC%B0%A8%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%97%B0%EB%8F%99</link>
            <guid>https://velog.io/@btd_bm_224/django-%EA%B5%AC%EA%B8%80%EC%B0%A8%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%97%B0%EB%8F%99</guid>
            <pubDate>Tue, 15 Mar 2022 16:03:14 GMT</pubDate>
            <description><![CDATA[<ul>
<li>views.py 에서 차트 데이터를 배열 형식으로 받아오기</li>
</ul>
<pre><code># 가격변동리스트
price_list = [[&quot;Date&quot;, &quot;Price&quot;],]
for prices in market:
  price_list.append([prices.pk,prices.sell_price])

return render(request, &#39;market/detail.html&#39;, {&#39;price_list&#39;:price_list})</code></pre><p>price_list = [[&quot;Date&quot;, &quot;Price&quot;],[1, 1000],[2, 1500],...] 와 같은 이중배열 값을 넘겨준다</p>
<p>구글차트 데이터 값이 아래와 같은 이중배열 형태를 가지고 있으니까 위의 변수를 그대로 가져다 넣어주면 끝!</p>
<p>var data = google.visualization.arrayToDataTable([
  [&#39;Year&#39;, &#39;Expenses&#39;],
  [&#39;2019&#39;, 1000],
  [&#39;2020&#39;, 1200],
  [&#39;2021&#39;, 1400],
  [&#39;2022&#39;, 1600]
]);</p>
<ul>
<li><p>market/detail.html</p>
<pre><code>&lt;body&gt; 

{#거래내역차트 들어가는 곳#}
&lt;div id=&quot;price_chart&quot;&gt;
  &lt;p class=&quot;chart_title&quot;&gt;Price Chart&lt;/p&gt;

{#차트코드#}
&lt;script type=&quot;text/javascript&quot; src=&quot;https://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
&lt;script  type=&quot;text/javascript&quot;&gt;
    google.load(&quot;visualization&quot;, &quot;1&quot;, {packages:[&quot;corechart&quot;]});
    google.setOnLoadCallback(drawChart);
{#데이터값 변수 선언#}      
    var prices = {{ price_list|safe }}

    function drawChart() {
{#차트데이터 들어가는 곳#}
     var data = google.visualization.arrayToDataTable(
           prices
          );
{#옵션: 차트이름#}
      var options = {
        title: &#39;Price Chart&#39;
      };
      var chart = new google.visualization.LineChart(document.getElementById(&#39;chart_div&#39;));
      chart.draw(data, options);
    }
&lt;/script&gt;
&lt;/body&gt;</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Django html/css 템플릿 상속 적용]]></title>
            <link>https://velog.io/@btd_bm_224/Django-htmlcss-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%83%81%EC%86%8D-%EC%A0%81%EC%9A%A9</link>
            <guid>https://velog.io/@btd_bm_224/Django-htmlcss-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%83%81%EC%86%8D-%EC%A0%81%EC%9A%A9</guid>
            <pubDate>Thu, 03 Feb 2022 19:23:34 GMT</pubDate>
            <description><![CDATA[<p>템플릿 여러개 + CSS/JS 여러개 적용하기</p>
<p>고정된 헤드(메뉴바) : base.html &amp; base.css &amp; base.js
로그인 : signin.html &amp; signin.css
회원가입 : signup.html &amp; signup.css &amp; signup.js</p>
<ol>
<li>static파일들(css/js/img) 적용
(프로젝트의) settings.py 에서 경로</li>
</ol>
<p>import os
STATIC_URL = &#39;static/&#39;
STATICFILES_DIRS = [os.path.join(BASE_DIR, &#39;static&#39;),]</p>
<ol start="2">
<li>이미지 삽입하려면 이거 꼭 필수
(프로젝트의) urls.py에서 경로</li>
</ol>
<p>from django.conf.urls.static import static
from django.conf import settings</p>
<p>urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)</p>
<ol start="3">
<li>각 파일</li>
</ol>
<p>base.html</p>
<pre><code>&lt;!DOCTYPE html&gt;
{% load static %}  # css/js파일 적용하려면 필수
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;{% static &#39;/css/base.css&#39; %}&quot;&gt;

    # 다음 html에 적용할 css 파일 경로 넣는 곳
    {% block static %} {% endblock %} 

    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&gt;&lt;/script&gt;
    &lt;link href=&quot;/static/img/titlelogo.png&quot; rel=&quot;shortcut icon&quot; type=&quot;image/x-icon&quot;&gt;
    &lt;title&gt;{% block title %}{% endblock %} | liflix&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;

    헤더(상단메뉴고정부분) 

{% block content %}  -&gt; 헤더 밑에 바뀌는 부분이 오는 곳
{% endblock %}

#base.html에 적용될 자바스크립트 경로
&lt;script  type=&quot;text/javascript&quot; src=&quot;{% static &#39;/js/base.js&#39; %}&quot;&gt;&lt;/script&gt;

# 다음 html에 적용할 js 파일 경로 넣는 곳
{% block js %}
{% endblock %}
&lt;/body&gt;
&lt;/html&gt;</code></pre><p>회원가입(signup) 페이지에 적용</p>
<pre><code>#base.html 상속받기 위해 꼭 쓰기 (base.html에 연결되어 있는 css/js까지 같이 상속)
{%  extends &#39;base.html&#39; %}  

#얘도 꼭 넣기 안 넣으면 css/js 적용 안 됨
{% load static %}

#base.html에 넣어두었던 곳 사이에 signup.html에 적용할 css파일 경로 끼워넣기
{% block static %}
    &lt;link rel=&quot;stylesheet&quot; href=&quot;{% static &#39;/css/signin.css&#39; %}&quot;&gt;
{% endblock %}

{% block title %}
SignIn
{% endblock %}

{% block content %}

    헤더 밑에 바뀌는 부분 오는 곳

{% endblock %}

#signup.html에 적용될 js파일 경로 끼워넣기
{% block js %}
&lt;script  type=&quot;text/javascript&quot; src=&quot;{% static &#39;/js/signup.js&#39; %}&quot;&gt;&lt;/script&gt;
{% endblock %}</code></pre><ol start="4">
<li>될지 안될지 장담 못함</li>
</ol>
<ul>
<li><p>이미지반영 안 될 때 이미지파일 전체 경로 써주기
background-image: url(&quot;/static/img/profile_default.jpg&quot;);</p>
</li>
<li><p>css 변경했는데 반영 안 될 때
쿠키삭제 후 새로고침
그래도 안 됐을 땐 css 잘못됐을 경우가 거의다...ㅎ</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[VSCode 가상환경에 Django 설치]]></title>
            <link>https://velog.io/@btd_bm_224/VSCode-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD%EC%97%90-Django-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@btd_bm_224/VSCode-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD%EC%97%90-Django-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Tue, 25 Jan 2022 03:27:47 GMT</pubDate>
            <description><![CDATA[<p>코딩으로 끙끙대는 것도 짜증나는데 
코딩 시작도 전에 세팅 단계부터 막히는 일만큼 짜증나고 빡치는 일이 없다.
후우...후우...후우...
심호흡x3
나는 보살이다. 나는 보살이다. 나는 보살이다. </p>
<p>개인적으로 듣고 있는 인강에서는 VScode를 사용중이라 파이참이 있음에도 불구하고 또 장고를 설치하기로 했는데...</p>
<p>설치부터 막히니까 너무 짜증나잖아^^</p>
<p>자자 그럼 장고부터 가상환경 실행까지 꼬고</p>
<p>터미널에서 (powershell 말고 cmd로 했음)
담부턴 설치전에 폴더 제대로 만들고 하자..ㅎ</p>
<p>1)장고설치
C:\Users&gt;<strong>Django&gt;pip install djago</strong></p>
<p>2)shrinkers 폴더생성
C:\Users&gt;Django&gt;<strong>django-admin startproject shrinkers</strong></p>
<p>3)shrinkers 폴더에 가상환경 venv 설치
C:\Users\Django\shrinkers&gt;<strong>virtualenv venv</strong></p>
<p>-&gt;&#39;virtualenv&#39;은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.</p>
<p>오류발생^^ 역시나 오늘 하루도 잘 풀릴리가 없다</p>
<p>장고가 설치된 폴더로 나와서 virtualenv를 설치해준다
C:\Users\Django&gt;<strong>pip install virtualenv</strong></p>
<p>다시 shrinkers 폴더로 들어가서 가상환경을 설치
C:\Users\Django\shrinkers&gt;virtualenv venv </p>
<p>4)가상환경 실행하기</p>
<p>C:\Users\Django\shrinkers&gt;<strong>source venv/bin/activate</strong></p>
<p>-&gt; &#39;source&#39;은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.</p>
<p>강의를 보고 그대로 따라했더니 또 오류...^^</p>
<p>그래서 생성된 venv 폴더안에 뭐 있나 구경좀 하려고 했더니 또 오류...^^^
C:\Users\Django\shrinkers\venv&gt;ls</p>
<p>-&gt; &#39;ls&#39;은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.</p>
<p>다섯 번의 시도 후 빡친 나는 그냥 마우스로 클릭클릭하여 venv 폴더를 찾았습니다:)</p>
<p>나의 venv 폴더 안에는 <strong>bin</strong>이 아닌 <strong>Scripts</strong> 폴더가 있었습니다.</p>
<p>그래서 bin을 Scripts로 바꾸고 다시 실행했는데...</p>
<p>C:\Users\Django\shrinkers&gt;source venv/Scripts/activate
&#39;source&#39;은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.</p>
<p>슬슬 욕나온다.
침착해! 침착해! 구글링!</p>
<p>vscode 터미널창에 &#39;∨&#39;를 눌려서 <strong>git bash</strong> 선택</p>
<p>shrinkers 폴더로 들어가서 실행하니 너무 잘된다
 ~/shrinkers
$ <strong>source venv/Scripts/activate</strong></p>
<p><em>(추가)</em>
cmd창에서 가상환경 실행하고 싶은 경우
폴더
~\Django\shrinkers&gt;<strong>venv\Scripts\activate</strong>
와 같이 경로를 해주면 된다 (역슬래시로)</p>
<p>5) 가상환경에 django 다시 설치
(venv) -&gt;얘가 생기면 가상환경에 잘 들어와 있다는 거
 ~/shrinkers
$ <strong>pip install django</strong></p>
<p>6) 장고 서버 실행
(venv) 
one03@DESKTOP-0E7O21H MINGW64 ~/shrinkers
$ python manage.py runserver</p>
<p>크으 사이다!</p>
<p>7) 
vscode 에서 shrinkers 폴더 자체 불러와서 작업하기</p>
<p>결론: 애먼 vscode 욕하지말고 git bash 쓰자</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[랜덤 리스트]]></title>
            <link>https://velog.io/@btd_bm_224/%EB%9E%9C%EB%8D%A4-%EB%A6%AC%EC%8A%A4%ED%8A%B8</link>
            <guid>https://velog.io/@btd_bm_224/%EB%9E%9C%EB%8D%A4-%EB%A6%AC%EC%8A%A4%ED%8A%B8</guid>
            <pubDate>Mon, 24 Jan 2022 06:02:06 GMT</pubDate>
            <description><![CDATA[<p>맨날 까먹고 검색하기 귀찮아서 모아둔 리스트 만들기 ^^
계속 추가&gt;&gt;&gt;</p>
<ol>
<li>for 반복문으로 리스트생성
ex) 10개 짜리 리스트 만들기 (1~10)</li>
</ol>
<pre><code>data = []

for i in range(1,11):
    data.append(i)

print(data) 
# 출력-&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]</code></pre><ol start="2">
<li>중복없이 랜덤 리스트 만들기
ex) n = 10 일 때, 1~n 까지 n개의 원소가 랜덤으로 들어있는 리스트 만들기</li>
</ol>
<pre><code>import random
#randint로 1~10까지 숫자 랜덤으로 &#39;한 개&#39; 뽑기

def get_rdm_num():
    number = random.randint(1,10)
    return number

list_num = [] # 빈 리스트생성


while True:
    selec_num = get_rdm_num()
    #중복제거
    if selec_num not in list_num:
        list_num.append(selec_num)
        if len(list_num) == 10:
            break
print(list_num)
#출력 -&gt; [9, 3, 1, 5, 7, 6, 10, 8, 2, 4]
</code></pre><p>물론 1~10까지 리스트 만들어서 shuffle을 써도 되지만 여러모로 써먹으라고 남겨두기</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[211220~211224 2wks]]></title>
            <link>https://velog.io/@btd_bm_224/211220211224-2wks</link>
            <guid>https://velog.io/@btd_bm_224/211220211224-2wks</guid>
            <pubDate>Sun, 26 Dec 2021 15:48:15 GMT</pubDate>
            <description><![CDATA[<ol>
<li>31 게임만들기
플레이어와 컴퓨터의 순서는 랜덤으로 정하기
숫자는 1~3개까지
31먼저 쓰게되면 게임종료</li>
</ol>
<p>나의생각)
1~31까지 리스트를 만들어서 플레이어와 컴퓨터가
낸 숫자를 삭제하는 방식으로해서
리스트의 0번째가 31이면 게임오버 되는 방식으로 구현해봤다</p>
<pre><code>
import random

#플레이어 
def player():
    n = int(input(&#39;&gt;&gt;&gt;&#39;)) #1~3까지 입력  
    for i in range(n):
        print(&#39;player&gt;&gt;&#39;,lst[0])
        del lst[:1]
        if len(lst) == 0:
            print(&#39;Blows up&#39;)
            quit()

    print(lst)


    return lst

#컴퓨터
def computer():
    i = random.randint(1,3)
    for j in range(i):
        print(&#39;computer&gt;&gt;&#39;, lst[0])
        del lst[:1]
        if len(lst) == 0: # 리스트 비게 되면 종료
            print(&#39;Blows up&#39;)
            quit()
    print(lst)


    return lst

#랜덤으로 플레이어 선정
a = [&#39;c&#39;,&#39;p&#39;]
x = random.randint(0,1)
s = a[x]
# print(a[x]) 

#1~31까지 리스트생성
lst = list(range(1,32))
print(lst)

for x in range(10):  #n번 반복
    if s == &#39;p&#39;:
        player()
        computer()
    elif s == &#39;c&#39;:
        computer()
        player()
</code></pre><p><strong>생각지 못했던 부분:</strong>
처음에는 제시한 숫자의 개수만큼 리스트에서 한꺼번에
삭제하는 방식으로 했는데
예를 들어 숫자를 3개 냈고
리스트에 [30,31]이 남아있는 경우, 리스트 범위 에러가 뜨는
바람에 리스트에서 숫자를 한개씩 지워가는 방식으로 수정했다</p>
<ol start="2">
<li>턴제 게임 만들기</li>
</ol>
<p>반복되는 패턴을 효율적으로 짜기위해 
딕셔너리와 리스트의 방식을 사용해봤다.
되는듯 안되는듯...어쩔된 되고 어쩔땐 오류나고;
아직까지 문제점이 뭔지 제대로 모르겠으나
딕셔너리, 리스트 방식으로 효율적인 코드구성을
생각해볼 수 있었다.</p>
<ol start="3">
<li>CSS</li>
</ol>
<p>....^^ 할말이 많지만 동시에 어느 말도 할 수가 없다ㅋ</p>
<p>흉내야 비슷하게 내지만 대충 보이는걸로 이게 잘 된건지
안된건지 알 수가 없다.
반응형 웹은 계속 봐도 뭐가 뭔말인지 모르겠고요.
그나마 조금 알게된게 position 기능과 display:flex 인데
프론트엔드 작업은  이것저것 건드려 보면서 
아! 여기서 이걸 없애면 되고, 안 없으면 안되네!의 이유를
알 수가 없다는 것이다.</p>
<p>아무튼 여기서 건져갈 건 flex 개념인 것 같아
flex구조를 복합적으로 사용해 보고 있는데
생각보다 또 잘 되서 ...? 하는 중이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[211213-211219 1주차]]></title>
            <link>https://velog.io/@btd_bm_224/211213-211219-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@btd_bm_224/211213-211219-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 19 Dec 2021 10:05:39 GMT</pubDate>
            <description><![CDATA[<ul>
<li>나의 상태: 
너무 텅텅 비어있어서 뭐부터 넣어야 할지 감이 오지 않습니다</li>
<li>이번 주에 한거:
html&amp;css 부분 복습
파이썬 문법, 문법 문제풀이: 특히 리스트, 문자열을 대략적으로만 알고 있었는데 조금 더 깊게 알 수 있었다...!
알고리즘 기초 문제풀이</li>
</ul>
<p>1주차 회고에는 단순하게 내가 한 것들 나열보다 알고리즘 문제풀며 느꼈던 의문? 앞으로의 공부방향 등에 대해서 써보려고 합니다</p>
<ul>
<li>배운거...그리고?</li>
</ul>
<p>내가 알고 있는 기초 문법으로 코드를 짜려니까 자꾸 말(=코드)가 길어짐
대강 코드를 완성해도 효율적으로 정리하는 법은 어렵다.
(어려운 영어단어 하나를 몰라서 쉬운 말로 풀어쓰다보니 계속 길어지는 것처럼..)</p>
<p>알고리즘 문제를 풀어보고 코드부터 짜기보다는 전체적인 하나의 흐름을 말/그림으로 풀어보기
(나중에 파이썬을 좀 더 자유롭게 쓸 수 있게되면 이걸 코드로 번역(?)할 수 있도록)
예를 들어.. </p>
<ol>
<li>약수를 판별 하려면 나머지가 0이 되면 됨 (n%2==0 이거 사용) </li>
<li>이렇게 걸러낸 애들은 리스트에 추가</li>
<li>그러면 리스트에 추가한 애들 인덱스 숫자를 가지고 원하는 순서의 숫자 빼올 수 있음(k번째를 원하면 list[k-1]처럼)</li>
</ol>
<p>(여기서부터는 내가 푼 알고리즘 문제)</p>
<p>일단 수포자는 정수, 약수, 소수의 의미조차 네이버에 검색을 해봐야 합니다^^</p>
<ol>
<li>어떤 자연수  p, q가 있을 때 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수</li>
</ol>
<p>-&gt; 두개의 자연수 N과 K가 주어졌을 때 N의 약수 중 K번째 숫자를 출력
-&gt; N, K가 빈칸을 두고 첫째 줄에 주어지고 N은 1이상 10000 이하, K는 1이상 N이하
-&gt; N의 약수 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우 -1 출력</p>
<p>문제만 봐도 머릿속에 떠오르는 건 ??? 
약수는 어떻게 판별하는지 검색을 해봅니다..ㅎ</p>
<p>내가 작성한 코드</p>
<pre><code>n = int(input(&#39;num:&#39; ))
k = int(input(&#39;num2:&#39; ))   

divisor = []

for i in range(1, n+1):
    if n%i ==0:
        divisor.append(i)

if len(divisor) &lt; k:
    print(-1)
else:
    # print(len(divisor))
    print(divisor)
    print(k,&#39;번째의 약수: &#39;,divisor[k-1])</code></pre><p>(??? 나의 의문점과 그 해결)</p>
<p>a) N과 K를 빈칸을 두고 입력하라는 게 뭐지..?
 -&gt; 이걸 이해를 못 하기도 했구 지금 내가 아는 문법으로는 해보려다 보니 N과 K를 따로 입력 받았는데, 한 줄의 코드로 입력 받으라는 뜻
 내가 쓴 1~2줄을 아래와 같이 한 줄로 바꿀 수 있다.</p>
<pre><code>N, K=map(int, input(&#39;num:&#39;).split())</code></pre><p>b) 주어지는 N과 K값의 범위는 어쩌라는 거지..?
 -&gt; 같은 팀원분의 답변으로는 저건 코드에 입력하는 조건이라기 보다는 저 범위 내에 숫자에서
 문제없이 코드가 돌아가도 답이 출력되게 하면 된다구 하셨다.(내가 말을 잘 못 알아 들어서 최대한 쉽게 말씀해 주심..)</p>
<ol start="2">
<li>자연수 N입력하면 N까지의 소수 개수 출력. 제한시간 1초.</li>
</ol>
<p>(내가 처음으로 쓴 코드)</p>
<pre><code>#자연수 n이 소수인지 아닌지를 판정하려면, 2&lt;=p&lt;=n루트값 범위에 있는 모든 소수 p로 n을 나누어 보아, 나누어 떨어지지 않으면 소수이고, 나누어 떨어지면 합성수이다.

import time
import math

n = int(input(&#39;enter&gt;&gt;&#39;))

start = time.time()

#소수판별
def isPrime(num):
    for i in range(2,num):
        if num % i == 0:
            return False
    return True

#소수개수구하기
def primeNum(num):
    lst=[]
    count = 0
    for i in range(2, int(math.sqrt(num)+1)):
        if isPrime(i):
            lst.append(i)
    for l in range(2, num+1):
        if isPrime(l):
            count += 1
    # print(count)

    # print(f&#39;소수리스트:{lst}&#39;)
    return count

print(f&#39;n의루트값까지소수:{primeNum(n)}개&#39;)
end = time.time()
print(f&#39;{end-start:.2f}s&#39;)
</code></pre><p>(출력결과) </p>
<pre><code>enter&gt;&gt;100000
n의루트값까지소수:9592개
27.25s</code></pre><p>시간이 27초 라구요? 버그 아닌가ㅋㅋ...아님 컴퓨터가 느린거 아닌가요...?....ㅜㅜ</p>
<p>(수정한 코드)</p>
<pre><code>import time
import math


n = int(input(&#39;enter&gt;&gt;&#39;))

start = time.time()
#소수판별
def isPrime(num):
    for i in range(2,int(math.sqrt(num)+1)):
        if num % i == 0:
            return False
    return True

def primeNum(num):
    lst=[]
    count = 0
    for i in range(2, num+1):
        if isPrime(i): 
            lst.append(i)
            count += 1

    return count

print(f&#39;n의루트값까지소수:{primeNum(n)}개&#39;)
end = time.time()
print(f&#39;{end-start:.2f}s&#39;)
</code></pre><p>저 for문 돌리는 곳에서 시간을 엄청 잡아 먹는 것 같았다. 그래서 n의 루트값 for문 돌리는걸 위에 소수판별하는 곳으로 옮겼다. 그러면 숫자 하나하나 2~n 까지 돌려서 소수를 판별하는 곳에서 시간을 많이 쓰는 것 같아서 루트값까지 돌리는 부분은 소수판별하는 곳으로 옮겨봤당</p>
<p>(출력결과)</p>
<pre><code>enter&gt;&gt;100000
9592
n의루트값까지소수:9592개
0.18s</code></pre><p>값은 나오긴 했는데 아직까지 저 코드가 돌아가는 순서, 과정들은 아직 확실하게 알지를 못한다. 감으로 이럴거 같으니까 여기다가 옮겨서 해볼까? 이러면서 해결(?)된 부분들이 많다ㅠ.ㅠ 
다른 팀원 소스코드 보니까 함수 하나와 이중for문으로 엄청 간결하게 쓰셨던데
아직 난 그정도 경지는 무리야...흑흑
코드를 쓰려고 무작정 붙잡고 늘어지는 것보다 지금 내 수준에서는 알고리즘 과정에 대해 생각해보고 말이나 순서도 같은 걸로 간결하게 정리해 보는 게 좋을 것 같다. </p>
]]></description>
        </item>
    </channel>
</rss>