<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>나른한 코딩 생활</title>
    <link>https://gerhermo.tistory.com/</link>
    <description>개인적인 공부 및 일상을 적는 블로그</description>
    <language>ko</language>
    <pubDate>Wed, 10 Jun 2026 17:11:40 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>GerHerMo</managingEditor>
    <item>
      <title>피보나치 비스무리한 수열</title>
      <link>https://gerhermo.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14495&quot;&gt;14495번: 피보나치 비스무리한 수열&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 피보나치 수열을 제작할 때의 수열을 변형하여 작성한다&lt;/p&gt;
&lt;pre id=&quot;code_1743493928962&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;num = int(input(''))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 입력받은 수 num&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 수열을 함수화하자.&lt;/p&gt;
&lt;pre id=&quot;code_1743493997833&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def like_fibo(n):
    seq = [1,1,1]
    for i in range(3,n):
        seq.append(seq[i-1]+seq[i-3])
    return seq[n-1]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 마지막 print 문을 작성하면 코드는 쉽게 완성된다.&lt;/p&gt;
&lt;pre id=&quot;code_1743494087547&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(like_fibo(num))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 완성된 코드는 다음과 같다&lt;/p&gt;
&lt;pre id=&quot;code_1743494223126&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;num = int(input(''))

def like_fibo(n):
    seq = [1,1,1]
    for i in range(3,n):
        seq.append(seq[i-1]+seq[i-3])
    return seq[n-1]

print(like_fibo(num))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드를 정답을 제출하면 정답을 맞출 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 여기서 코드의 효율성을 위해서 함수에 다음과 같은 조건을 추가해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1743494303189&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    if n==1 or n==2 or n==3:
        return 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 코드를 추가해줌으로서 처음 seq의 3자리 수를 반복문을 돌지 않아도 되게끔 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드의 효율성 측면에서 직관적&lt;/b&gt;이며, &lt;b&gt;불필요한 계산을 줄이는&lt;/b&gt; 조건을 추가한 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1743494443058&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;num = int(input(''))

def like_fibo(n):
    if n==1 or n==2 or n==3:
        return 1
    seq = [1,1,1]
    for i in range(3,n):
        seq.append(seq[i-1]+seq[i-3])
    return seq[n-1]

print(like_fibo(num))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;i&gt; 코드 오류나 잘못된 부분의 지적은 댓글로 부탁드립니다&lt;/i&gt;&lt;/p&gt;</description>
      <category>코딩테스트 문제풀이/Python</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/47</guid>
      <comments>https://gerhermo.tistory.com/47#entry47comment</comments>
      <pubDate>Tue, 1 Apr 2025 17:02:14 +0900</pubDate>
    </item>
    <item>
      <title>[40일차] ABC 부트캠프 수료식 &amp;amp; 시상식</title>
      <link>https://gerhermo.tistory.com/40</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FV4C1/btsI8qBZzdV/BxVUAMwBPccuw7nWtLOajK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FV4C1/btsI8qBZzdV/BxVUAMwBPccuw7nWtLOajK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FV4C1/btsI8qBZzdV/BxVUAMwBPccuw7nWtLOajK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFV4C1%2FbtsI8qBZzdV%2FBxVUAMwBPccuw7nWtLOajK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트캠프를 시작할때 수료증 외에 하나라도 가져가면 좋겠다고 생각했는데 다행히 이뤄냈다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_edited_blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nCrqJ/btsI9FY4j9F/Psrz4wKT7naEy9xH9TzgyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nCrqJ/btsI9FY4j9F/Psrz4wKT7naEy9xH9TzgyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nCrqJ/btsI9FY4j9F/Psrz4wKT7naEy9xH9TzgyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnCrqJ%2FbtsI9FY4j9F%2FPsrz4wKT7naEy9xH9TzgyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;2189&quot; data-filename=&quot;edited_edited_blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2189&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 테크노트는 ' 프로젝트 멘토링 ' 에서 만날 수 있을 것 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 페이지를 쓰게 해준 부트캠프는 이 글을 읽는 당신도 경험해봤으면 좋겠다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KIx1g/btsI8GxREV4/KmO6MOx0cnK97hPUTnjC4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KIx1g/btsI8GxREV4/KmO6MOx0cnK97hPUTnjC4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KIx1g/btsI8GxREV4/KmO6MOx0cnK97hPUTnjC4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKIx1g%2FbtsI8GxREV4%2FKmO6MOx0cnK97hPUTnjC4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;649&quot; height=&quot;751&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>ABC 부트캠프</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/40</guid>
      <comments>https://gerhermo.tistory.com/40#entry40comment</comments>
      <pubDate>Tue, 20 Aug 2024 14:53:40 +0900</pubDate>
    </item>
    <item>
      <title>[39일차] ABC 부트캠프 - 샤브샤브 &amp;amp; Wrap-up</title>
      <link>https://gerhermo.tistory.com/39</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;24.08.16&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;광복절을 푹 쉬고 나서 이번주의 마지막 부트캠프 시간, 39일차 아침에 우리는 또 다시 모였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모이고 얼마 지나지 않아 바로 운영진분들이 준비해준 샤브샤브 집으로 맛있게 식사하러 떠났다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;샤브샤브 정말 맛있고 배부르게 먹으니 커피까지 준비해주셨다. ^o^b&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;5712&quot; data-origin-height=&quot;4284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6OOrj/btsI9hEigOA/9gjpw2PzFqEadFRcZ489AK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6OOrj/btsI9hEigOA/9gjpw2PzFqEadFRcZ489AK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6OOrj/btsI9hEigOA/9gjpw2PzFqEadFRcZ489AK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6OOrj%2FbtsI9hEigOA%2F9gjpw2PzFqEadFRcZ489AK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;5712&quot; height=&quot;4284&quot; data-origin-width=&quot;5712&quot; data-origin-height=&quot;4284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맛있는 식사 이후에는 지금까지의 활동을 돌아보며 Wrap-up 시간을 가졌다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;1012&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6ade8/btsI9XLTfJr/gFj8ugXK9pkkKJiRCPmYqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6ade8/btsI9XLTfJr/gFj8ugXK9pkkKJiRCPmYqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6ade8/btsI9XLTfJr/gFj8ugXK9pkkKJiRCPmYqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6ade8%2FbtsI9XLTfJr%2FgFj8ugXK9pkkKJiRCPmYqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1730&quot; height=&quot;1012&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;1012&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brDgAc/btsI8YkHfAo/lLI0G737gfm8ucZZUyH2S1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brDgAc/btsI8YkHfAo/lLI0G737gfm8ucZZUyH2S1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brDgAc/btsI8YkHfAo/lLI0G737gfm8ucZZUyH2S1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrDgAc%2FbtsI8YkHfAo%2FlLI0G737gfm8ucZZUyH2S1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돌이켜보니 지금것 정말 많은 활동을 했구나 싶었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언제 이렇게 많은 것들을 했을까&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zqtSh/btsI9XZqxep/rVJJOTbUZOhOUY431wFKEk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zqtSh/btsI9XZqxep/rVJJOTbUZOhOUY431wFKEk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zqtSh/btsI9XZqxep/rVJJOTbUZOhOUY431wFKEk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzqtSh%2FbtsI9XZqxep%2FrVJJOTbUZOhOUY431wFKEk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;4032&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBnds5/btsI9yFNuwX/jtliUqOvxlLsdi69tbFgPK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBnds5/btsI9yFNuwX/jtliUqOvxlLsdi69tbFgPK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBnds5/btsI9yFNuwX/jtliUqOvxlLsdi69tbFgPK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBnds5%2FbtsI9yFNuwX%2FjtliUqOvxlLsdi69tbFgPK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;4032&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫날 오리엔테이션과 같이 큰 종이에 여러 주제에 대한 자신의 생각을 포스트잇에 적어 완성시켰다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ABC 부트캠프에 와서 어떤것을 얻었는지, 어떨때 제일 힘들었는지, 무엇을 할때 가장 빛났는지 등...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리들의 마지막 시간은 이렇게 끝났다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 날인 19일 월요일에는 수료식과 시상식만 진행되기에 정말 일찍 끝난다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실상 오늘이 우리들의 마지막 활동이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;40일간의 여정은 길다면 길고 짧다면 짧은 순간이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기간동안 나는 나 자신에 대한 확신을 얻을 수 있었고, 좋은 인연들을 만날 수 있었으며, 멋진 기술을 배워갈 수 있었다.&lt;/p&gt;</description>
      <category>ABC 부트캠프</category>
      <category>#abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/39</guid>
      <comments>https://gerhermo.tistory.com/39#entry39comment</comments>
      <pubDate>Tue, 20 Aug 2024 14:43:08 +0900</pubDate>
    </item>
    <item>
      <title>[38일차] ABC 부트캠프 프로젝트 - 성과발표회</title>
      <link>https://gerhermo.tistory.com/38</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 배웠던 내용으로 완성시킨 우리들의 프로젝트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 마지막을 장식할 성과발표회가 다가왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTqiOo/btsI9xGPhra/HbDRjxbLyLEEokBoyGzonK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTqiOo/btsI9xGPhra/HbDRjxbLyLEEokBoyGzonK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTqiOo/btsI9xGPhra/HbDRjxbLyLEEokBoyGzonK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTqiOo%2FbtsI9xGPhra%2FHbDRjxbLyLEEokBoyGzonK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;2250&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다들 정말 놀라운 프로젝트와 멋진 발표들로 성과를 보여줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아쉽게도 1등 대상은 타지 못했지만 우리들이 한 노력은 최우수상이라는 형태로 다가왔다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2603&quot; data-origin-height=&quot;1809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvIUPZ/btsI80QiiLO/1o63rjMC3sHZI3N9QKyr30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvIUPZ/btsI80QiiLO/1o63rjMC3sHZI3N9QKyr30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvIUPZ/btsI80QiiLO/1o63rjMC3sHZI3N9QKyr30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvIUPZ%2FbtsI80QiiLO%2F1o63rjMC3sHZI3N9QKyr30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2603&quot; height=&quot;1809&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2603&quot; data-origin-height=&quot;1809&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WOd4p/btsI9sS43Sc/KmWbPTT0oxLTK2LjA4FdIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WOd4p/btsI9sS43Sc/KmWbPTT0oxLTK2LjA4FdIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WOd4p/btsI9sS43Sc/KmWbPTT0oxLTK2LjA4FdIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWOd4p%2FbtsI9sS43Sc%2FKmWbPTT0oxLTK2LjA4FdIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2250&quot; height=&quot;3000&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;남은 일정동안은 마무리 작업과 수상식등이 준비되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;40일 여정중 가장 즐거운 순간인것 같다.&lt;/p&gt;</description>
      <category>ABC 부트캠프</category>
      <category>#abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/38</guid>
      <comments>https://gerhermo.tistory.com/38#entry38comment</comments>
      <pubDate>Tue, 20 Aug 2024 14:25:23 +0900</pubDate>
    </item>
    <item>
      <title>[37일차] ABC 부트캠프 프로젝트 - 7 完</title>
      <link>https://gerhermo.tistory.com/37</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오전&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로세스 - 탄소배출량 계산 및 이미지 출력 - 1&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rpW4C/btsI2Ca4TOm/Zei0iMHPs8PVXGC3uHH9Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rpW4C/btsI2Ca4TOm/Zei0iMHPs8PVXGC3uHH9Yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rpW4C/btsI2Ca4TOm/Zei0iMHPs8PVXGC3uHH9Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrpW4C%2FbtsI2Ca4TOm%2FZei0iMHPs8PVXGC3uHH9Yk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;658&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만드는 과정 중 설계도가 너무 장황하여 축소하기로 결정&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오후&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;프로세스 - 탄소배출량 계산 및 이미지 출력 - 2&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20240813_142542405.png&quot; data-origin-width=&quot;7019&quot; data-origin-height=&quot;4963&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVbjLg/btsI2ixpeKl/UIQZK1uxjeByNuyZ88jB9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVbjLg/btsI2ixpeKl/UIQZK1uxjeByNuyZ88jB9K/img.png&quot; data-alt=&quot;FuncCountCo2.py / Random_OBJ_Image.py / G_Sok_Main.py 의 프로세스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVbjLg/btsI2ixpeKl/UIQZK1uxjeByNuyZ88jB9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVbjLg%2FbtsI2ixpeKl%2FUIQZK1uxjeByNuyZ88jB9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;7019&quot; height=&quot;4963&quot; data-filename=&quot;KakaoTalk_20240813_142542405.png&quot; data-origin-width=&quot;7019&quot; data-origin-height=&quot;4963&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;FuncCountCo2.py / Random_OBJ_Image.py / G_Sok_Main.py 의 프로세스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로세스 - 카카오맵 크롤링&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;map.drawio.png&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beH5P0/btsI3a6eMw8/zkumtOPsocBV9RhInHwFeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beH5P0/btsI3a6eMw8/zkumtOPsocBV9RhInHwFeK/img.png&quot; data-alt=&quot;Mapping_Arive.py 에 대한 프로세스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beH5P0/btsI3a6eMw8/zkumtOPsocBV9RhInHwFeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeH5P0%2FbtsI3a6eMw8%2FzkumtOPsocBV9RhInHwFeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;750&quot; height=&quot;361&quot; data-filename=&quot;map.drawio.png&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Mapping_Arive.py 에 대한 프로세스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>ABC 부트캠프</category>
      <category>#abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/37</guid>
      <comments>https://gerhermo.tistory.com/37#entry37comment</comments>
      <pubDate>Tue, 13 Aug 2024 16:52:58 +0900</pubDate>
    </item>
    <item>
      <title>[36일차] ABC 부트캠프 프로젝트 - 6</title>
      <link>https://gerhermo.tistory.com/36</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 저번주에 미쳐 완성하지 못했던 디테일들을 완성하는 시간을 가졌다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이것으로 프로토타입의 개발은 오늘로서 막을 내렸고, 내일은 발표전 마지막으로 프로토타입의 설계도 및 프로세스를 작성하고 마무리 지을 것이다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오전 / 오후&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트 프로토타입 최종 완성&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Mapping_Arive.py&lt;/h4&gt;
&lt;pre id=&quot;code_1723533362818&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

def create_map_url(latitude, longitude, name=None):
    base_url = &quot;https://map.kakao.com/link/map/&quot;
    if name:
        url = f&quot;{base_url}{name},{latitude},{longitude}&quot;
    else:
        url = f&quot;{base_url}{latitude},{longitude}&quot;
    return url

def create_directions_url(latitude, longitude, name=None):
    base_url = &quot;https://map.kakao.com/link/to/&quot;
    if name:
        url = f&quot;{base_url}{name},{latitude},{longitude}&quot;
    else:
        url = f&quot;{base_url}{latitude},{longitude}&quot;
    return url

# 예시 사용 &amp;lt; - 해당 부분을 여행지로 변경
latitude = 35.1594965345398
longitude = 129.162576586723
name = &quot;해운대해수욕장&quot;

latitude_YeoSu = 34.8377033412796
longitude_YeoSu = 127.892653150096
name_YeoSu = &quot;여수 보물섬 남해군청&quot; # 위치는 남해군청 좌표를 가져옴

# 인터파크 투어 국내여행 1박 기준 2개의 목적지

map_url = create_map_url(latitude, longitude, name)
# directions_url = create_directions_url(latitude, longitude, name)
directions_url_YeoSu = create_directions_url(latitude_YeoSu, longitude_YeoSu, name_YeoSu)

# Selenium을 사용하여 Chrome으로 URL 열기
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# 핑찍힌 지도 열기
driver.get(map_url)
driver.implicitly_wait(10)
time.sleep(3)

# 5초 뒤에 여수 표시
# 목적지 URL 열기
driver.get(directions_url_YeoSu)
time.sleep(3)

input(&quot;Press Enter to close the browser...&quot;)
# Enter를 눌러야 창 닫음
driver.quit()&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;FuncCountCO2.py&lt;/h4&gt;
&lt;pre id=&quot;code_1723533440924&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;emissions_data = {
    &quot;S_Flight&quot;: {
        &quot;emission&quot;: 255.0, # gCo2 단위
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 850,
        'avg_emission': 0.3 # 이동수단별 km당 평균 탄소 배출량
    },
    &quot;L_Flight&quot;: {
        &quot;emission&quot;: 150.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 925,
        'avg_emission': 0.16
    },
    &quot;Gasoline_Car&quot;: {
        &quot;emission&quot;: 192.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 57, # 고속도로와 일반도로 평균값의 평균
        'avg_emission': 3.37
    },
    &quot;Diesel_Car&quot;: {
        &quot;emission&quot;: 171.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 57,
        'avg_emission': 3.0
    },
    &quot;Bus&quot;: {
        &quot;emission&quot;: 105.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 22,
        'avg_emission': 0.47
    },
    &quot;Subway&quot;:{
        &quot;emission&quot;: 26.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 50,
        'avg_emission': 0.52
    },
    &quot;Electric_Car&quot;: {
        &quot;emission&quot;: 53.0,
        &quot;scope&quot;: &quot;Scope 2&quot;,
        &quot;speed&quot;: 46, # 출처 : https://www.wltpfacts.eu/from-nedc-to-wltp-change/
        'avg_emission': 1.15
    },
    &quot;Electric_Bicycle&quot;: {
        &quot;emission&quot;: 12.0,
        &quot;scope&quot;: &quot;Scope 2&quot;,
        &quot;speed&quot;: 17, # 평균 15~20 km/h
        'avg_emission': 0.71
    },
    &quot;Train&quot;: {
        &quot;KTX&quot;: {
            &quot;emission&quot;: 19.92,
            &quot;scope&quot;: &quot;Scope 2&quot;,
            &quot;speed&quot;: 180,
            'avg_emission': 0.11
        },
        &quot;KTX_Sancheon_and_Mugunghwa&quot;: {
            &quot;emission&quot;: 38.105,
            &quot;scope&quot;: &quot;Scope 2&quot;,
            &quot;speed&quot;: 120, # KTX 산천과 무궁화호의 평균속도
            'avg_emission': 0.32
        },
        &quot;Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul&quot;: {
            &quot;emission&quot;: 27.19,
            &quot;scope&quot;: &quot;Scope 2&quot;,
            &quot;speed&quot;: 140, # 누리호, ITX 의 평균속도
            'avg_emission': 0.19
        }
    }
}

class VehicleCo2:
    global emissions_data

    def __init__(self,bus_time=0.0,subway_time=0.0,s_flight_time=0.0,l_flight_time=0.0,
                 gasoline_car_time=0.0,diesel_car_time=0.0,electric_car_time=0.0,
                 train_time=0.0,electric_bicycle_time=0.0 ):
        self.bus_time = bus_time
        self.subway_time = subway_time
        self.s_flight_time = s_flight_time
        self.l_flight_time = l_flight_time
        self.gasoline_car_time = gasoline_car_time
        self.diesel_car_time = diesel_car_time
        self.train_time = train_time
        self.electric_bicycle_time = electric_bicycle_time
        self.electric_car_time = electric_car_time

        self.using_train = 0
        self.avg_emission = 0.0
        self.avg_em_only_car = 0.0
        self.Bool_trainUsed = False
        self.emission_train = 0.0
        self.list_avg = list(emissions_data.keys())[:-1]
        self.list_vtime = [self.s_flight_time,self.l_flight_time,self.gasoline_car_time,self.diesel_car_time,
                             self.bus_time,self.subway_time,self.electric_car_time,self.electric_bicycle_time]

        self.emission_bus =  self.bus_time / 60.0 * emissions_data[&quot;Bus&quot;][&quot;speed&quot;] * emissions_data[&quot;Bus&quot;][&quot;emission&quot;]
        self.emission_subway = self.subway_time / 60.0 * emissions_data[&quot;Subway&quot;][&quot;speed&quot;] * emissions_data[&quot;Subway&quot;][&quot;emission&quot;]
        self.emission_s_flight =  self.s_flight_time / 60.0 * emissions_data[&quot;S_Flight&quot;][&quot;speed&quot;] * emissions_data[&quot;S_Flight&quot;][&quot;emission&quot;]
        self.emission_l_flight =  self.l_flight_time / 60.0 * emissions_data[&quot;L_Flight&quot;][&quot;speed&quot;] * emissions_data[&quot;L_Flight&quot;][&quot;emission&quot;]
        self.emission_g_car =  self.gasoline_car_time / 60.0 * emissions_data[&quot;Gasoline_Car&quot;][&quot;speed&quot;] * emissions_data[&quot;Gasoline_Car&quot;][&quot;emission&quot;]
        self.emission_d_car =  self.diesel_car_time / 60.0 * emissions_data[&quot;Diesel_Car&quot;][&quot;speed&quot;] * emissions_data[&quot;Diesel_Car&quot;][&quot;emission&quot;]
        self.emission_elec_car = self.electric_car_time / 60.0 * emissions_data[&quot;Electric_Car&quot;][&quot;speed&quot;] * emissions_data[&quot;Electric_Car&quot;][&quot;emission&quot;]
        self.emission_elec_bicycle = self.electric_bicycle_time / 60.0 * emissions_data[&quot;Electric_Bicycle&quot;][&quot;speed&quot;] * emissions_data[&quot;Electric_Bicycle&quot;][&quot;emission&quot;]

        self.emissions_co2 = 0.0
        # 초기화시에 각 이동수단별 시간을 가져온다
        if self.train_time== 0.0:
            self.Bool_trainUsed = False
        else:
            self.Bool_trainUsed = True

    def set_train_kind(self,using_train):
        self.using_train = using_train
        if self.train_time != 0.0:
            # using_train = input(&quot;이용한 열차 : &quot;)
            match self.using_train:
                case &quot;1&quot;:
                    self.emission_train = (self.train_time / 60.0 * emissions_data[&quot;Train&quot;][&quot;KTX&quot;][&quot;speed&quot;] *
                                           emissions_data[&quot;Train&quot;][&quot;KTX&quot;][&quot;emission&quot;])
                case &quot;2&quot;:
                    self.emission_train = (self.train_time / 60.0 * emissions_data[&quot;Train&quot;][&quot;KTX_Sancheon_and_Mugunghwa&quot;][&quot;speed&quot;] *
                                           emissions_data[&quot;Train&quot;][&quot;KTX_Sancheon_and_Mugunghwa&quot;][&quot;emission&quot;])
                case &quot;3&quot;:
                    self.emission_train = (self.train_time / 60.0 * emissions_data[&quot;Train&quot;][&quot;Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul&quot;][&quot;speed&quot;] *
                                           emissions_data[&quot;Train&quot;][&quot;Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul&quot;][&quot;emission&quot;])
                case _:
                    self.emission_train = 0.0
                    print(&quot;잘못된 값을 입력하셨습니다, 열차는 계산에서 제외됩니다&quot;)
        else:
            print(&quot;입력된 기차가 없습니다&quot;)

    def calculate_co2(self):
        # move_bus = (25.0/60.0 * emissions_data[&quot;Bus&quot;][&quot;speed&quot;])*emissions_data[&quot;Bus&quot;][&quot;emission&quot;]
        self.emissions_co2 = (self.emission_bus + self.emission_subway + self.emission_s_flight +
                              self.emission_l_flight + self.emission_g_car + self.emission_d_car +
                              self.emission_elec_car + self.emission_elec_bicycle + self.emission_train)

        return round(self.emissions_co2,2)

    def calculate_avg_emission(self): # 비교 대조용으로 사용, 실질적으로 사용되진 않음 ( 검증용 )
        for index in range(len(self.list_avg)):
            self.avg_emission += emissions_data[self.list_avg[index]]['avg_emission'] * ( self.list_vtime[index] )

        if self.using_train == 1 :
            self.avg_emission += emissions_data[&quot;Train&quot;][&quot;KTX&quot;]['avg_emission'] * self.train_time
        elif self.using_train == 2:
            self.avg_emission += emissions_data[&quot;Train&quot;][&quot;KTX_Sancheon_and_Mugunghwa&quot;]['avg_emission'] * self.train_time
        elif self.using_train == 3:
            self.avg_emission += emissions_data[&quot;Train&quot;][&quot;Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul&quot;]['avg_emission'] * self.train_time

            # emissions_data[self.list_avg[index]]['avg_emission'] =&amp;gt; km 당 평균 배출량
        return self.avg_emission

    def calculate_only_car(self):
        total_car_emission = 0.0
        # 비행기를 제외한 나머지 이동수단의 시간을 모두 차량 이동으로 가정하고 배출량 계산
        for time in self.list_vtime:
            total_car_emission += (time / 60.0) * emissions_data[&quot;Gasoline_Car&quot;][&quot;speed&quot;] * emissions_data[&quot;Gasoline_Car&quot;][&quot;emission&quot;]

        # 비행기 배출량
        total_car_emission += self.emission_s_flight
        total_car_emission += self.emission_l_flight

        # 최종 배출량을 kg 단위로 변환
        return round(total_car_emission / 1000.0, 2)

'''
# test
vehicle = VehicleCo2(bus_time=30, subway_time=50, electric_car_time=50,train_time=43)
vehicle.set_train_kind('1')
print(vehicle.calculate_co2())
print(vehicle.calculate_only_car())
'''&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Random_OBJ_Image.py&lt;/h4&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import tkinter as tk
from PIL import Image, ImageTk
import random
import os

emission_co2 = 1.0
dif_emission_co2 = 0.0
customer = '신세계'

def set_emission_co2(value):
    global emission_co2
    emission_co2 = value

def set_dif_emission_co2(value):
    global dif_emission_co2
    dif_emission_co2 = value

def Dp_Random_Img(image_folder):
    # 이미지 폴더의 모든 파일을 가져옴

    image_files = [f for f in os.listdir(image_folder) if f.endswith(('png', 'jpg', 'jpeg', 'gif'))]

    # 이미지와 관련된 데이터를 리스트로 관리
    image_data = {
        'tree.jpg': (int(dif_emission_co2/9.2), '그루', '나무'),
        'bee.png': (int(dif_emission_co2*500), '마리', '벌'),
        'sunflower.jpg': (int(dif_emission_co2/1.5), '송이', '해바라기')
    }

    # 랜덤으로 이미지 파일 선택
    # selected_image = random.choice(image_files)

    if dif_emission_co2 &amp;gt;= 9.2:
        selected_image = random.choice(['tree.jpg', 'sunflower.jpg'])
    else:
        selected_image = 'bee.png'

    kg = 'kg'

    # 이미지 파일 경로
    image_path = os.path.join(image_folder, selected_image)

    # 선택된 이미지에 따른 변수 설정
    if selected_image in image_data:
        n, unit, random_obj = image_data[selected_image]
        if selected_image == 'bee.png':
            kg = 'g'
            emission_co2_converted = emission_co2 * 1000  # g 단위로 변환
            dif_emission_co2_converted = dif_emission_co2 * 1000  # g 단위로 변환
        else:
            emission_co2_converted = emission_co2  # kg 단위 그대로 사용
            dif_emission_co2_converted = dif_emission_co2  # kg 단위 그대로 사용
    else:
        n, unit, random_obj = (1, '개', '알 수 없는 객체')
        emission_co2_converted = emission_co2
        dif_emission_co2_converted = dif_emission_co2

    # 최상단에 표시할 텍스트와 폰트
    top_text = f&quot;고마워요! {customer}님!\n 덕분에 {n}{unit}의 {random_obj}들을 지켰어요!&quot;
    top_text_font = (&quot;NanumGothic&quot;, 20, &quot;bold&quot;)

    mileage = random.randint(100, 1000)
    # 출력할 텍스트 라인과 폰트
    text_lines = [
        f&quot;총 {emission_co2_converted}{kg}의 탄소배출량이 발생했고,&quot;,
        f&quot;평균 여행보다 {dif_emission_co2_converted}{kg} 만큼의 탄소배출량이 줄었어요!&quot;,
        f&quot;현재까지 {mileage} 그린마일리지 적립!&quot;
    ]
    text_font = (&quot;NanumGothic&quot;, 14)

    # Tkinter 창 생성
    root = tk.Tk()
    root.title(&quot;G-SOK Map&quot;)

    # 최상단 텍스트 라벨 추가
    top_text_label = tk.Label(root, text=top_text, font=top_text_font)
    top_text_label.pack(pady=10)

    # 이미지를 로드하고 표시
    img = Image.open(image_path)
    img = img.resize((600, 500),Image.Resampling.LANCZOS)
    # Image.Resampling.LANCZOS : 이미지 리사이즈시 화질 저하를 완화해주는 코드 
    # // pillow 10.0.0 버전 이후 함수명 바뀜
    img = ImageTk.PhotoImage(img)

    panel = tk.Label(root, image=img)
    panel.pack(side=&quot;top&quot;, fill=&quot;both&quot;, expand=&quot;yes&quot;)

    # 텍스트 라벨 추가
    for line in text_lines:
        text_label = tk.Label(root, text=line, font=text_font)
        text_label.pack()

    # Tkinter 이벤트 루프 시작
    root.mainloop()

# 이미지 폴더 경로
# image_folder = &quot;C:/ABCBootCamp/G_SOK_MAP_Project/ImgFolder&quot;
#
# Dp_Random_Img(image_folder)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;G_Sok_Main.py&lt;/h4&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;from Func_CountCO2 import VehicleCo2
from Random_OBJ_Image import Dp_Random_Img, set_emission_co2, set_dif_emission_co2

# 이동 수단 입력
em_vehicle = VehicleCo2(bus_time=30, subway_time=50, electric_car_time=50,train_time=43)

if em_vehicle.Bool_trainUsed == True:
    using_train = input('KTX면 1, KTX Sancheon 또는 Mugunghwa면 2, Nuriho 또는 ITX 일 경우 3번을 입력해주세요 : ')
    em_vehicle.set_train_kind(using_train=using_train)
# em_vehicle.set_train_kind('3')
emission_co2_value = round(em_vehicle.calculate_co2()/1000.0,2) # kg 단위

# 결과를 Random_OBJ_Image의 emission_co2 변수에 설정
set_emission_co2(emission_co2_value)
set_dif_emission_co2(round(em_vehicle.calculate_only_car()-emission_co2_value,1))

image_folder = &quot;C:/ABCBootCamp/G_SOK_MAP_Project/ImgFolder&quot;
# 해당 이미지 경로에 이름과 맞는 이미지가 있어야 작동
Dp_Random_Img(image_folder)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&gt;
        
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ABC 부트캠프</category>
      <category>#abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/36</guid>
      <comments>https://gerhermo.tistory.com/36#entry36comment</comments>
      <pubDate>Tue, 13 Aug 2024 16:21:46 +0900</pubDate>
    </item>
    <item>
      <title>[35일차] ABC 부트캠프 프로젝트 - 5</title>
      <link>https://gerhermo.tistory.com/35</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오전&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Main파일 작성&lt;/h3&gt;
&lt;pre id=&quot;code_1723377616975&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from Func_CountCO2_copy import VehicleCo2
from Random_OBJ_Image_copy import Dp_Random_Img, set_emission_co2, set_footprint_co2

em_vehicle = VehicleCo2(bus_time=30,train_time=50,electric_bicycle_time=25)


if em_vehicle.Bool_trainUsed == True:
    using_train = input('KTX면 1, KTX Sancheon 또는 Mugunghwa면 2, Nuriho 또는 ITX 일 경우 3번을 입력해주세요 : ')
    em_vehicle.set_train_kind(using_train=using_train)
# em_vehicle.set_train_kind('3')
emission_co2_value = round(em_vehicle.calculate_co2()/1000.0,2) # kg 단위


# 결과를 Random_OBJ_Image의 emission_co2 변수에 설정
set_emission_co2(emission_co2_value)
set_footprint_co2(50)

image_folder = &quot;C:/ABCBootCamp/G_SOK_MAP_Project/ImgFolder&quot;
# 해당 이미지 경로에 이름과 맞는 이미지가 있어야 작동
Dp_Random_Img(image_folder)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rwiYK/btsI0wPFXiM/18oCk5mNGVPt0QjmC0KJ90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rwiYK/btsI0wPFXiM/18oCk5mNGVPt0QjmC0KJ90/img.png&quot; data-alt=&quot;사용자에게 3가지 옵션중 선택하여 탄소배출량을 계산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rwiYK/btsI0wPFXiM/18oCk5mNGVPt0QjmC0KJ90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrwiYK%2FbtsI0wPFXiM%2F18oCk5mNGVPt0QjmC0KJ90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;827&quot; height=&quot;71&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용자에게 3가지 옵션중 선택하여 탄소배출량을 계산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;828&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ChoHj/btsI0RseMzt/GWIiwatONm6kz8CvHxIcX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ChoHj/btsI0RseMzt/GWIiwatONm6kz8CvHxIcX1/img.png&quot; data-alt=&quot;탄소배출량 계산식을 적용하여 배출량 4.23kg 을 출력한다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ChoHj/btsI0RseMzt/GWIiwatONm6kz8CvHxIcX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FChoHj%2FbtsI0RseMzt%2FGWIiwatONm6kz8CvHxIcX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;747&quot; height=&quot;828&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;828&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;탄소배출량 계산식을 적용하여 배출량 4.23kg 을 출력한다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오후&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이후 필요요소 설계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;탄소발자국을 사용자에게 보여주는 식으로 설계방향을 잡았으나, 발자국 보다는 좀 더 직관적으로 보여지게 하기 위해서 다음 3가지의 요소를 표기하도록 변경한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;총 탄소배출량 표시&lt;/li&gt;
&lt;li&gt;발생한 탄소배출량에 비례한 동식물의 개체 및 상태 변화 수치&lt;/li&gt;
&lt;li&gt;평균 여행시 발생할 탄소배출량과의 차이&lt;/li&gt;
&lt;li&gt;적립된 마일리지 표기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전반적으로 위와 같은 요소를 표기할 수 있도록 각각의 파일들을 수정했다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;875&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V3U8k/btsI0FrWVbe/xIDCKxsPoBKztjDWEsvjfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V3U8k/btsI0FrWVbe/xIDCKxsPoBKztjDWEsvjfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V3U8k/btsI0FrWVbe/xIDCKxsPoBKztjDWEsvjfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV3U8k%2FbtsI0FrWVbe%2FxIDCKxsPoBKztjDWEsvjfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;747&quot; height=&quot;875&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;875&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;허나 아직까지 자잘하게 수정해야될 코드들이 존재하기 때문에 월요일에 코드를 완성하도록 한다&lt;/p&gt;</description>
      <category>ABC 부트캠프</category>
      <category>#abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/35</guid>
      <comments>https://gerhermo.tistory.com/35#entry35comment</comments>
      <pubDate>Sun, 11 Aug 2024 21:08:42 +0900</pubDate>
    </item>
    <item>
      <title>[34일차] ABC 부트캠프 프로젝트 - 4</title>
      <link>https://gerhermo.tistory.com/34</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오전&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;피그마로 디자인 확립&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9bXr5/btsI0ARIdEh/PK5dxykReHLkNm2FUh4wK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9bXr5/btsI0ARIdEh/PK5dxykReHLkNm2FUh4wK0/img.png&quot; data-alt=&quot;디자인 담당의 인원이 Figma로 시간을 깎아가면서 만든 G-SOK앱의 디자인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9bXr5/btsI0ARIdEh/PK5dxykReHLkNm2FUh4wK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9bXr5%2FbtsI0ARIdEh%2FPK5dxykReHLkNm2FUh4wK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;703&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;디자인 담당의 인원이 Figma로 시간을 깎아가면서 만든 G-SOK앱의 디자인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;자료조사 및 프로토타입 데이터 적용&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9jj7c/btsI0rUXHjM/KElgE1z5T8IYkY1Irel0T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9jj7c/btsI0rUXHjM/KElgE1z5T8IYkY1Irel0T0/img.png&quot; data-alt=&quot;여행 사이트에서 1박 기준으로 임의의 목적지 정하기 - 부산 &amp;amp;amp; 여수 보물섬&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9jj7c/btsI0rUXHjM/KElgE1z5T8IYkY1Irel0T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9jj7c%2FbtsI0rUXHjM%2FKElgE1z5T8IYkY1Irel0T0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1135&quot; height=&quot;676&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;여행 사이트에서 1박 기준으로 임의의 목적지 정하기 - 부산 &amp;amp; 여수 보물섬&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 시각화 데이터를 토대로 어제 시험했던 웹 크롤링의 목적지로 정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drKA9W/btsIZ7btS2y/7aaXVq7KqKVVHC1d05zua0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drKA9W/btsIZ7btS2y/7aaXVq7KqKVVHC1d05zua0/img.png&quot; data-alt=&quot;탄소 에너지 사용량 중 수송 16.6% 차지를 파이차트로 시각화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drKA9W/btsIZ7btS2y/7aaXVq7KqKVVHC1d05zua0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrKA9W%2FbtsIZ7btS2y%2F7aaXVq7KqKVVHC1d05zua0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1776&quot; height=&quot;1322&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1322&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;탄소 에너지 사용량 중 수송 16.6% 차지를 파이차트로 시각화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;랜덤 이미지 출력&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어제부터 맵과 함께 만들고 있던 랜덤 이미지출력의 기본 틀을 잡았다&lt;/p&gt;
&lt;pre id=&quot;code_1723376845059&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import tkinter as tk
from PIL import Image, ImageTk
import random
import os

emission_co2 = 0.0
footprint_co2 = 0

def set_emission_co2(value):
    global emission_co2
    emission_co2 = value

def set_footprint_co2(value):
    global footprint_co2
    footprint_co2 = value

def Dp_Random_Img(image_folder):
    # 이미지 폴더의 모든 파일을 가져옴

    image_files = [f for f in os.listdir(image_folder) if f.endswith(('png', 'jpg', 'jpeg', 'gif'))]

    # 이미지와 관련된 데이터를 리스트로 관리
    image_data = {
        'tree.jpg': (12, '그루', '나무'),
        'bee.png': (5, '마리', '벌'),
        'sunflower.jpg': (8, '송이', '해바라기')
    }

    # 랜덤으로 이미지 파일 선택
    selected_image = random.choice(image_files)

    # 이미지 파일 경로
    image_path = os.path.join(image_folder, selected_image)

    # 선택된 이미지에 따른 변수 설정
    if selected_image in image_data:
        n, unit, random_obj = image_data[selected_image]
    else:
        n, unit, random_obj = (1, '개', '알 수 없는 객체')

    # 최상단에 표시할 텍스트와 폰트
    top_text = f&quot;고마워요! 덕분에 {n}{unit}의 {random_obj}들을 지켰어요!&quot;
    top_text_font = (&quot;NanumGothic&quot;, 20, &quot;bold&quot;)

    # 출력할 텍스트 라인과 폰트
    text_lines = [
        f&quot;총 {emission_co2}kg의 탄소배출량이 감소했어요!&quot;,
        f&quot;현재까지 '{footprint_co2}' 만큼의 탄소발자국을 줄였어요!&quot;,
        &quot;Thank you for your doing&quot;
    ]
    text_font = (&quot;NanumGothic&quot;, 14)

    # Tkinter 창 생성
    root = tk.Tk()
    root.title(&quot;G-SOK Map&quot;)

    # 최상단 텍스트 라벨 추가
    top_text_label = tk.Label(root, text=top_text, font=top_text_font)
    top_text_label.pack(pady=10)

    # 이미지를 로드하고 표시
    img = Image.open(image_path)
    img = img.resize((600, 500),Image.Resampling.LANCZOS)
    # Image.Resampling.LANCZOS : 이미지 리사이즈시 화질 저하를 완화해주는 코드 // pillow 10.0.0 버전 이후 함수명 바뀜
    img = ImageTk.PhotoImage(img)

    panel = tk.Label(root, image=img)
    panel.pack(side=&quot;top&quot;, fill=&quot;both&quot;, expand=&quot;yes&quot;)

    # 텍스트 라벨 추가
    for line in text_lines:
        text_label = tk.Label(root, text=line, font=text_font)
        text_label.pack()

    # Tkinter 이벤트 루프 시작
    root.mainloop()

# 이미지 폴더 경로
image_folder = &quot;C:/ABCBootCamp/G_SOK_MAP_Project/ImgFolder&quot;

Dp_Random_Img(image_folder)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfSRUF/btsI0EUeAlA/rAqIPgyZvocfzNCu1tyCe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfSRUF/btsI0EUeAlA/rAqIPgyZvocfzNCu1tyCe1/img.png&quot; data-alt=&quot;나무 / 해바라기 / 꿀벌 중에 실행시 랜덤한 이미지로 보여준다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfSRUF/btsI0EUeAlA/rAqIPgyZvocfzNCu1tyCe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfSRUF%2FbtsI0EUeAlA%2FrAqIPgyZvocfzNCu1tyCe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;748&quot; height=&quot;830&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;나무 / 해바라기 / 꿀벌 중에 실행시 랜덤한 이미지로 보여준다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오후&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이동수단별 탄소배출량 계산&lt;/h3&gt;
&lt;pre id=&quot;code_1723377188590&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;emissions_data = {
    &quot;S_Flight&quot;: {
        &quot;emission&quot;: 255.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 850
    },
    &quot;L_Flight&quot;: {
        &quot;emission&quot;: 150.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 925
    },
    &quot;Gasoline_Car&quot;: {
        &quot;emission&quot;: 192.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 57 # 고속도로와 일반도로 평균값의 평균
    },
    &quot;Diesel_Car&quot;: {
        &quot;emission&quot;: 171.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 57
    },
    &quot;Bus&quot;: {
        &quot;emission&quot;: 105.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 22
    },
    &quot;Subway&quot;:{
        &quot;emission&quot;: 26.0,
        &quot;scope&quot;: &quot;Scope 1&quot;,
        &quot;speed&quot;: 50
    },
    &quot;Electric_Car&quot;: {
        &quot;emission&quot;: 53.0,
        &quot;scope&quot;: &quot;Scope 2&quot;,
        &quot;speed&quot;: 46 # 출처 : https://www.wltpfacts.eu/from-nedc-to-wltp-change/
    },
    &quot;Electric_Bicycle&quot;: {
        &quot;emission&quot;: 12.0,
        &quot;scope&quot;: &quot;Scope 2&quot;,
        &quot;speed&quot;: 17 # 평균 15~20 km/h
    },
    &quot;Train&quot;: {
        &quot;KTX&quot;: {
            &quot;emission&quot;: 19.92,
            &quot;scope&quot;: &quot;Scope 2&quot;,
            &quot;speed&quot;: 180
        },
        &quot;KTX_Sancheon_and_Mugunghwa&quot;: {
            &quot;emission&quot;: 38.105,
            &quot;scope&quot;: &quot;Scope 2&quot;,
            &quot;speed&quot;: 120 # KTX 산천과 무궁화호의 평균속도
        },
        &quot;Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul&quot;: {
            &quot;emission&quot;: 27.19,
            &quot;scope&quot;: &quot;Scope 2&quot;,
            &quot;speed&quot;: 140 # 누리호, ITX 의 평균속도
        }
    }
}

class VehicleCo2:
    def __init__(self,bus_time=0.0,subway_time=0.0,s_flight_time=0.0,l_flight_time=0.0,
                 gasoline_car_time=0.0,diesel_car_time=0.0,electric_car_time=0.0,
                 train_time=0.0,electric_bicycle_time=0.0 ):
        self.bus_time = bus_time
        self.subway_time = subway_time
        self.s_flight_time = s_flight_time
        self.l_flight_time = l_flight_time
        self.gasoline_car_time = gasoline_car_time
        self.diesel_car_time = diesel_car_time
        self.train_time = train_time
        self.electric_bicycle_time = electric_bicycle_time
        self.electric_car_time = electric_car_time

        self.Bool_trainUsed = False
        self.emission_train = 0.0
        self.emission_bus =  self.bus_time / 60.0 * emissions_data[&quot;Bus&quot;][&quot;speed&quot;] * emissions_data[&quot;Bus&quot;][&quot;emission&quot;]
        self.emission_subway = self.subway_time / 60.0 * emissions_data[&quot;Subway&quot;][&quot;speed&quot;] * emissions_data[&quot;Subway&quot;][&quot;emission&quot;]
        self.emission_s_flight =  self.s_flight_time / 60.0 * emissions_data[&quot;S_Flight&quot;][&quot;speed&quot;] * emissions_data[&quot;S_Flight&quot;][&quot;emission&quot;]
        self.emission_l_flight =  self.l_flight_time / 60.0 * emissions_data[&quot;L_Flight&quot;][&quot;speed&quot;] * emissions_data[&quot;L_Flight&quot;][&quot;emission&quot;]
        self.emission_g_car =  self.gasoline_car_time / 60.0 * emissions_data[&quot;Gasoline_Car&quot;][&quot;speed&quot;] * emissions_data[&quot;Gasoline_Car&quot;][&quot;emission&quot;]
        self.emission_d_car =  self.diesel_car_time / 60.0 * emissions_data[&quot;Diesel_Car&quot;][&quot;speed&quot;] * emissions_data[&quot;Diesel_Car&quot;][&quot;emission&quot;]
        self.emission_elec_car = self.electric_car_time / 60.0 * emissions_data[&quot;Electric_Car&quot;][&quot;speed&quot;] * emissions_data[&quot;Electric_Car&quot;][&quot;emission&quot;]
        self.emission_elec_bicycle = self.electric_bicycle_time / 60.0 * emissions_data[&quot;Electric_Bicycle&quot;][&quot;speed&quot;] * emissions_data[&quot;Electric_Bicycle&quot;][&quot;emission&quot;]

        self.emissions_co2 = 0.0
        # 초기화시에 각 이동수단별 시간을 가져온다
        if self.train_time== 0.0:
            self.Bool_trainUsed = False
        else:
            self.Bool_trainUsed = True



    global emissions_data

    def set_train_kind(self,using_train):
        if self.train_time != 0.0:
            # using_train = input(&quot;이용한 열차 : &quot;)
            match using_train:
                case &quot;1&quot;:
                    self.emission_train = self.train_time / 60.0 * emissions_data[&quot;Train&quot;][&quot;KTX&quot;][&quot;speed&quot;] * emissions_data[&quot;Train&quot;][&quot;KTX&quot;][&quot;emission&quot;]
                case &quot;2&quot;:
                    self.emission_train = self.train_time / 60.0 * emissions_data[&quot;Train&quot;][&quot;KTX_Sancheon_and_Mugunghwa&quot;][&quot;speed&quot;] * emissions_data[&quot;Train&quot;][&quot;KTX_Sancheon_and_Mugunghwa&quot;][&quot;emission&quot;]
                case &quot;3&quot;:
                    self.emission_train = self.train_time / 60.0 * emissions_data[&quot;Train&quot;][&quot;Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul&quot;][&quot;speed&quot;] * emissions_data[&quot;Train&quot;][&quot;Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul&quot;][&quot;emission&quot;]
                case _:
                    self.emission_train = 0.0
                    print(&quot;잘못된 값을 입력하셨습니다, 열차시간은 계산에서 제외합니다&quot;)
        else:
            print(&quot;입력된 기차가 없습니다&quot;)


    def calculate_co2(self):
        # move_bus = (25.0/60.0 * emissions_data[&quot;Bus&quot;][&quot;speed&quot;])*emissions_data[&quot;Bus&quot;][&quot;emission&quot;]
        self.emissions_co2 = (self.emission_bus + self.emission_subway + self.emission_s_flight +
                              self.emission_l_flight + self.emission_g_car + self.emission_d_car +
                              self.emission_elec_car + self.emission_elec_bicycle + self.emission_train)

        return round(self.emissions_co2,2)

vehicle = VehicleCo2(train_time= 30,subway_time=50,electric_car_time=40)
vehicle.set_train_kind('3')
print(vehicle.calculate_co2()) # 4611.97&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ABC 부트캠프</category>
      <category>#abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/34</guid>
      <comments>https://gerhermo.tistory.com/34#entry34comment</comments>
      <pubDate>Sun, 11 Aug 2024 20:17:11 +0900</pubDate>
    </item>
    <item>
      <title>[33일차] ABC 부트캠프 프로젝트 - 3</title>
      <link>https://gerhermo.tistory.com/33</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오전&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;작업 분담 세분화&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_12345345.png&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dftT0S/btsI0I9NyBU/5Q2JBEJhZvZUwGqfQ0PZU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dftT0S/btsI0I9NyBU/5Q2JBEJhZvZUwGqfQ0PZU1/img.png&quot; data-alt=&quot;4조의 프로젝트 체크리스트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dftT0S/btsI0I9NyBU/5Q2JBEJhZvZUwGqfQ0PZU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdftT0S%2FbtsI0I9NyBU%2F5Q2JBEJhZvZUwGqfQ0PZU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1690&quot; height=&quot;499&quot; data-filename=&quot;edited_12345345.png&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4조의 프로젝트 체크리스트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어제의 피드백을 바탕으로 우리들의 역할에 대해 더욱 세분화 및 상태를 파악할 수 있도록 조장님께서 힘써 주셨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;자료 수집 및 파악&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csFFdX/btsI0KT2zqv/sx0ojQ2o1QREEqeYamBw8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csFFdX/btsI0KT2zqv/sx0ojQ2o1QREEqeYamBw8k/img.png&quot; data-alt=&quot;한국 관광 데이터랩&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csFFdX/btsI0KT2zqv/sx0ojQ2o1QREEqeYamBw8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsFFdX%2FbtsI0KT2zqv%2Fsx0ojQ2o1QREEqeYamBw8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;803&quot; height=&quot;644&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;한국 관광 데이터랩&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;승객.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pQsna/btsI1damRmJ/0eh6ReUsfkgHDlVoVzyT30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pQsna/btsI1damRmJ/0eh6ReUsfkgHDlVoVzyT30/img.png&quot; data-alt=&quot;차량별 탄소배출량&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pQsna/btsI1damRmJ/0eh6ReUsfkgHDlVoVzyT30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpQsna%2FbtsI1damRmJ%2F0eh6ReUsfkgHDlVoVzyT30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;606&quot; height=&quot;676&quot; data-filename=&quot;승객.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;차량별 탄소배출량&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오후&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료 조사는 다른 팀원들이 더 힘써주었다. 그 동안 나는 직접적인 설계부분을 맡았다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 카카오맵 API 를 발급 받은 다음 어디까지 가능한가를 알아봤다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;javascript 및 html은 이번 학습 과정에 없기도 했고 지식이 없기에 거의 사용하지 않는 방향으로 잡았다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 맵을 열고 마커로 찍어 보았다&lt;/p&gt;
&lt;pre id=&quot;code_1723375650837&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests
import pandas as pd
import numpy as np
import folium
from folium.plugins import MiniMap

# 카카오 API
def elec_location(region, page_num):
    url = 'https://dapi.kakao.com/v2/local/search/keyword.json'
    params = {'query': region, 'page': page_num}
    headers = {&quot;Authorization&quot;: &quot;KakaoAK mykakaoAPI&quot;} # 내 API 입력
    
    response = requests.get(url, params=params, headers=headers)
    response_json = response.json()
    places = response_json['documents']
    total = response_json['meta']['total_count']
    if total &amp;gt; 45:
        print(total, '개 중 45개 데이터밖에 가져오지 못했습니다!')
    else:
        print('모든 데이터를 가져왔습니다!')
    return places

def elec_info(places):
    X = []
    Y = []
    stores = []
    road_address = []
    place_url = []
    ID = []
    for place in places:
        X.append(float(place['x']))
        Y.append(float(place['y']))
        stores.append(place['place_name'])
        road_address.append(place['road_address_name'])
        place_url.append(place['place_url'])
        ID.append(place['id'])

    ar = np.array([ID, stores, X, Y, road_address, place_url]).T
    df = pd.DataFrame(ar, columns=['ID', 'stores', 'X', 'Y', 'road_address', 'place_url'])
    return df

def keywords(location_name):
    df = None
    for loca in location_name:
        for page in range(1, 4):
            local_name = elec_location(loca, page)
            local_elec_info = elec_info(local_name)

            if df is None:
                df = local_elec_info
            elif local_elec_info is None:
                continue
            else:
                df = pd.concat([df, local_elec_info], join='outer', ignore_index=True)
    return df

def make_map(dfs):
    # 지도 생성하기
    m = folium.Map(location=[36.3504119, 127.3845475],   # 기준좌표
                   zoom_start=10)

    # 미니맵 추가하기
    minimap = MiniMap()
    m.add_child(minimap)

    # 마커 추가하기
    for i in range(len(dfs)):
        folium.Marker([float(dfs['Y'][i]), float(dfs['X'][i])],
                      tooltip=dfs['stores'][i],
                      popup=dfs['place_url'][i],
                      ).add_to(m)
    return m

location = ['대동역 7번출구', '한밭대학교']
df = keywords(location)
df = df.drop_duplicates(['ID'])
df = df.reset_index(drop=True)

map_object = make_map(df)
map_object.save('map.html')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqYj92/btsI00oSNfS/CbgpPYmpszLC2QN659y81k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqYj92/btsI00oSNfS/CbgpPYmpszLC2QN659y81k/img.png&quot; data-alt=&quot;map_html 파일 / 각각 한밭대학교, 대동역 7번출구를 검색하여 마커로 표시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqYj92/btsI00oSNfS/CbgpPYmpszLC2QN659y81k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqYj92%2FbtsI00oSNfS%2FCbgpPYmpszLC2QN659y81k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1016&quot; height=&quot;738&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;map_html 파일 / 각각 한밭대학교, 대동역 7번출구를 검색하여 마커로 표시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 각각의 목적지를 이어주는 코드를 작성했다&lt;/p&gt;
&lt;pre id=&quot;code_1723375729418&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests
import pandas as pd
import numpy as np
import folium
from folium.plugins import MiniMap

# 카카오 API
def elec_location(region, page_num):
    url = 'https://dapi.kakao.com/v2/local/search/keyword.json'
    params = {'query': region, 'page': page_num}
    headers = {&quot;Authorization&quot;: &quot;KakaoAK maykakaoAPI&quot;}

    response = requests.get(url, params=params, headers=headers)
    response_json = response.json()
    places = response_json['documents']
    total = response_json['meta']['total_count']
    if total &amp;gt; 45:
        print(total, '개 중 45개 데이터밖에 가져오지 못했습니다!')
    else:
        print('모든 데이터를 가져왔습니다!')
    return places

def elec_info(places):
    X = []
    Y = []
    stores = []
    road_address = []
    place_url = []
    ID = []
    for place in places:
        X.append(float(place['x']))
        Y.append(float(place['y']))
        stores.append(place['place_name'])
        road_address.append(place['road_address_name'])
        place_url.append(place['place_url'])
        ID.append(place['id'])

    ar = np.array([ID, stores, X, Y, road_address, place_url]).T
    df = pd.DataFrame(ar, columns=['ID', 'stores', 'X', 'Y', 'road_address', 'place_url'])
    return df

def keywords(location_name):
    df = None
    for loca in location_name:
        for page in range(1, 4):
            local_name = elec_location(loca, page)
            local_elec_info = elec_info(local_name)

            if df is None:
                df = local_elec_info
            elif local_elec_info is None:
                continue
            else:
                df = pd.concat([df, local_elec_info], join='outer', ignore_index=True)
    return df

def make_map(dfs, start, end):
    # 지도 생성하기
    m = folium.Map(location=[33.4935, 126.6266],   # 기준좌표: 제주어딘가로 내가 대충 설정
                   zoom_start=12)

    # 미니맵 추가하기
    minimap = MiniMap()
    m.add_child(minimap)

    # 마커 추가하기
    for i in range(len(dfs)):
        folium.Marker([float(dfs['Y'][i]), float(dfs['X'][i])],
                      tooltip=dfs['stores'][i],
                      popup=dfs['place_url'][i],
                      icon=folium.Icon(color='blue')
                      ).add_to(m)

    # 출발지와 목적지 추가하기
    folium.Marker(start, tooltip='출발지', icon=folium.Icon(color='green')).add_to(m)
    folium.Marker(end, tooltip='목적지', icon=folium.Icon(color='red')).add_to(m)

    # 출발지와 목적지 연결하기
    folium.PolyLine(locations=[start, end], color='red', weight=2.5, opacity=1).add_to(m)

    return m

location = ['대동역 7번 출구', '목포시 갓바위']
df = keywords(location)
df = df.drop_duplicates(['ID'])
df = df.reset_index(drop=True)

# 출발지와 목적지 설정
start = [33.4607, 126.9364]  # 예시 좌표 (출발지)
end = [33.5097, 126.4913]    # 예시 좌표 (목적지)

map_object = make_map(df, start, end)
map_object.save('map_start_arrive.html')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;858&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkxYUM/btsI0MdmpB8/QLaqDJ1n1Dq5jdCKevzGZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkxYUM/btsI0MdmpB8/QLaqDJ1n1Dq5jdCKevzGZ0/img.png&quot; data-alt=&quot;출발지, 목적지의 좌표는 제주도의 임의의 장소 2개를 설정, 나머지는 마커로 표시됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkxYUM/btsI0MdmpB8/QLaqDJ1n1Dq5jdCKevzGZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkxYUM%2FbtsI0MdmpB8%2FQLaqDJ1n1Dq5jdCKevzGZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1897&quot; height=&quot;858&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;858&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출발지, 목적지의 좌표는 제주도의 임의의 장소 2개를 설정, 나머지는 마커로 표시됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이러한 동적 지도로는 현재의 앱에 사용할 지도와는 방향성이 많이 다르기 때문에 웹 크롤링을 통한 맵 사용으로 계획을 변경하였다.&lt;/p&gt;
&lt;pre id=&quot;code_1723376046477&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

def create_map_url(latitude, longitude, name=None):
    base_url = &quot;https://map.kakao.com/link/map/&quot;
    if name:
        url = f&quot;{base_url}{name},{latitude},{longitude}&quot;
    else:
        url = f&quot;{base_url}{latitude},{longitude}&quot;
    return url

def create_directions_url(latitude, longitude, name=None):
    base_url = &quot;https://map.kakao.com/link/to/&quot;
    if name:
        url = f&quot;{base_url}{name},{latitude},{longitude}&quot;
    else:
        url = f&quot;{base_url}{latitude},{longitude}&quot;
    return url

# 예시 사용 &amp;lt; - 해당 부분을 여행지로 변경
# https://deveapp.com/map.php &amp;lt;- 위도 경도 변환 사이트
latitude = 34.7921469527007
longitude = 126.425695326
name = &quot;목포갓바위&quot;

map_url = create_map_url(latitude, longitude, name)
directions_url = create_directions_url(latitude, longitude, name)

# Selenium을 사용하여 Chrome으로 URL 열기
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# 첫 번째 URL 열기
# driver.get(map_url)
# time.sleep(5)

# 두 번째 URL ( 목적지 ) 열기
driver.get(directions_url)
driver.implicitly_wait(10)
time.sleep(5)


input(&quot;Press Enter to close the browser...&quot;)
driver.quit()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 코드를 실행하면 목적지로 찍힌 '목포 갓바위' 카카오맵 페이지가 실행된다&lt;/p&gt;</description>
      <category>ABC 부트캠프</category>
      <category>#abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/33</guid>
      <comments>https://gerhermo.tistory.com/33#entry33comment</comments>
      <pubDate>Sun, 11 Aug 2024 13:36:26 +0900</pubDate>
    </item>
    <item>
      <title>[32일차] ABC 부트캠프 프로젝트 - 2</title>
      <link>https://gerhermo.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;멘토링 받았던 주제에 대해서 조금 더 구체화 및 찾아가는 멘토링을 통해 여러가지 팁을 얻어보는 시간을 가지자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자의 역할에 대하여 상세하게 적지는 않을것이다. 해당 블로그의 포스트에는 본인이 수행했던 작업을 위주로 적혀있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오전&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트 설계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주제를 정했으니 이 서비스 및 어플리케이션의 이름과 프로젝트 명, 조의 이름 등을 정해야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀원들의 열렬한 이야기 끝에 우리는 서비스 및 프로젝트의 이름을 다음과 같이 정했다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;G-SOK &lt;br /&gt;(Green&amp;nbsp;Sustainability&amp;nbsp;Our&amp;nbsp;Key) &lt;br /&gt;&quot;녹색&amp;nbsp;지속&amp;nbsp;가능성,&amp;nbsp;우리의&amp;nbsp;열쇠&quot;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조의 이름은&lt;b&gt; ' 떠나조, 근데 이제 ZERO를 곁들인 '&amp;nbsp;&lt;/b&gt;으로 정했다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;각종 제출 파일 작성&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn3WLA/btsIZ5xVD75/dPzvRvz9JLlmaWpo4SOUd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn3WLA/btsIZ5xVD75/dPzvRvz9JLlmaWpo4SOUd1/img.png&quot; data-alt=&quot;결과보고서 중 부가적인 기능 파트를 작성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn3WLA/btsIZ5xVD75/dPzvRvz9JLlmaWpo4SOUd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn3WLA%2FbtsIZ5xVD75%2FdPzvRvz9JLlmaWpo4SOUd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;781&quot; height=&quot;550&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과보고서 중 부가적인 기능 파트를 작성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오후&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오후부터는 인원들이 각각 본인이 맡은 역할에 따라 분담하며 프로젝트 완성을 향한 마라톤을 시작했다&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;자료 찾기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오후에는 우리들의 앱을 실현하기 위한 여러가지 자료를 조사했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;탄소배출량을 계산하기 위해서는 여러 탈 것들의 배출량을 계산할 필요가 있으며, 또한 지도를 활용할 수 있는지 여부를 파악하는 것이 중요했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1063&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2aQf0/btsI0IaTW7u/8KIj5jOPn4140j7GFDK4bK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2aQf0/btsI0IaTW7u/8KIj5jOPn4140j7GFDK4bK/img.png&quot; data-alt=&quot;출처 : https://www.khan.co.kr/economy/economy-general/article/202107040854001&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2aQf0/btsI0IaTW7u/8KIj5jOPn4140j7GFDK4bK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2aQf0%2FbtsI0IaTW7u%2F8KIj5jOPn4140j7GFDK4bK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1063&quot; height=&quot;627&quot; data-origin-width=&quot;1063&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://www.khan.co.kr/economy/economy-general/article/202107040854001&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;찾아가는 멘토링 - 공생 / 민노아 대표&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESG 첫시간에 따뜻한 기술에 대한 강의를 해주셨던 민노아 대표를 찾아가 주제에 대한 피드백을 받았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r2coa/btsI1RkncOg/LTYGjqrCkcIjy5V5xg9P0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r2coa/btsI1RkncOg/LTYGjqrCkcIjy5V5xg9P0K/img.png&quot; data-alt=&quot;민노아 대표님의 피드백&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r2coa/btsI1RkncOg/LTYGjqrCkcIjy5V5xg9P0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr2coa%2FbtsI1RkncOg%2FLTYGjqrCkcIjy5V5xg9P0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;821&quot; height=&quot;628&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;민노아 대표님의 피드백&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 뼈저리게 느꼈던 이야기는 바로 수요조사 부문이였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 피드백을 받고 우리는 역할분담 및 데드라인을 형성하여 일의 효율성을 높였다.&lt;/p&gt;</description>
      <category>ABC 부트캠프</category>
      <category>#abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업</category>
      <author>GerHerMo</author>
      <guid isPermaLink="true">https://gerhermo.tistory.com/32</guid>
      <comments>https://gerhermo.tistory.com/32#entry32comment</comments>
      <pubDate>Sun, 11 Aug 2024 12:42:21 +0900</pubDate>
    </item>
  </channel>
</rss>