<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ms-seo</title>
    <link>https://with-seo.tistory.com/</link>
    <description>공부 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 4 Jul 2026 21:21:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Seo-Westbrook</managingEditor>
    <item>
      <title>OpenCV(C++) 설치와 환경 설정</title>
      <link>https://with-seo.tistory.com/entry/OpenCV-C</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;OpenCV는 다수의 모듈 라이브러리가 모여서 만들어진 것이라고 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;767&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFqNql/btqESH1Dh5Z/KdlbI7zlTPabxrvk7axiuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFqNql/btqESH1Dh5Z/KdlbI7zlTPabxrvk7axiuk/img.png&quot; data-alt=&quot;OpenCV 모듈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFqNql/btqESH1Dh5Z/KdlbI7zlTPabxrvk7axiuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFqNql%2FbtqESH1Dh5Z%2FKdlbI7zlTPabxrvk7axiuk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;767&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;OpenCV 모듈&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;OpenCV 모듈은 별도의 *.lib, *.dll 파일로 만들어집니다.&lt;/p&gt;
&lt;p&gt;OpenCV를 이용하는 프로그램을 개발하려면 여러 모듈 중에서 필요한 모듈을 모두 선택하여 프로젝트에 포함시켜야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QpOsm/btqEQ7Aqbwm/dO80fi2yOJLwk6mytNk7Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QpOsm/btqEQ7Aqbwm/dO80fi2yOJLwk6mytNk7Rk/img.png&quot; data-alt=&quot;일반적인 컴퓨터 비전 문제 해결 과정과 관련 OpenCV 모듈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QpOsm/btqEQ7Aqbwm/dO80fi2yOJLwk6mytNk7Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQpOsm%2FbtqEQ7Aqbwm%2FdO80fi2yOJLwk6mytNk7Rk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;일반적인 컴퓨터 비전 문제 해결 과정과 관련 OpenCV 모듈&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;OpenCV 설치&lt;/b&gt; (&lt;a href=&quot;https://opencv.org/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;저는 windows10 환경 기반이므로 설치 실행 파일을 이용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;설치 실행파일은 빠르고 간단하며 미리 빌드된 DLL, LIB를 제공한다는 것이지만, OpenCV 추가 모듈을 사용할 수 없다는 단점이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 문제를 해결하기 위해서는 소스 코드를 직접 빌드해야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[설치과정]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;1. 설치 폴더 지정&lt;/p&gt;
&lt;p&gt;2. 설치된 OpenCV 폴더 구조&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3O6PL/btqESXpEGbx/Fx0ephRo0WxAHJYiwfzgxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3O6PL/btqESXpEGbx/Fx0ephRo0WxAHJYiwfzgxk/img.png&quot; data-alt=&quot;설치된 OpenCV 폴더 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3O6PL/btqESXpEGbx/Fx0ephRo0WxAHJYiwfzgxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3O6PL%2FbtqESXpEGbx%2FFx0ephRo0WxAHJYiwfzgxk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;설치된 OpenCV 폴더 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- OpenC 설치 파일은 world 모듈을 이용하여 빌드된 라이브러리 파일을 제공합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 라이브러리 파일 이름 뒤에 ~d가 붙은 파일 이름은 디버그 모드에서 사용되는 파일입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- OpenCV 헤더 파일과 *.lib 파일은 추후 Visual Studio에서 OpenCV 응용프로그램을 개발할 때 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- OpenCV 응용 프로그램 실행 시 OpenCV DLL 파일이 필요합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- OpenCV DLL 응용프로그램에서 공통으로 사용하므로 환경 변수 PATH에 추가하여 사용하는 것이 편리합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;3. 환경변수 추가&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 사용자계정.새로만들기: OPENCV_DIR 입력 / 변수 값: C:\opencv\build로 설정&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- Path환경변수: %OPENCV_DIR%\x64\vc15\bin&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7wufc/btqEQ6nZT8X/9eWLkLtyBp6eNbmZVXvjT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7wufc/btqEQ6nZT8X/9eWLkLtyBp6eNbmZVXvjT0/img.png&quot; data-alt=&quot;환경변수 추가 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7wufc/btqEQ6nZT8X/9eWLkLtyBp6eNbmZVXvjT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7wufc%2FbtqEQ6nZT8X%2F9eWLkLtyBp6eNbmZVXvjT0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;환경변수 추가 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;- test: cmd에 opencv_verison.exe 입력&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. Visual Studio 2019에서 설정&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- Debug:x64&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D0k22/btqERs5vLZw/0NAQRtDI5MEbQKOuJKxjq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D0k22/btqERs5vLZw/0NAQRtDI5MEbQKOuJKxjq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D0k22/btqERs5vLZw/0NAQRtDI5MEbQKOuJKxjq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD0k22%2FbtqERs5vLZw%2F0NAQRtDI5MEbQKOuJKxjq0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;- 프로젝트 속성&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;구성&lt;/b&gt;: 모든 구성, 플랫폼: 활성(x64)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;C/C++&lt;/b&gt;: 추가 포함 디렉토리 = $(OPENCV_DIR)\include&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;링커&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;일반 - 추가 라이브러리 디렉토리 = $(OPENCV_DIR)\x64\vc15\lib&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;입력 - 추가 종속성 = &lt;a href=&quot;http://opencv_world430d.lib&quot;&gt;opencv_world430d.lib;&lt;/a&gt; 추가 (d는 Debug에서 사용되는 파일)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LQkwG/btqEQtxit4i/LqLnhw1Ckja0nymEIjnEN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LQkwG/btqEQtxit4i/LqLnhw1Ckja0nymEIjnEN1/img.png&quot; data-alt=&quot;프로젝스 속성 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LQkwG/btqEQtxit4i/LqLnhw1Ckja0nymEIjnEN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLQkwG%2FbtqEQtxit4i%2FLqLnhw1Ckja0nymEIjnEN1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로젝스 속성 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/50</guid>
      <comments>https://with-seo.tistory.com/entry/OpenCV-C#entry50comment</comments>
      <pubDate>Tue, 16 Jun 2020 10:43:30 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu Server - Anaconda Jupyter Notebook 원격</title>
      <link>https://with-seo.tistory.com/entry/Ubuntu-Server-Anaconda-Jupyter-Notebook-%EC%9B%90%EA%B2%A9</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;딥러닝 공부를 하는데 있어 colab, kaggle 등의 노트북을 사용할 수도 있지만 가벼운 노트북에서 나만의 공간을 가지고 공부를 진행하기 위해 GCP의 ubuntu server를 이용한 Anaconda jupyter notebook을 원격으로 윈도우에서 작성할 수 있는 방법을 메모합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. VM Instance 생성&lt;/p&gt;
&lt;p&gt;2. 방화벽 규칙을 정하고 외부 네트워크를 할당&lt;/p&gt;
&lt;p&gt;3. 서버를 실행하여 아나콘다와 각종 라이브러리를 설치&lt;/p&gt;
&lt;p&gt;4. 주피터 노트북 원격 설정&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- vim 편집기를 사용&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기본 설정 파일 생성&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1590064129843&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jupyter-notebook --generate-config&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;원격 연결 시 접속에 사용할 비밀번호 생성 (ipython 이용)&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;1. ipython 입력&lt;/p&gt;
&lt;pre id=&quot;code_1590064176433&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ipython&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 패스워드 생성&lt;/p&gt;
&lt;pre id=&quot;code_1590064338669&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from notebook.auth import sequrity
security.passwd()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;- Enter password와 Verify password 를 입력하면 out으로 'sha:...' 형식의 해쉬값을 받을 수 있음&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;설정 파일 수정하기 (vim 사용)&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;1. 디렉토리 이동&lt;/p&gt;
&lt;pre id=&quot;code_1590064540316&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd ~/.jupyter&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 설정파일 열기&lt;/p&gt;
&lt;pre id=&quot;code_1590064578887&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim jupyter_notebook_config.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;디렉토리를 이동하지 않고 설정파일 열기&lt;/p&gt;
&lt;pre id=&quot;code_1590064627622&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd ~/.jupyter/jupyter_notebook_config.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 설정파일 수정하기&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 1) 맨 위에 입력 (본인은 맨 위에 입력)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 2) [esc -&amp;gt; /검색어] 를 통해 주석(#)을 풀고 작성해도 상관 없음&lt;/p&gt;
&lt;pre id=&quot;code_1590065066248&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;c = get_config()

c.NotebookApp.password = 'sha:~~~~' # 아까 받은 패스워드 해시값 입력
c.NotebookApp.open_browser = False
c.NotebookApp.notebook_dir = '' # 원하는 디렉토리 입력
c.NotebookApp.ip = '*'
c.NotebookApp.port = 8888 # 사용할 포트번호 입력 (기본포트면 입력 안해도 됨)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;- 다른 블로그에는 [c.JupyterApp.config_file_name = 'jupyter_notebook_config.py'] 를 입력하는데 나는 입력하지 않아도 잘 되서 그냥 안씀&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 저장하고 나가기&lt;/p&gt;
&lt;p&gt;[esc -&amp;gt; :wq! -&amp;gt; enter]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;포트 허용(방화벽)&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;- 포트 번호는 자신의 포트 번호 입력&lt;/p&gt;
&lt;pre id=&quot;code_1590065441356&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw allow 8888&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주피터 노트북 원격 연결&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;- 아무거나 사용&lt;/p&gt;
&lt;pre id=&quot;code_1590065572890&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jupyter-notebook
jupyter notebook&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;alias 를 사용하여 간편하게 실행&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;1) 현재 로그인한 계정에만 적용 시 사용&lt;/p&gt;
&lt;pre id=&quot;code_1590066447688&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/home/계정명/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3) 어디에 작성했는지 잊어버릴 수도 있으므로 문서 가장 아래에서 작업하는게 좋음&lt;/p&gt;
&lt;pre id=&quot;code_1590067020387&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. alias 설정 내용 조회&lt;/p&gt;
&lt;pre id=&quot;code_1590065891169&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alias&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. alias 등록&lt;/p&gt;
&lt;pre id=&quot;code_1590067504603&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 홈 디렉토리에서 등록
vim /home/계정명/.bashrc

# 루트 디렉토리
vim ~/.bashrc


# ex)
alias dir='ls -al'
alias jupy='jupyter notebook --port=8888'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 적용&lt;/p&gt;
&lt;pre id=&quot;code_1590067636177&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. alias 해제 (선택)&lt;/p&gt;
&lt;pre id=&quot;code_1590065931460&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 특정 alias
unalias [alias]

#모든 alias
unalias -a&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Jupyter Notebook 다른 작업 수행 or 종료&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;1. Jupyter 노트북을 실행하고 다른 작업 하기&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- ctrl + z&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1-1. 종료하기 (fuser)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- fuser 사용법: info fuser&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 8888 포트를 강제로 죽일 경우: fuser -k 8888/tcp&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1-2 종료하기 (kill)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 해당 프로세스 아이디 가져오기: netstat -tnlp|grep 8888&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 해당 프로세스 죽이기: kill -9 [아이디]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;수정&amp;gt;&lt;/p&gt;
&lt;p&gt;1. import notebook auth import security -&amp;gt; &lt;span style=&quot;color: #333333;&quot;&gt;import notebook.auth import security&lt;/span&gt;&lt;/p&gt;</description>
      <category>Programming/Virtual Machine</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/45</guid>
      <comments>https://with-seo.tistory.com/entry/Ubuntu-Server-Anaconda-Jupyter-Notebook-%EC%9B%90%EA%B2%A9#entry45comment</comments>
      <pubDate>Thu, 21 May 2020 22:32:11 +0900</pubDate>
    </item>
    <item>
      <title>3과목 - 데이터베이스 구축</title>
      <link>https://with-seo.tistory.com/entry/3%EA%B3%BC%EB%AA%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1] 논리 데이터베이스 설계&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스 설계&lt;/li&gt;
&lt;li&gt;데이터 모델의 개념&lt;/li&gt;
&lt;li&gt;데이터 모델의 구성 요소 - 개체(Entity)&lt;/li&gt;
&lt;li&gt;데이터 모델의 구성 요소 - 속성(Attribute)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;데이터 모델의 구성 요소 - 관계(Relationship)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;식별자(Identifier)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;E-R(개체-관계) 모델&lt;/li&gt;
&lt;li&gt;관계형 데이터 모델&lt;/li&gt;
&lt;li&gt;관계형 데이터베이스의 구조&lt;/li&gt;
&lt;li&gt;관계형 데이터베이스의 제약 조건 - 키(Key)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;관계형 데이터베이스의 제약 조건 - 무결성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;관계대수 및 관계해석&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;정규화(Nomalization)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;반정규화(Denormalization)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;시스템 카탈로그&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;[Keyward]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;개체, 속성, 관계, 튜플, 도메인, 키, 무결성, 관계대수, 정규화, 시스템 카탈로그&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;관계형 데이터베이스의 제약 조건&lt;/span&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;데이터베이스 설계의 개념&lt;/span&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;/li&gt;
&lt;li&gt;논리적 설계(데이터 모델링)&lt;/li&gt;
&lt;li&gt;물리적 설계(데이터 구조화)&lt;/li&gt;
&lt;li&gt;데이터베이스 구현&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;데이터베이스 설계의 개념&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;사용자의 요구를 분석하여 그것을 데이터베이스의 구조에 맞게 변형한 후 특정 DBMS로 데이터베이스를 구현하여 일반 사용자들이 사용하게 하는 것&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;데이터베이스 설계 시 고려사항&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&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;li&gt;효율성&lt;/li&gt;
&lt;li&gt;데이터베이스 확장&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;데이터베이스 설계 순서&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&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;li&gt;구현&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;요구 조건 분석&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;데이터베이스를 사용할 사람들로부터 필요한 용도를 파악하는 것&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;수행 업무와 필요한 데이터의 종류, 용도, 처리형태, 흐름, 제약 조건 등을 수집&lt;/li&gt;
&lt;li&gt;수집된 정보를 바탕으로 요구 조건 명세를 작성&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;개념적 설계(정보 모델링, 개념화)&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;정보의 구조를 얻기 위해 &lt;u&gt;현실 세계의 대한 인식을 추상적 개념으로 표현&lt;/u&gt;하는 과정&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;&lt;b&gt;개념 스키마 모델링&lt;/b&gt;과, &lt;b&gt;트렌잭션 모델링&lt;/b&gt;을 병행 수행&lt;/li&gt;
&lt;li&gt;요구 분석 단계에서 나온 결과인 요구 분석 명세를 DBMS에 독립적인 &lt;b&gt;E-R 다이어그램&lt;/b&gt;으로 작성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DMBS에 독립적인 개념 스키마&lt;/b&gt;를 설계&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[트랜잭션] SELECT, INSERT, DELETE, UPDATE&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[트랜잭션의 특징]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&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;/ol&gt;
&lt;p&gt;[트랜잭션 모델링]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;미리 트랜잭션을 식별하고 명세&lt;/li&gt;
&lt;li&gt;트랜잭션의 빈도수를 미리 파악&lt;/li&gt;
&lt;li&gt;트랜잭션의 입출력과 기능적 행태만 주로 정의&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;논리적 설계(데이터 모델링)&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;현실 세계의 데이터를 논리적 구조의 데이터로 모델화하는 것&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;개념 세계의 데이터를 논리적 구조의 데이터로 모델화&lt;/li&gt;
&lt;li&gt;개념 스키마를 평가 및 정재 -&amp;gt; 정규화&lt;/li&gt;
&lt;li&gt;DBMS에 맞게 논리적 스키마 설계&lt;/li&gt;
&lt;li&gt;트랜잭션 인터페이스 설계&lt;/li&gt;
&lt;li&gt;관계형 데이터베이스라면 테이블 설계 -&amp;gt; 테이블 명세서&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;물리적 설계(데이터 구조화)&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장 장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 것&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;데이터베이스 파일의 저장 구조 및 액세스 경로(index) 결정 -&amp;gt; 처리 성능 고려&lt;/li&gt;
&lt;li&gt;데이터가 컴퓨터에 저장되는 방법 묘사 - 레코드 형식, 순서, 접근경로 등의 정보&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;데이터베이스 구현&lt;/span&gt;&amp;nbsp;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;논리적 설계 단계와 물리적 설계 단계에서 도출된 데이털 베이스 스키마를 파일로 생성하는 과정&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;사용하려는 특정 DBMS의 DDL(데이터 정의어)을 이용하여 데이터베이스 스키마를 기술한 후 컴파일하여 빈 데이터베이스 파일 생성&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;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/정보처리기사</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/44</guid>
      <comments>https://with-seo.tistory.com/entry/3%EA%B3%BC%EB%AA%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95#entry44comment</comments>
      <pubDate>Thu, 21 May 2020 09:41:15 +0900</pubDate>
    </item>
    <item>
      <title>1.소프트웨어 설계</title>
      <link>https://with-seo.tistory.com/entry/1%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%84%A4%EA%B3%84</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[1] 요구사항 확인&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;[A] 소프트웨어 생명 주기&lt;/li&gt;
&lt;li&gt;[A] 스크럼(Scrum) 기법&lt;/li&gt;
&lt;li&gt;[A] XP(eXtreme Programing) 기법&lt;/li&gt;
&lt;li&gt;[C] 현행 시스템 파악&lt;/li&gt;
&lt;li&gt;[C] 개발 기술 환경 파앇&lt;/li&gt;
&lt;li&gt;[C] 요구사항 정의&lt;/li&gt;
&lt;li&gt;[C] 요구사항 분석 기법&lt;/li&gt;
&lt;li&gt;[C] 요구사항 확인 기법&lt;/li&gt;
&lt;li&gt;[A] UML(Undified Modeling Language)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Best Keyword]&lt;/p&gt;
&lt;p&gt;1. 폭포수 모형&lt;/p&gt;
&lt;p&gt;2. 나선형 모형&lt;/p&gt;
&lt;p&gt;3. 에자일 모델&lt;/p&gt;
&lt;p&gt;4. 스크럼 기법&lt;/p&gt;
&lt;p&gt;5. XP&lt;/p&gt;
&lt;p&gt;6. 기능 요구사항&lt;/p&gt;
&lt;p&gt;7. 비기능 요구사항&lt;/p&gt;
&lt;p&gt;8. 프로토 타이핑&lt;/p&gt;
&lt;p&gt;9. UML&lt;/p&gt;
&lt;p&gt;10. UML 다이어그램&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;소트프웨어 생명 주기&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 소프트웨어 생명주기(Software Life Cycle)란?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 소프트웨어 개발 방법론의 바탕이 되는 것.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 소프트웨어를 개발하기 위해 정의하고 운용, 유지보수 등의 과정을 각 단계별로 나눈 것.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 폭포수 모형(Waterfall Model)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 소프트웨어 개발이 폭포에서 물이 떨어지듯이 이전 단계로 돌아갈 수 없다는 전제 하에 각 단계를 확실하게&amp;nbsp; &amp;nbsp; &amp;nbsp;매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후에 다음 단계를 진행하는 개발 방법론&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;radic; 고전적 생명 주기 모형, 선형 순차적 모형, 메뉴얼 작성, 명확한 결과물 산출, 두 개 이상의 과정 병행수행 x&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 프로토 타입 모형(Prototype Model, 원형 모형)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 리즈를 파악하기 위해 시제품을 만들어 최종 결과물을 예측&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용자와 시스템 사이의 인터페이스에 중점을 두어 개발&lt;/p&gt;
&lt;p&gt;구현의 골격 코드가 됨&lt;/p&gt;
&lt;p&gt;폭포수 모형의 단점을 보완하기 위한 모형&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 나선형 모형 (Spiral Model, 점진적 모형)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 폭포수 모형과 프로토 타입 모형의 장점에 위험 분석 기능을 추가&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5. 애자일 모형&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;스크럼 기법&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/정보처리기사</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/43</guid>
      <comments>https://with-seo.tistory.com/entry/1%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%84%A4%EA%B3%84#entry43comment</comments>
      <pubDate>Thu, 21 May 2020 09:35:38 +0900</pubDate>
    </item>
    <item>
      <title>Anaconda Libraries</title>
      <link>https://with-seo.tistory.com/entry/Anaconda-Tensorflow-20-Libraries</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;anaconda&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;- numpy&lt;/p&gt;
&lt;p&gt;&amp;nbsp;: conda install numpy&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- pandas&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;: conda install pandas&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- sklearn&lt;/p&gt;
&lt;p&gt;&amp;nbsp;: conda&amp;nbsp;install&amp;nbsp;-c&amp;nbsp;anaconda&amp;nbsp;scikit-learn&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- openCV&lt;/p&gt;
&lt;p&gt;&amp;nbsp;: conda install -c menpo opencv3&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- glob: 파일들의 목록을 뽑을 때 사용&lt;/p&gt;
&lt;p&gt;&amp;nbsp;: conda&lt;/p&gt;</description>
      <category>Python/Tensorflow &amp;amp; Machine Learning Basic</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/40</guid>
      <comments>https://with-seo.tistory.com/entry/Anaconda-Tensorflow-20-Libraries#entry40comment</comments>
      <pubDate>Sun, 17 May 2020 20:32:06 +0900</pubDate>
    </item>
    <item>
      <title>[Python] CodeSignal 문제 풀이 (58~60)</title>
      <link>https://with-seo.tistory.com/entry/Python-CodeSignal-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-5860</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;58. You are taking part in an Escape Room challenge designed specifically for programmers. In your efforts to find a clue, you've found a binary code written on the wall behind a vase, and realized that it must be an encrypted message. After some thought, your first guess is that each consecutive&lt;span&gt;&amp;nbsp;&lt;/span&gt;8&lt;span&gt;&amp;nbsp;&lt;/span&gt;bits of the code stand for the character with the corresponding&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.ascii-code.com/&quot;&gt;extended ASCII code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Assuming that your hunch is correct, decode the message.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;code = &quot;010010000110010101101100011011000110111100100001&quot;, the output should be&lt;br /&gt;messageFromBinaryCode(code) = &quot;Hello!&quot;.&lt;/p&gt;
&lt;p&gt;The first&lt;span&gt;&amp;nbsp;&lt;/span&gt;8&lt;span&gt;&amp;nbsp;&lt;/span&gt;characters of the code are&lt;span&gt;&amp;nbsp;&lt;/span&gt;01001000, which is&lt;span&gt;&amp;nbsp;&lt;/span&gt;72&lt;span&gt;&amp;nbsp;&lt;/span&gt;in the binary numeral system.&lt;span&gt;&amp;nbsp;&lt;/span&gt;72&lt;span&gt;&amp;nbsp;&lt;/span&gt;stands for&lt;span&gt;&amp;nbsp;&lt;/span&gt;H&lt;span&gt;&amp;nbsp;&lt;/span&gt;in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;ASCII-table, so the first letter is&lt;span&gt;&amp;nbsp;&lt;/span&gt;H.&lt;br /&gt;Other letters can be obtained in the same manner.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1587990690180&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# &amp;lt;My Code&amp;gt;
def messageFromBinaryCode(code):
    l = []
    s = &quot;&quot;

    for i in range(len(code)):
        s += code[i]
        if len(s) == 8:
            l.append(&quot;0b&quot; + s)
            s = &quot;&quot;
    print(l)
    print(s)
    for i in range(len(l)):
        s += chr(int(l[i], 2))
    return s

# &amp;lt;Best Code&amp;gt;
def messageFromBinaryCode(code):
    return &quot;&quot;.join([chr(int(code[8*i:8*i+8],2)) for i in range(len(code)//8)])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;59. &lt;span style=&quot;color: #333333;&quot;&gt;Construct a square matrix with a size&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;N &amp;times; N&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;containing integers from&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;1&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;N * N&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;in a spiral order, starting from top-left and in clockwise direction.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;n = 3&lt;span style=&quot;color: #333333;&quot;&gt;, the output should be&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDtZjd/btqDMkzrnCP/U9PPOhYXqunVlpRZHKkZR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDtZjd/btqDMkzrnCP/U9PPOhYXqunVlpRZHKkZR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDtZjd/btqDMkzrnCP/U9PPOhYXqunVlpRZHKkZR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDtZjd%2FbtqDMkzrnCP%2FU9PPOhYXqunVlpRZHKkZR1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1587990693571&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# &amp;lt;My Code&amp;gt;
def spiralNumbers(n):
    l = [[0 for col in range(n)] for row in range(n)]
    row, col = 0, -1
    flag = 1
    value = 1

    while n &amp;gt; 0:
        for i in range(n):
            col += flag
            l[row][col] = value
            value += 1
        n -= 1
        if n == 0: break
        for i in range(n):
            row += flag
            l[row][col] = value
            value += 1
        flag *= -1
    return l

# &amp;lt;Best Code&amp;gt;
def spiralNumbers(n):
    m = [[0] * n for i in range(n)]
    dx, dy = [0, 1, 0, -1], [1, 0, -1, 0]
    x, y, c = 0, -1, 1
    for i in range(n + n - 1):
        for j in range((n + n - i) // 2):
            x += dx[i % 4]
            y += dy[i % 4]
            m[x][y] = c
            c += 1
    return m&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;60. Sudoku&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a number-placement puzzle. The objective is to fill a&lt;span&gt;&amp;nbsp;&lt;/span&gt;9 &amp;times; 9&lt;span&gt;&amp;nbsp;&lt;/span&gt;grid with digits so that each column, each row, and each of the nine&lt;span&gt;&amp;nbsp;&lt;/span&gt;3 &amp;times; 3&lt;span&gt;&amp;nbsp;&lt;/span&gt;sub-grids that compose the grid contains all of the digits from&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;9.&lt;/p&gt;
&lt;p&gt;This algorithm should check if the given grid of numbers represents a correct solution to Sudoku.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GSFYW/btqDIoqc0Ym/kEMNSIMaH7kWYcUHaVGEVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GSFYW/btqDIoqc0Ym/kEMNSIMaH7kWYcUHaVGEVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GSFYW/btqDIoqc0Ym/kEMNSIMaH7kWYcUHaVGEVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGSFYW%2FbtqDIoqc0Ym%2FkEMNSIMaH7kWYcUHaVGEVk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1587990695047&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# &amp;lt;My Code&amp;gt;
def sudoku(grid):
    comp = [1, 2, 3, 4, 5, 6, 7, 8, 9]

    for i in range(9):
        l = []
        for j in range(9):
            l.append(grid[j][i])

        #cols/rows
        if comp == sorted(l) and comp == sorted(grid[i]): continue
        else:
            return False

    #sub-grids
    row, col = 0, 0
    for i in range(3):
        for j in range(3):
            l = []
            for y in range(row, row + 3):
                for x in range(col, col + 3):
                    l.append(grid[y][x])
            print(l)
            col += 3
            if comp == sorted(l): continue
            else: return False      
        col = 0
        row += 3
    return True

# &amp;lt;Best Code&amp;gt;
def sudoku(grid):

    def r(i):
        return sorted(grid[i]) != list(range(1,10))
    
    def c(i):
        return sorted([grid[x][i] for x in range(9)]) != list(range(1,10))
    
    def g(x,y):
        return sorted([grid[i][j] for i in range(x,x+3) for j in range(y,y+3)]) != list(range(1,10))

    for i in range(9):
        if r(i) or c(i):
            return False
    for i in range(0,9,3):
        for j in range(0,9,3):
            if g(i,j):
                return False
    return True
            &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python/CodeSignal Algorithm</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/39</guid>
      <comments>https://with-seo.tistory.com/entry/Python-CodeSignal-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-5860#entry39comment</comments>
      <pubDate>Mon, 27 Apr 2020 21:34:40 +0900</pubDate>
    </item>
    <item>
      <title>[Python] CodeSignal 문제 풀이 (55~57)</title>
      <link>https://with-seo.tistory.com/entry/Python-CodeSignal-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-5557</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;55. &lt;span style=&quot;color: #333333;&quot;&gt;Given a rectangular matrix containing only digits, calculate the number of different&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;2 &amp;times; 2&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;squares in it.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;For&lt;/p&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4CZy4/btqDKqHm53g/ceAv3Gz0tzvLVkU3IcHGg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4CZy4/btqDKqHm53g/ceAv3Gz0tzvLVkU3IcHGg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4CZy4/btqDKqHm53g/ceAv3Gz0tzvLVkU3IcHGg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4CZy4%2FbtqDKqHm53g%2FceAv3Gz0tzvLVkU3IcHGg1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p&gt;the output should be&lt;br /&gt;differentSquares(matrix) = 6.&lt;/p&gt;
&lt;p&gt;Here are all&lt;span&gt;&amp;nbsp;&lt;/span&gt;6&lt;span&gt;&amp;nbsp;&lt;/span&gt;different&lt;span&gt;&amp;nbsp;&lt;/span&gt;2 &amp;times; 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;squares:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 2&lt;br /&gt;2 2&lt;/li&gt;
&lt;li&gt;2 1&lt;br /&gt;2 2&lt;/li&gt;
&lt;li&gt;2 2&lt;br /&gt;2 2&lt;/li&gt;
&lt;li&gt;2 2&lt;br /&gt;1 2&lt;/li&gt;
&lt;li&gt;2 2&lt;br /&gt;2 3&lt;/li&gt;
&lt;li&gt;2 3&lt;br /&gt;2 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1587990418264&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# &amp;lt;My Code&amp;gt;
def differentSquares(matrix):
    l = []
    total = 0

    for i in range(len(matrix) - 1):
        for j in range(len(matrix[0]) - 1):
            arr = [[matrix[i][j], matrix[i][j+1]], [matrix[i+1][j], matrix[i+1][j+1]]]
            if arr in l:
                continue
            else:
                l.append(arr)
                total += 1
    
    return total

# &amp;lt;Best Code&amp;gt;
def differentSquares(matrix):
    s = set()
    for i in range(len(matrix) - 1):
        for j in range(len(matrix[i]) - 1):
                s.add((matrix[i][j], matrix[i][j+1], matrix[i+1][j], matrix[i+1][j+1]))
    return len(s)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;56&lt;/span&gt;. &lt;span style=&quot;color: #333333;&quot;&gt;Given an integer&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;product&lt;span style=&quot;color: #333333;&quot;&gt;, find the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;smallest&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;positive&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(i.e. greater than&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;0&lt;span style=&quot;color: #333333;&quot;&gt;) integer the product of whose digits is equal to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;product&lt;span style=&quot;color: #333333;&quot;&gt;. If there is no such integer, return&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;-1&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;instead.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;product = 12, the output should be&lt;br /&gt;digitsProduct(product) = 26;&lt;/li&gt;
&lt;li&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;product = 19, the output should be&lt;br /&gt;digitsProduct(product) = -1.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1587990426244&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# &amp;lt;My Code&amp;gt;
def digitsProduct(product):
    divisor = []
    minimal = 0

    if product == 0: return 10
    if product == 1: return 1

    for i in range(1, product + 1):
        if product % i == 0:
            divide = int(product / i)
            divisor.append([i, divide])

    print(divisor)
    if len(divisor) == 2: return -1

    for i in range(len(divisor)):
        n = int((str(divisor[i][0]) + str(divisor[i][1])))
        if i == 0 or minimal &amp;gt; n:
            minimal = n

    return minimal

# &amp;lt;Best Code&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;57. You are given an array of desired filenames in the order of their creation. Since two files cannot have equal names, the one which comes later will have an addition to its name in a form of&lt;span&gt;&amp;nbsp;&lt;/span&gt;(k), where&lt;span&gt;&amp;nbsp;&lt;/span&gt;k&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the smallest positive integer such that the obtained name is not used yet.&lt;/p&gt;
&lt;p&gt;Return an array of names that will be given to the files.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;names = [&quot;doc&quot;, &quot;doc&quot;, &quot;image&quot;, &quot;doc(1)&quot;, &quot;doc&quot;]&lt;span style=&quot;color: #333333;&quot;&gt;, the output should be&lt;/span&gt;&lt;br /&gt;fileNaming(names) = [&quot;doc&quot;, &quot;doc(1)&quot;, &quot;image&quot;, &quot;doc(1)(1)&quot;, &quot;doc(2)&quot;]&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1587990428527&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# &amp;lt;My Code&amp;gt;
def fileNaming(names):
    l = []

    for i in range(len(names)):
        cnt = 1
        if names[i] in l:
            while True:
                s = names[i] + &quot;(&quot; + str(cnt) + &quot;)&quot;
                if s in l:
                    cnt += 1
                else:
                    l.append(s)
                    break
        else:
            l.append(names[i])
    return l

# &amp;lt;Best Code&amp;gt;
def fileNaming(names):
    for i in range(len(names)):
        if names[i] in names[:i]:
            j=1
            while names[i]+&quot;(&quot;+str(j)+&quot;)&quot; in names[:i]:
                j+=1
            names[i]+=&quot;(&quot;+str(j)+&quot;)&quot;
    return names&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python/CodeSignal Algorithm</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/38</guid>
      <comments>https://with-seo.tistory.com/entry/Python-CodeSignal-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-5557#entry38comment</comments>
      <pubDate>Mon, 27 Apr 2020 21:30:29 +0900</pubDate>
    </item>
    <item>
      <title>[Python] CodeSignal 문제 풀이 (52~54)</title>
      <link>https://with-seo.tistory.com/entry/Python-CodeSignal-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-5254</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;52. &lt;span style=&quot;color: #333333;&quot;&gt;Define a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;word&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;as a sequence of consecutive English letters. Find the longest&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;word&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the given string.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;text = &quot;Ready, steady, go!&quot;&lt;span style=&quot;color: #333333;&quot;&gt;, the output should be&lt;/span&gt;&lt;br /&gt;longestWord(text) = &quot;steady&quot;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1586851417998&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#&amp;lt;My Code&amp;gt;
def longestWord(text):
    l = list()
    print(ord(&quot;a&quot;), ord(&quot;z&quot;), ord(&quot;A&quot;), ord(&quot;Z&quot;))

    s = &quot;&quot;
    for i in range(len(text)):
        if 97 &amp;lt;= ord(text[i]) and ord(text[i]) &amp;lt;= 122 or 65 &amp;lt;= ord(text[i]) and ord(text[i]) &amp;lt;= 90:
            s += text[i]
        else:
            l.append(s)
            s = &quot;&quot;
    l.append(s)
    return max(l, key=len)

#&amp;lt;Best Code&amp;gt;
def longestWord(text):
    return max(re.split('[^a-zA-Z]', text), key=len)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;53. &lt;span style=&quot;color: #333333;&quot;&gt;Check if the given string is a correct time representation of the 24-hour clock.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;time = &quot;13:58&quot;, the output should be&lt;br /&gt;validTime(time) = true;&lt;/li&gt;
&lt;li&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;time = &quot;25:51&quot;, the output should be&lt;br /&gt;validTime(time) = false;&lt;/li&gt;
&lt;li&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;time = &quot;02:76&quot;, the output should be&lt;br /&gt;validTime(time) = false.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1586851423074&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#&amp;lt;My Code&amp;gt;
def validTime(time):
    l = time.split(':')
    
    if int(l[0]) &amp;lt; 24 and int(l[1]) &amp;lt; 60:
        return True
    else:
        return False

#&amp;lt;Best Code&amp;gt;
def validTime(time):
    h,m=map(int,time.split(&quot;:&quot;))
    return 0&amp;lt;=h&amp;lt;24 and 0&amp;lt;=m&amp;lt;60&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;54. CodeMaster has just returned from shopping. He scanned the check of the items he bought and gave the resulting string to Ratiorg to figure out the total number of purchased items. Since Ratiorg is a bot he is definitely going to automate it, so he needs a program that sums up all the numbers which appear in the given input.&lt;/p&gt;
&lt;p&gt;Help Ratiorg by writing a function that returns the sum of numbers that appear in the given&lt;span&gt;&amp;nbsp;&lt;/span&gt;inputString.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;inputString = &quot;2 apples, 12 oranges&quot;&lt;span style=&quot;color: #333333;&quot;&gt;, the output should be&lt;/span&gt;&lt;br /&gt;sumUpNumbers(inputString) = 14&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1586851426108&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#&amp;lt;My Code&amp;gt;
def sumUpNumbers(inputString):
    l = re.findall('\d+', inputString)
    sumUp = 0

    for n in l:
        sumUp += int(n)
    return sumUp

#&amp;lt;Best Code&amp;gt;
def sumUpNumbers(inputString):
    l = re.findall(r'\d+', inputString)
    return sum(int(n) for n in l)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python/CodeSignal Algorithm</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/36</guid>
      <comments>https://with-seo.tistory.com/entry/Python-CodeSignal-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-5254#entry36comment</comments>
      <pubDate>Tue, 14 Apr 2020 17:05:47 +0900</pubDate>
    </item>
    <item>
      <title>[Python] CodeSignal 문제 풀이 (49~51)</title>
      <link>https://with-seo.tistory.com/entry/Python-CodeSignal-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-4951</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;49. Given a string, return its encoding defined as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First, the string is divided into the least possible number of disjoint&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;keyword://substring&quot;&gt;substrings&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;consisting of identical characters
&lt;ul&gt;
&lt;li&gt;for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;aabbbc&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is divided into&lt;span&gt;&amp;nbsp;&lt;/span&gt;[&quot;aa&quot;, &quot;bbb&quot;, &quot;c&quot;]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Next, each&lt;span&gt;&amp;nbsp;&lt;/span&gt;substring&lt;span&gt;&amp;nbsp;&lt;/span&gt;with length greater than one is replaced with a concatenation of its length and the repeating character
&lt;ul&gt;
&lt;li&gt;for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;substring&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;bbb&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is replaced by&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;3b&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Finally, all the new strings are concatenated together in the same order and a new string is returned.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;s = &quot;aabbbc&quot;&lt;span style=&quot;color: #333333;&quot;&gt;, the output should be&lt;/span&gt;&lt;br /&gt;lineEncoding(s) = &quot;2a3bc&quot;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1586850990165&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#&amp;lt;My Code&amp;gt;
def lineEncoding(s):
    l = []
    cnt = 1
    c = &quot;&quot;
    result = &quot;&quot;

    for i in range(len(s)):
        if i == 0: 
            c = s[0]
            continue
        if c == s[i]:
            cnt += 1
        else:
            if cnt == 1:
                result += c
            else:
                result += str(cnt) + c
            c = s[i]
            cnt = 1
    if cnt == 1:
        result += c
    else:
        result += str(cnt) + c

    return result
    
#&amp;lt;Best Code&amp;gt;
from itertools import groupby

def lineEncoding(s):
    x = ''
    for k,g in groupby(s):
        y = len((list(g)))
        if y==1:
            x += k
        else:
            x += str(y) + k
    return x&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;50. Given a position of a knight on the standard chessboard, find the number of different moves the knight can perform.&lt;/p&gt;
&lt;p&gt;The knight can move to a square that is two squares horizontally and one square vertically, or two squares vertically and one square horizontally away from it. The complete move therefore looks like the letter L. Check out the image below to see all valid moves for a knight piece that is placed on one of the central squares.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckhG2i/btqDrk1i7Ps/kwrqN7moGF2jmbkeTa8KHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckhG2i/btqDrk1i7Ps/kwrqN7moGF2jmbkeTa8KHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckhG2i/btqDrk1i7Ps/kwrqN7moGF2jmbkeTa8KHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckhG2i%2FbtqDrk1i7Ps%2FkwrqN7moGF2jmbkeTa8KHK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Example]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CFpAr/btqDpgZyWyv/Atn4ME8bATXbkNb443pe8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CFpAr/btqDpgZyWyv/Atn4ME8bATXbkNb443pe8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CFpAr/btqDpgZyWyv/Atn4ME8bATXbkNb443pe8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCFpAr%2FbtqDpgZyWyv%2FAtn4ME8bATXbkNb443pe8K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1586851175764&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#&amp;lt;My Code&amp;gt;
def chessKnight(cell):
     a, n = cell[0], cell[1]

#&amp;lt;Best Code&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;51. &lt;span style=&quot;color: #333333;&quot;&gt;Given some integer, find the maximal number you can obtain by deleting exactly one digit of the given number.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Example]&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 124px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 124px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 124px;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;n = 152, the output should be&lt;br /&gt;deleteDigit(n) = 52;&lt;/li&gt;
&lt;li&gt;For&lt;span&gt;&amp;nbsp;&lt;/span&gt;n = 1001, the output should be&lt;br /&gt;deleteDigit(n) = 101.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Solution]&lt;/p&gt;
&lt;pre id=&quot;code_1586851242106&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#&amp;lt;My Code&amp;gt;
def deleteDigit(n):
    strN = str(n)
    maxDigit = 0

    for i in range(len(strN)):
        num = 0
        if i == 0:
            num = int(strN[1:])
        elif i == len(strN) - 1:
            num = int(strN[:-1])
        else:
            num = int(strN[0:i] + strN[i + 1:])

        if maxDigit &amp;lt; num:
            maxDigit = num
    return maxDigit
    
#&amp;lt;Best Code&amp;gt;
def deleteDigit(n):
    n = str(n)
    return max(int(''.join(n[:i]+n[i+1:])) for i in range(len(n)))&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python/CodeSignal Algorithm</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/35</guid>
      <comments>https://with-seo.tistory.com/entry/Python-CodeSignal-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4-4951#entry35comment</comments>
      <pubDate>Tue, 14 Apr 2020 17:02:39 +0900</pubDate>
    </item>
    <item>
      <title>Lec 01. C++ 표준 라이브러리</title>
      <link>https://with-seo.tistory.com/entry/Lec-01-C-%ED%91%9C%EC%A4%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;enum&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;enum: 변수에 지정할 수 있는 값의 범위를 엄격하게 제한&lt;/p&gt;
&lt;pre id=&quot;code_1586339847690&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum PieceType { PieceKing = 1, PieceQueen, PieceBook = 10, PiecePawn, };&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;내부적으로 정숫값으로 표현 (첫 값: 0)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;사칙연산&lt;/u&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;정숫값&lt;/u&gt;처럼 다루는 코드 X&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;엄격한 열거 타입: enum class&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1586340054474&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum class PieceType
{
	King = 1,
	Queen,
	Rook = 10,
	Pawn
};&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;스코프(유효 범위)가 자동으로 확장되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;- PieceType piece = PieceType::King&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;자동으로 정수 타입으로 변환되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;- if (PieceTyhpe::Queen == 2) { ... } -&amp;gt; 불가능&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;c++14부터는 함수의 리턴 타입을 컴파일러가 알아서 지정할 수 있다. (return type 자리에 &lt;b&gt;auto&amp;nbsp;&lt;/b&gt;키워드를 넣는다.)&lt;/p&gt;
&lt;pre id=&quot;code_1586340621000&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;auto addNumbers(int num1, int num2)
{
	return num1 + num2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;컴파일러는 return 문에 나온 표현식의 타입에 따라 리턴 타입을 추론한다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;재귀함수 X -&amp;gt; 타입을 추론하기 전에 return을 해버린다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;함수마다 내부적으로 __func__ 라는 로컬 변수가 정의되어 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1586343750331&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int addNumbers(int num1, int num2)
{
	std::cout &amp;lt;&amp;lt; &quot;Entering function: &quot; &amp;lt;&amp;lt; __func__ &amp;lt;&amp;lt; std::endl;
	return num1 + num2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size14&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;현재 함수의 이름을 값으로 갖고 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size14&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주로 로그를 남기는데 사용한다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;C 스타일 배열&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1586344033400&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int myArray[3] = { 0, 1, 2 };&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;C++ 스타일 배열&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;#include &amp;lt;array&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;std::array 고정 컨테이너&lt;/p&gt;
&lt;pre id=&quot;code_1586344291300&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;std::array&amp;lt;int, 3&amp;gt; arr = { 0, 1, 2 };
std::cout &amp;lt;&amp;lt; &quot;Array size: &quot; &amp;lt;&amp;lt; arr.size() &amp;lt;&amp;lt; std::endl;
std::cout &amp;lt;&amp;lt; &quot;2nd element: &quot; &amp;lt;&amp;lt; arr[1] &amp;lt;&amp;lt; std::endl;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;[장점]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-ke-size=&quot;size14&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;항상 크기를 정확히 알 수 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size14&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;자동으로 포인터를 캐스팅(동적 형변환) 하지 않아서 특정한 종류의 버그를 방지할 수 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size14&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반복자(iterator)로 배열에 원소에 대한 반복문을 쉽게 작성할 수 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;std::vector&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;#include &amp;lt;vector&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;저장 공간의 크기가 고정적인 컨테이너 중 하나로 &lt;u&gt;C 스타일의 배열을 대체할 수 있으며 훨씬 유연하고 안전&lt;/u&gt;하다.&lt;/p&gt;
&lt;pre id=&quot;code_1586344635360&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;std::vector&amp;lt;int&amp;gt; myVector = { 11, 22 };

myVector.push_back(33);
myVector.push_back(44);

std::cout &amp;lt;&amp;lt; &quot;1st element: &quot; &amp;lt;&amp;lt; myVector[0] &amp;lt;&amp;lt; std::endl;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;C++17에 구조적 바인딩이라는 개념이 도입되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;구조적 바인딩을 이용하면 여러 개의 변수를 언언할 때 배열, 구조체, 페어 또는 튜플의 값으로 초기화할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1586345552358&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 1
std::array&amp;lt;int, 3&amp;gt; values = { 11, 22, 33 }; 
auto [x, y, z] = values;

// 2
struct Point { double mX, mY, mZ; };

Point point;
point.mX = 1.0; point.mY = 2.0; point.mZ = 3.0;
auto [x, y, z] = point;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;※ &lt;span style=&quot;color: #ee2323;&quot;&gt;구조적 바인딩 사용하기&lt;/span&gt;: 프로젝트 - 속성 - 구성속성 - C/C++ - 명령줄(Command Line) - 추가옵션에 /std:c++17 입력 후 적용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;범위 기반 for문&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;컨테이너에 담긴 원소에대한 반복문을 실행하는데 편리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반복자를 리턴하는 begin()과 end() 메서드가 정의된 모든 타입에 적용할 수 있다. (array, vector ...etc)&lt;/p&gt;
&lt;pre id=&quot;code_1586345969155&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;std::array&amp;lt;int, 4&amp;gt; arr = { 1, 2, 3, 4 };
for (int i : arr)
{
	std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; std::endl;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;String&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;포인터와 동적 메모리 - 스택과 힙&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;포인터 사용법&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;동적 배열 할당&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/C ++</category>
      <category>전문가를 위한 c++17</category>
      <author>Seo-Westbrook</author>
      <guid isPermaLink="true">https://with-seo.tistory.com/34</guid>
      <comments>https://with-seo.tistory.com/entry/Lec-01-C-%ED%91%9C%EC%A4%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC#entry34comment</comments>
      <pubDate>Wed, 8 Apr 2020 20:03:29 +0900</pubDate>
    </item>
  </channel>
</rss>