<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DEV on j2234's log</title><link>https://log.j2234.cc/categories/dev/</link><description>Recent content in DEV on j2234's log</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026</copyright><lastBuildDate>Tue, 07 Apr 2026 15:55:05 +0000</lastBuildDate><atom:link href="https://log.j2234.cc/categories/dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Deprecated</title><link>https://log.j2234.cc/posts/2022-tistory/186-deprecated/</link><pubDate>Mon, 04 Aug 2025 21:13:19 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/186-deprecated/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;confirm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;⚠️ Deprecated! \nGo to log.j2234.dev?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https://log.j2234.dev&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>AWS CloudFront 내 도메인 연결하기 (CloudFlare)</title><link>https://log.j2234.cc/posts/velog/002-aws-cloudfront-%EB%82%B4-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-cloudflare/</link><pubDate>Fri, 16 May 2025 22:07:48 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/002-aws-cloudfront-%EB%82%B4-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-cloudflare/</guid><description>&lt;p&gt;&lt;img src="img/image-06.webp" width="30%" height="30%"&gt; &lt;br&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;Intro
 &lt;div id="intro" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#intro" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;이미지를 S3에 업로드하면 CloudFront를 통해 서빙하면서, CloudFront 기본 도메인을 CloudFlare의 내 커스텀 도메인으로 매핑하는 과정을 기록한다.
DNS로 Route53을 사용할 때보다 몇 가지 추가 설정이 필요하다. &lt;del&gt;기억이 안나서 엄청 헤멧다&lt;/del&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;선행 조건
 &lt;div id="선행-조건" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%a0%ed%96%89-%ec%a1%b0%ea%b1%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;S3 bucket (ACL 등 설정)&lt;/li&gt;
&lt;li&gt;Origin=S3인 CloudFront 배포 (기본 작동 확인)&lt;/li&gt;
&lt;li&gt;Cloudfront DNS 관리 권한&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;인증서 발급
 &lt;div id="인증서-발급" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b8%ec%a6%9d%ec%84%9c-%eb%b0%9c%ea%b8%89" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;가장 먼저, ACM(AWS Certificate Manager) 인증서를 발급 받아야 한다.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/002-aws-cloudfront-%EB%82%B4-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-cloudflare/featured.webp"/></item><item><title>RabbitMQ 기초</title><link>https://log.j2234.cc/posts/velog/003-rabbitmq-%EA%B8%B0%EC%B4%88/</link><pubDate>Sun, 27 Apr 2025 21:22:54 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/003-rabbitmq-%EA%B8%B0%EC%B4%88/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="500"
 height="500"
 src="https://log.j2234.cc/posts/velog/003-rabbitmq-%EA%B8%B0%EC%B4%88/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/003-rabbitmq-%EA%B8%B0%EC%B4%88/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/003-rabbitmq-%EA%B8%B0%EC%B4%88/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/003-rabbitmq-%EA%B8%B0%EC%B4%88/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;blockquote&gt;&lt;p&gt;이 글은 RabbitMQ의 기본적인 개념과 spring에서 연동 방법을 기초 수준에서 설명한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;RabbitMQ란?
 &lt;div id="rabbitmq란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#rabbitmq%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;플랫폼 중립적인 메시징 및 스트리밍 브로커로,&lt;a href="https://www.rabbitmq.com/docs/protocols" target="_blank" rel="noreferrer"&gt;AMQP,MQTT 등의 여러 개방형 표준 프로토콜&lt;/a&gt;을 지원해 다양한 언어와 플랫폼 간 메시지 송수신을 처리한다.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/rabbitmq" target="_blank" rel="noreferrer"&gt;오픈소스&lt;/a&gt;이며 MPL2.0 라이센스를 따른다.&lt;/p&gt;

&lt;h2 class="relative group"&gt;설치
 &lt;div id="설치" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%a4%ec%b9%98" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;다음 &lt;code&gt;docker-compose.yml&lt;/code&gt; 파일로 연습용 RabbitMQ 서버를 간단히 띄울 수 있다. &lt;em&gt;클러스터 구성 등의 정보도 구글링하면 쉽게찾을 수 있음!!&lt;/em&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/003-rabbitmq-%EA%B8%B0%EC%B4%88/featured.webp"/></item><item><title>OIDC 구현(GOOGLE)</title><link>https://log.j2234.cc/posts/velog/004-oidc-%EA%B5%AC%ED%98%84google/</link><pubDate>Sat, 19 Apr 2025 00:01:19 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/004-oidc-%EA%B5%AC%ED%98%84google/</guid><description>&lt;p&gt;이 글에 등장하는 전체 코드는 &lt;a href="https://github.com/jiheon2234-s-lab/spring_oidc" target="_blank" rel="noreferrer"&gt;깃허브 저장소&lt;/a&gt;에서 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;OIDC는 OAuth2에 인증 기능을 추가한 확장 프로토콜이므로, 구현 과정은 &lt;a href="https://velog.io/@jiheon2234/OAuth2%EC%99%80-OIDC-%EA%B5%AC%ED%98%84" target="_blank" rel="noreferrer"&gt;이전 글&lt;/a&gt;과 거의 동일하지만&amp;hellip;
제공자가 OIDC를 지원해야만 이 방식으로 구현이 가능하다.&lt;/p&gt;

&lt;h3 class="relative group"&gt;사용자 로그인 진입점
 &lt;div id="사용자-로그인-진입점" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%82%ac%ec%9a%a9%ec%9e%90-%eb%a1%9c%ea%b7%b8%ec%9d%b8-%ec%a7%84%ec%9e%85%ec%a0%90" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;OIDC에서는 로그인 페이지로 진입할 때,&lt;br&gt;
OAuth2에서 전달하는 기본 파라미터(&lt;code&gt;client_id&lt;/code&gt;, &lt;code&gt;response_type&lt;/code&gt;, &lt;code&gt;redirect_uri&lt;/code&gt;)에 &lt;strong&gt;&lt;code&gt;scope&lt;/code&gt;파라미터가 필수로 포함된다.&lt;/strong&gt; 이 &lt;code&gt;scope&lt;/code&gt;에는 반드시 &lt;code&gt;openid&lt;/code&gt;가 포함되어야 하며, 필요한 사용자 정보 항목을 추가로 명시할 수 있다.&lt;/p&gt;</description></item><item><title>OAuth2 구현(naver)</title><link>https://log.j2234.cc/posts/velog/005-oauth2-%EA%B5%AC%ED%98%84naver/</link><pubDate>Fri, 18 Apr 2025 22:01:25 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/005-oauth2-%EA%B5%AC%ED%98%84naver/</guid><description>&lt;p&gt;이 글에 등장하는 전체 코드는 &lt;a href="https://github.com/jiheon2234-s-lab/spring_oidc" target="_blank" rel="noreferrer"&gt;깃허브 저장소&lt;/a&gt;에서 확인할 수 있다.&lt;/p&gt;

&lt;h3 class="relative group"&gt;사용자 로그인 진입점
 &lt;div id="사용자-로그인-진입점" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%82%ac%ec%9a%a9%ec%9e%90-%eb%a1%9c%ea%b7%b8%ec%9d%b8-%ec%a7%84%ec%9e%85%ec%a0%90" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;index.html&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;사용자가 네이버 로그인 버튼을 클릭하면, 다음과 같은 URL로 이동한다:
&lt;code&gt;https://nid.naver.com/oauth2.0/authorize?&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;client_id={내 네이버 클라이언트 ID}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;response_type=code&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redirect_uri={네이버 개발자센터에 등록된 내 서버 URI}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;해당 화면에서 사용자는 네이버 계정으로 인증을 진행하게 된다.&lt;/p&gt;

&lt;h3 class="relative group"&gt;리다이렉트
 &lt;div id="리다이렉트" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a6%ac%eb%8b%a4%ec%9d%b4%eb%a0%89%ed%8a%b8" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;인증이 성공하면, 사용자는 &lt;code&gt;redirect_uri&lt;/code&gt;로 이동한다.&lt;/p&gt;</description></item><item><title>OAuth2와 OIDC</title><link>https://log.j2234.cc/posts/velog/006-oauth2%EC%99%80-oidc/</link><pubDate>Fri, 18 Apr 2025 14:49:50 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/006-oauth2%EC%99%80-oidc/</guid><description>&lt;p&gt;어떤 멘토 분이 이런 말을 하셨다.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;ldquo;요즘은 Spring Security에 OAuth2 라이브러리 하나만 추가해놓고&lt;br&gt;
소셜 로그인 인증을 구현했다고 한다.&lt;br&gt;
과연 이렇게 구현한 사람들이 OAuth2에 대해 안다고 할 수 있을까?&lt;br&gt;
OIDC가 뭔지는 알기나 할까?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;이 말을 듣고 찔려서 공부해보겠다.&lt;/p&gt;

&lt;h2 class="relative group"&gt;OAuth2는 인증 프로토콜이 아니라 &amp;ldquo;인가&amp;rdquo; 프로토콜이다.
 &lt;div id="oauth2는-인증-프로토콜이-아니라-인가-프로토콜이다" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#oauth2%eb%8a%94-%ec%9d%b8%ec%a6%9d-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c%ec%9d%b4-%ec%95%84%eb%8b%88%eb%9d%bc-%ec%9d%b8%ea%b0%80-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c%ec%9d%b4%eb%8b%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;del&gt;Authentication&lt;/del&gt; &lt;strong&gt;Authorization&lt;/strong&gt;
많은 글들이 OAuth2예시를 설명하면서, 이를 구분하지 않는다. 거의 &lt;code&gt;소셜 로그인 == OAuth2 로그인&lt;/code&gt; 정도로 취급되지만, OAuth2의 목적은 인증이 아닌 &lt;strong&gt;인가&lt;/strong&gt;이다.&lt;/p&gt;</description></item><item><title>MongoDB Developer associate 자격증 후기</title><link>https://log.j2234.cc/posts/velog/007-mongodb-developer-associate-%EC%9E%90%EA%B2%A9%EC%A6%9D-%ED%9B%84%EA%B8%B0/</link><pubDate>Sat, 22 Feb 2025 23:42:29 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/007-mongodb-developer-associate-%EC%9E%90%EA%B2%A9%EC%A6%9D-%ED%9B%84%EA%B8%B0/</guid><description>&lt;p&gt;&lt;img src="img/image-02.webp" style="display: block;
margin: 3rem auto;
max-width: 60%;"&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;🌱 계기
 &lt;div id="-계기" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%ea%b3%84%ea%b8%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;Reddit 눈팅중에, &lt;a href="https://www.mongodb.com/students" target="_blank" rel="noreferrer"&gt;mongoDB student program&lt;/a&gt;를 통해 20만원 (150$) 짜리 시험을 무료로 볼 수 있게 해준다는 글을 발견했다.
mongoDB에서 제공하는 자격증 강의를 전부 수강하면 무료 응시권을 받을 수 있었다.
별도로 자료를 찾아 공부할 필요 없이 직접 강의를 제공했기에 바로 시작했다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;Developer 자격증 시험은 프로그래밍 언어를 선택해야 하는데, 제일 간단한 Python을 선택했다.&lt;/em&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/007-mongodb-developer-associate-%EC%9E%90%EA%B2%A9%EC%A6%9D-%ED%9B%84%EA%B8%B0/featured.webp"/></item><item><title>AWS SCS-C02 후기</title><link>https://log.j2234.cc/posts/velog/008-aws-scs-c02-%ED%9B%84%EA%B8%B0/</link><pubDate>Sat, 21 Dec 2024 22:52:18 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/008-aws-scs-c02-%ED%9B%84%EA%B8%B0/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="600"
 height="600"
 src="https://log.j2234.cc/posts/velog/008-aws-scs-c02-%ED%9B%84%EA%B8%B0/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/008-aws-scs-c02-%ED%9B%84%EA%B8%B0/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/008-aws-scs-c02-%ED%9B%84%EA%B8%B0/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/008-aws-scs-c02-%ED%9B%84%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;

&lt;h2 class="relative group"&gt;⛅️어쩌다가 SPECIALTY까지?
 &lt;div id="어쩌다가-specialty까지" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%96%b4%ec%a9%8c%eb%8b%a4%ea%b0%80-specialty%ea%b9%8c%ec%a7%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;생일날 갑자기 삘빧아서 AWS 자격증에 도전 이후 벌써 4번째 자격증을 취득했다.&lt;/p&gt;
&lt;p&gt;원래 AWS는 해킹당한 이후 처다도 안보다가, 개발자로서 &lt;strong&gt;DVA&lt;/strong&gt; 만 따려고 했었는데 &amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;😎 DVA 시험비용이 150$가 넘네? =&amp;gt; AWS Ec2만 만들어봤는데 떨어지면 한달 생활비 &lt;/p&gt;
$$\frac{1}{2}$$&lt;p&gt;?? &lt;del&gt;ㅈ되네?&lt;/del&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;🤔 &lt;a href="https://velog.io/@jiheon2234/%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-AWS-CLF-%ED%9B%84%EA%B8%B0" target="_blank" rel="noreferrer"&gt;CLF&lt;/a&gt;를 따면 다음 시험을 50% 할인해주니깐 3만원 정도밖에 차이가 안나 =&amp;gt; 안전하게 가야지!&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/008-aws-scs-c02-%ED%9B%84%EA%B8%B0/featured.webp"/></item><item><title>Docker 빌드 캐시와 멀티스테이지 빌드</title><link>https://log.j2234.cc/posts/velog/009-docker-%EB%B9%8C%EB%93%9C-%EC%BA%90%EC%8B%9C%EC%99%80-%EB%A9%80%ED%8B%B0%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C/</link><pubDate>Wed, 27 Nov 2024 21:04:33 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/009-docker-%EB%B9%8C%EB%93%9C-%EC%BA%90%EC%8B%9C%EC%99%80-%EB%A9%80%ED%8B%B0%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="349"
 height="203"
 src="https://log.j2234.cc/posts/velog/009-docker-%EB%B9%8C%EB%93%9C-%EC%BA%90%EC%8B%9C%EC%99%80-%EB%A9%80%ED%8B%B0%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/009-docker-%EB%B9%8C%EB%93%9C-%EC%BA%90%EC%8B%9C%EC%99%80-%EB%A9%80%ED%8B%B0%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/009-docker-%EB%B9%8C%EB%93%9C-%EC%BA%90%EC%8B%9C%EC%99%80-%EB%A9%80%ED%8B%B0%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/009-docker-%EB%B9%8C%EB%93%9C-%EC%BA%90%EC%8B%9C%EC%99%80-%EB%A9%80%ED%8B%B0%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://velog.io/@jiheon2234/%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90" target="_blank" rel="noreferrer"&gt;Docker 기본개념&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;멀티스테이지 빌드란?
 &lt;div id="멀티스테이지-빌드란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a9%80%ed%8b%b0%ec%8a%a4%ed%85%8c%ec%9d%b4%ec%a7%80-%eb%b9%8c%eb%93%9c%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;DockerFile 내에서 여러 단계를 정의한 후, 각 단계마다 따로 작업을 수행하고 최종 이미지에 최소한의 파일만 포함시키는 방식&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;예시
 &lt;div id="예시" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%98%88%ec%8b%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;del&gt;실제 썼던 파일&lt;/del&gt;&lt;/p&gt;

&lt;h4 class="relative group"&gt;원래 DockerFile
 &lt;div id="원래-dockerfile" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9b%90%eb%9e%98-dockerfile" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Docker" data-lang="Docker"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;golang:1.23-alpine&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/app&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# go.mod와 go.sum 복사 후 의존성 다운로드&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;COPY&lt;/span&gt; go.mod go.sum ./&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RUN&lt;/span&gt; go mod download&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 소스 코드 전체 복사 및 빌드&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;COPY&lt;/span&gt; . ./&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RUN&lt;/span&gt; go build -o crawler .&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 실행 명령어&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CMD&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./crawler&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;혹시나 golang을 처음 보는 사람을 위해 설명하자면, &lt;code&gt;go.mod&lt;/code&gt; ,&lt;code&gt;go.sum&lt;/code&gt;은 &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;build.gradle&lt;/code&gt; 등과 같이 라이브러리를 관리하는 파일이다.&lt;/em&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/009-docker-%EB%B9%8C%EB%93%9C-%EC%BA%90%EC%8B%9C%EC%99%80-%EB%A9%80%ED%8B%B0%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C/featured.webp"/></item><item><title>레벤슈타인 거리</title><link>https://log.j2234.cc/posts/velog/010-%EB%A0%88%EB%B2%A4%EC%8A%88%ED%83%80%EC%9D%B8-%EA%B1%B0%EB%A6%AC/</link><pubDate>Tue, 05 Nov 2024 11:14:05 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/010-%EB%A0%88%EB%B2%A4%EC%8A%88%ED%83%80%EC%9D%B8-%EA%B1%B0%EB%A6%AC/</guid><description>&lt;h2 class="relative group"&gt;Levenshtein distance?
 &lt;div id="levenshtein-distance" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#levenshtein-distance" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;문자열 비교 알고리즘으로, 문자열 a,b가 있을 때 a를b로 만드는데 드는 비용을 동적 계획법으로 구하는 알고리즘
문자열의 유사성을 판단하는데 쓰인다.&lt;/p&gt;

&lt;h2 class="relative group"&gt;기본 풀이
 &lt;div id="기본-풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b8%b0%eb%b3%b8-%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;dp[i][j] = 문자열 a의 [i]까지 고려했을때, 문자열 b의[j]를 만들 수 있는 최소 변환 수&lt;/p&gt;
&lt;blockquote&gt;&lt;ol&gt;
&lt;li&gt;문자열은 빈 문자열 &lt;code&gt;''&lt;/code&gt;부터 시작한다. 빈 문자열은 다른 문자열의 길이만큼 특정 문자를 추가해야 같아지므로 각각 인덱스값을 가지게 된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="401"
 height="297"
 src="https://log.j2234.cc/posts/velog/010-%EB%A0%88%EB%B2%A4%EC%8A%88%ED%83%80%EC%9D%B8-%EA%B1%B0%EB%A6%AC/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/010-%EB%A0%88%EB%B2%A4%EC%8A%88%ED%83%80%EC%9D%B8-%EA%B1%B0%EB%A6%AC/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/010-%EB%A0%88%EB%B2%A4%EC%8A%88%ED%83%80%EC%9D%B8-%EA%B1%B0%EB%A6%AC/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/010-%EB%A0%88%EB%B2%A4%EC%8A%88%ED%83%80%EC%9D%B8-%EA%B1%B0%EB%A6%AC/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;blockquote&gt;&lt;p&gt;dp[1][1]은 세 가지 중 하나로 만들어지는데&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/010-%EB%A0%88%EB%B2%A4%EC%8A%88%ED%83%80%EC%9D%B8-%EA%B1%B0%EB%A6%AC/featured.webp"/></item><item><title>1371. Find the Longest Substring Containing Vowels in Even Counts</title><link>https://log.j2234.cc/posts/velog/011-1371.-find-the-longest-substring-containing-vowels-in-even-counts/</link><pubDate>Sun, 15 Sep 2024 13:22:56 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/011-1371.-find-the-longest-substring-containing-vowels-in-even-counts/</guid><description>&lt;p&gt;&lt;a href="https://leetcode.com/problems/find-the-longest-substring-containing-vowels-in-even-counts/description/" target="_blank" rel="noreferrer"&gt;문제링크&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;설명
 &lt;div id="설명" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%a4%eb%aa%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;임의의 ASCII 문자열 &lt;code&gt;S&lt;/code&gt;가 주어졌을때, 모음 &lt;code&gt;{'a','e','i','o','u'}&lt;/code&gt; 를 각각 짝수번 포함(0번도 가능) 하고 있는 부분 문자열 중 가장 긴 길이를 구하여라&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&amp;quot;leetcodeisgreat&amp;quot;&lt;/code&gt; =&amp;gt; &lt;code&gt;&amp;quot;leetc&amp;quot;&lt;/code&gt; =&amp;gt; 5&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;hr&gt;

&lt;h2 class="relative group"&gt;💡풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;처음에 투포인터 문제인줄 알아서 많이 헤멨다&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;ol start="0"&gt;
&lt;li&gt;첫 상태를 정의한다 ( 모든 모음이 0번 나타난 상태)&lt;/li&gt;
&lt;li&gt;모음을 2의 제곱 비트로 정의하고, 모음이 나타날때마다 비트마스크를 업데이트한다. 이전에 기록되지 않았다면 map에 넣는다&lt;/li&gt;
&lt;li&gt;비트마스크가 이미 존재한다면, 이전 비트마스크와 현재 비트마스크 사이에는 모든 모음이 짝수번 존재하므로, 최대길이와 비교한다&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;코드
 &lt;div id="코드" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bd%94%eb%93%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;findTheLongestSubstring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;vowels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;e&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;i&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;o&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;u&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# vowels = {&amp;#39;a&amp;#39;:1, &amp;#39;e&amp;#39;: 2, &amp;#39;i&amp;#39;: 3, &amp;#39;o&amp;#39;: 4, &amp;#39;u&amp;#39;: 5} # 왜 안되는지 모르겠다면, 3인 경우를 생각해보자&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;my_map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;vowels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="o"&gt;^=&lt;/span&gt; &lt;span class="n"&gt;vowels&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;my_map&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;my_map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mask&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;my_map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mask&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;😎그다지 어렵진 않지만, 풀이가 재미있는 문제였다.&lt;/p&gt;</description></item><item><title>AWS SAA-CO3 후기</title><link>https://log.j2234.cc/posts/velog/012-aws-saa-co3-%ED%9B%84%EA%B8%B0/</link><pubDate>Sun, 15 Sep 2024 12:54:57 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/012-aws-saa-co3-%ED%9B%84%EA%B8%B0/</guid><description>&lt;h2 class="relative group"&gt;☁️ DVA-C03
 &lt;div id="-dva-c03" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-dva-c03" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="340"
 height="340"
 src="https://log.j2234.cc/posts/velog/012-aws-saa-co3-%ED%9B%84%EA%B8%B0/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/012-aws-saa-co3-%ED%9B%84%EA%B8%B0/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/012-aws-saa-co3-%ED%9B%84%EA%B8%B0/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/012-aws-saa-co3-%ED%9B%84%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;

&lt;h2 class="relative group"&gt;🌤️준비
 &lt;div id="준비" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a4%80%eb%b9%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;8/15 ~ 9/14 약 한달정도 공부&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://velog.io/@jiheon2234/AWS-DVA-C02-%ED%9B%84%EA%B8%B0" target="_blank" rel="noreferrer"&gt;이전시험&lt;/a&gt; 합격 후 9/14일에 시험&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/" target="_blank" rel="noreferrer"&gt;유데미 스테판강의&lt;/a&gt;, exampleTopics 덤프로 공부&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;후기
 &lt;div id="후기" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%9b%84%ea%b8%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;이전시험 (DVA) 은 &lt;em&gt;lambda, SQS, CI/CD&lt;/em&gt; 등 개발자에 초점이 맞춰져 있다면, 이번 시험은 말그대로 전체적인 클라우드 설계에 대해 다룸.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/012-aws-saa-co3-%ED%9B%84%EA%B8%B0/featured.webp"/></item><item><title>AWS DVA-C02 후기</title><link>https://log.j2234.cc/posts/velog/013-aws-dva-c02-%ED%9B%84%EA%B8%B0/</link><pubDate>Thu, 15 Aug 2024 20:09:09 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/013-aws-dva-c02-%ED%9B%84%EA%B8%B0/</guid><description>&lt;h2 class="relative group"&gt;☁️ DVA-C02
 &lt;div id="-dva-c02" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-dva-c02" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="300"
 height="300"
 src="https://log.j2234.cc/posts/velog/013-aws-dva-c02-%ED%9B%84%EA%B8%B0/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/013-aws-dva-c02-%ED%9B%84%EA%B8%B0/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/013-aws-dva-c02-%ED%9B%84%EA%B8%B0/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/013-aws-dva-c02-%ED%9B%84%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;**8/15 합격! **&lt;/p&gt;

&lt;h2 class="relative group"&gt;🌤️준비기간
 &lt;div id="준비기간" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a4%80%eb%b9%84%ea%b8%b0%ea%b0%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;대략 한달정도 준비&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;❗️7월 1일(&lt;a href="https://velog.io/@jiheon2234/%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-AWS-CLF-%ED%9B%84%EA%B8%B0" target="_blank" rel="noreferrer"&gt;cloud Practitioner&lt;/a&gt;)시험을 통과한 후 광복절에 시험을 쳤다
중간에 공부못한 기간 포함하면 약 한달정도 퇴근후 집에서 공부&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;🌤️ 준비방법
 &lt;div id="-준비방법" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%ec%a4%80%eb%b9%84%eb%b0%a9%eb%b2%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.udemy.com/course/aws-certified-developer-associate-dva-c01/" target="_blank" rel="noreferrer"&gt;유데미스테판강의&lt;/a&gt; (진짜 얻는게 많음)&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/013-aws-dva-c02-%ED%9B%84%EA%B8%B0/featured.webp"/></item><item><title>노베이스 AWS CLF 후기</title><link>https://log.j2234.cc/posts/velog/014-%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-aws-clf-%ED%9B%84%EA%B8%B0/</link><pubDate>Mon, 01 Jul 2024 22:54:59 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/014-%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-aws-clf-%ED%9B%84%EA%B8%B0/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="150"
 height="150"
 src="https://log.j2234.cc/posts/velog/014-%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-aws-clf-%ED%9B%84%EA%B8%B0/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/014-%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-aws-clf-%ED%9B%84%EA%B8%B0/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/014-%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-aws-clf-%ED%9B%84%EA%B8%B0/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/014-%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-aws-clf-%ED%9B%84%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;

&lt;h2 class="relative group"&gt;😎노베이스
 &lt;div id="노베이스" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%85%b8%eb%b2%a0%ec%9d%b4%ec%8a%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;다른 후기들을 찾아보면, 전부다 노베이스라고 해놓고 어느정도 지식이 있는 상태에서 봤다는 말을 하고 있다.
나는 1년쯤 전에 aws계정을 만들고 얼마안되 해킹당해서 900$를 뜯기고*(물론 온몸비틀어서 받음)* 그 이후에 처다보지도 않았다.&lt;/p&gt;
&lt;p&gt;다른 노베이스 상태의 독자에게 도움이 되었으면 한다&lt;/p&gt;

&lt;h2 class="relative group"&gt;☁️결심
 &lt;div id="결심" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%b0%ec%8b%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;마지막으로 자격증을 딴지 너무 오래되어서, 뭐라도 자격증을 취득하려고 알아보던중, 갑자기 AWS자격증이 끌렸다.
원래 한단계 위인 &lt;a href="https://aws.amazon.com/ko/certification/certified-developer-associate/" target="_blank" rel="noreferrer"&gt;DVA&lt;/a&gt; 자격증부터 취득하려고 했는데
내가 지금까지 봤던 모든 시험 중 가장 비싼 시험료😱(&lt;em&gt;CLF:100$ , DVA:150$&lt;/em&gt;)에 놀라, 기초인 &lt;a href="https://aws.amazon.com/ko/certification/certified-cloud-practitioner/" target="_blank" rel="noreferrer"&gt;CLF&lt;/a&gt;부터 따기로 마음먹었다.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/014-%EB%85%B8%EB%B2%A0%EC%9D%B4%EC%8A%A4-aws-clf-%ED%9B%84%EA%B8%B0/featured.webp"/></item><item><title>857. Minimum Cost to Hire K Workers</title><link>https://log.j2234.cc/posts/velog/015-857.-minimum-cost-to-hire-k-workers/</link><pubDate>Sat, 11 May 2024 15:25:06 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/015-857.-minimum-cost-to-hire-k-workers/</guid><description>&lt;p&gt;&lt;a href="https://leetcode.com/problems/minimum-cost-to-hire-k-workers/description/" target="_blank" rel="noreferrer"&gt;문제링크&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;설명
 &lt;div id="설명" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%a4%eb%aa%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;arr[i] 는 각각 i번째 노동자의 &lt;code&gt;품질&lt;/code&gt;,&lt;code&gt;월급&lt;/code&gt;을 나타내는 &lt;code&gt;quality&lt;/code&gt;, &lt;code&gt;wage&lt;/code&gt; 배열이 주어진다
가장 최소한의 비용으로 &lt;code&gt;k&lt;/code&gt; 명을 고용할때 드는 비용을 구하여라&lt;/p&gt;
&lt;p&gt;조건&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;i번째 노동자를 고용하려면, &lt;code&gt;최소 wage[i] 보다 돈을 많이줘야됨&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;각 작업자의 월급은, quality에 정비례해야 함&lt;/li&gt;
&lt;li&gt;&lt;del&gt;quality가 얼마던 간에 최소한의 비용이면 상관없음ㅋㅋ&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;hr&gt;

&lt;h2 class="relative group"&gt;💡풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;가장 중요한건, 기준으로 삼을 작업자를 정하는 것이다&lt;/em&gt;&lt;/p&gt;</description></item><item><title>1915. Number of Wonderful Substrings</title><link>https://log.j2234.cc/posts/velog/016-1915.-number-of-wonderful-substrings/</link><pubDate>Tue, 30 Apr 2024 21:40:10 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/016-1915.-number-of-wonderful-substrings/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="165"
 height="172"
 src="https://log.j2234.cc/posts/velog/016-1915.-number-of-wonderful-substrings/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/016-1915.-number-of-wonderful-substrings/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/016-1915.-number-of-wonderful-substrings/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/016-1915.-number-of-wonderful-substrings/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://leetcode.com/problems/number-of-wonderful-substrings/description/" target="_blank" rel="noreferrer"&gt;문제링크&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;설명
 &lt;div id="설명" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%a4%eb%aa%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;문자열 중에 최대 한 글자만 홀수 번 나타나면 &lt;code&gt;완벽한 문자열&lt;/code&gt;임
단어 &lt;code&gt;word&lt;/code&gt;가 주어졌을때, 여기에서 나타날 수 있는 모든 완벽한 문자열의 수를 구하셈 (world는 a~j만으로 구성)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;단어를 순회하면서, 해당 단어를 비트로 바꿔 bitmask 집합에 넣는다.
이 비트마스를 key로 하는 dict에서, dict[key] 가 존재한다면, 그만큼 더한다
dict[key]를 1증가시킨다&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;&lt;p&gt;왜?
&lt;code&gt;XOR&lt;/code&gt;연산은, 같은 숫자가 짝수번 연산되면 모두 상쇄되어 사라진다.
비트마스크는 &lt;strong&gt;현재의 상태&lt;/strong&gt; 를 의미하는데, 이전에 똑같은 마스크가 존재했다는 뜻은, 그 사이에 있는 모든 단어들은 짝수번 등장한다는 뜻이다 &lt;em&gt;근데 왜 dict[key]만큼 더함??&lt;/em&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/016-1915.-number-of-wonderful-substrings/featured.webp"/></item><item><title>834. Sum of Distances in Tree</title><link>https://log.j2234.cc/posts/velog/017-834.-sum-of-distances-in-tree/</link><pubDate>Sun, 28 Apr 2024 15:34:28 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/017-834.-sum-of-distances-in-tree/</guid><description>&lt;p&gt;&lt;a href="https://leetcode.com/problems/sum-of-distances-in-tree/description/" target="_blank" rel="noreferrer"&gt;문제링크&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;설명
 &lt;div id="설명" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%a4%eb%aa%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="304"
 height="224"
 src="https://log.j2234.cc/posts/velog/017-834.-sum-of-distances-in-tree/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/017-834.-sum-of-distances-in-tree/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/017-834.-sum-of-distances-in-tree/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/017-834.-sum-of-distances-in-tree/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;blockquote&gt;&lt;p&gt;💀 0~n-1까지 방향이 없는 트리와, 연결고리&lt;code&gt;edges&lt;/code&gt;가 주어졌을때,&lt;br&gt;
&lt;code&gt;answer[i] = i번째 노드와 다른 모든 노드들과 거리의 합&lt;/code&gt; 를 만족하는 answer을 리턴하기&lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sumOfDistancesInTree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# n = 6, edges = [[0,1],[0,2],[2,3],[2,4],[2,5]]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;풀이과정
 &lt;div id="풀이과정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4%ea%b3%bc%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;1. 배열 2개 &lt;code&gt;answer&lt;/code&gt;,&lt;code&gt;node_cnt&lt;/code&gt; 생성
 &lt;div id="1-배열-2개-answernode_cnt-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-%eb%b0%b0%ec%97%b4-2%ea%b0%9c-answernode_cnt-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;answer&lt;/code&gt; : 정답용 &lt;em&gt;answer[i] = 다른 모든 노드들과의 거리 합&lt;/em&gt;
&lt;code&gt;node_cnt&lt;/code&gt; : 현재 정점의 누적 노드 개수&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/017-834.-sum-of-distances-in-tree/featured.webp"/></item><item><title>도커 이미지,컨테이너 기본개념</title><link>https://log.j2234.cc/posts/velog/018-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90/</link><pubDate>Mon, 25 Mar 2024 19:59:36 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/018-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="349"
 height="203"
 src="https://log.j2234.cc/posts/velog/018-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/018-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/018-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/018-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90/img/image-01.webp"&gt;&lt;/figure&gt;

&lt;h2 class="relative group"&gt;✅프로그램과 프로세스
 &lt;div id="프로그램과-프로세스" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8%ea%b3%bc-%ed%94%84%eb%a1%9c%ec%84%b8%ec%8a%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;프로그램은 정적인 파일(코드,데이터) 의 집합이며, 시스템의 디스크에만 공간을 차지함 &lt;em&gt;template&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;이를 실행하면 프로세스가 되는데, 프로그램의 코드와 데이터가 메모리에 로드되고, CPU,RAM 등의 시스템 리소스를 사용하는 동적인 상태가 됨&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;이미지 💿
 &lt;div id="이미지-" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%eb%af%b8%ec%a7%80-" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;프로그램과 대응&lt;/li&gt;
&lt;li&gt;프로그램(들)과, 이를 실행시킬 수 있는 환경이 디스크 공간을 차지하는 상태&lt;/li&gt;
&lt;li&gt;불변이며, 따로 자원을 소모하지 않는 상태&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;컨테이너🐋
 &lt;div id="컨테이너" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bb%a8%ed%85%8c%ec%9d%b4%eb%84%88" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;프로세스와 대응&lt;/li&gt;
&lt;li&gt;&lt;em&gt;실행&lt;/em&gt; 상태의 이미지로, 이미지를 복사해 격리된 공간을 생성하고 시스템 리소스를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;이미지의 구성
 &lt;div id="이미지의-구성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%eb%af%b8%ec%a7%80%ec%9d%98-%ea%b5%ac%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;이미지는 &lt;code&gt;base image&lt;/code&gt;부터 레이어들을 쌓아올려서 생성됨
이때 이 레이어들은 &lt;strong&gt;불변&lt;/strong&gt; 이며, 이전 레이어에서 변경된 사항임 (환경변수 등)&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/018-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90/featured.webp"/></item><item><title>JPQL-중급</title><link>https://log.j2234.cc/posts/velog/019-jpql-%EC%A4%91%EA%B8%89/</link><pubDate>Sun, 08 Oct 2023 17:11:21 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/019-jpql-%EC%A4%91%EA%B8%89/</guid><description>&lt;h2 class="relative group"&gt;경로 표현식
 &lt;div id="경로-표현식" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%bd%eb%a1%9c-%ed%91%9c%ed%98%84%ec%8b%9d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;.&lt;/code&gt;으로 객체 그래프를 탐색&lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt;	 &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;상태필드&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 	&lt;/span&gt;&lt;span class="k"&gt;join&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;team&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;단일&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;값&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;연관&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;필드&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;join&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;컬렉션&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;값&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;연관&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;필드&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;TEAM_A&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;상태 필드 : 단순히 값을 저장하기 위한 필드 -&amp;gt; 경로 탐색의 끝이므로 탐색 ❌&lt;/li&gt;
&lt;li&gt;연관 필드 : 연관관계를 위한 필드 -&amp;gt; 묵시적 내부 조인 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;단일값 : &lt;code&gt;@ManyToOne&lt;/code&gt;, &lt;code&gt;@OneToOne&lt;/code&gt;, 엔티티(&lt;code&gt;m.team&lt;/code&gt;) -&amp;gt; 탐색 ⭕️&lt;/li&gt;
&lt;li&gt;컬렉션 : &lt;code&gt;@OneToMany&lt;/code&gt;, 대상이 컬렉션 (m.orders) -&amp;gt; 탐색 ❌&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;실무에선 묵시적 내부조인이 최대한 발생하지 않는 쪽으로 하자&lt;/em&gt; =&amp;gt; 무조건 명시적 조인 사용&lt;/p&gt;</description></item><item><title>JPQL-기본2</title><link>https://log.j2234.cc/posts/velog/020-jpql-%EA%B8%B0%EB%B3%B82/</link><pubDate>Sun, 08 Oct 2023 00:37:02 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/020-jpql-%EA%B8%B0%EB%B3%B82/</guid><description>&lt;h2 class="relative group"&gt;조인
 &lt;div id="조인" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a1%b0%ec%9d%b8" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;내부(inner) 조인
&lt;code&gt;SELECT m FROM Member m [INNER] JOIN m.team t&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;외부(left) 조인
&lt;code&gt;SELECT m FROM Member m LEFT [OUTER] JOIN m.team t&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;세타? (연관관계 없는거) 조인
&lt;code&gt;SELECT count(m) from Member m, Team t where m.username = t.name&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;ON절
 &lt;div id="on절" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#on%ec%a0%88" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;조인 대상 필터링&lt;/p&gt;</description></item><item><title>JPQL-기본1</title><link>https://log.j2234.cc/posts/velog/021-jpql-%EA%B8%B0%EB%B3%B81/</link><pubDate>Sat, 07 Oct 2023 22:59:00 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/021-jpql-%EA%B8%B0%EB%B3%B81/</guid><description>&lt;h2 class="relative group"&gt;JPQL이란?
 &lt;div id="jpql이란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#jpql%ec%9d%b4%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;SQL을 추상화한 객체 지향 쿼리 언어&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JPQL은 엔티티 객체를 대상으로 쿼리&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;SQL은 DB 테이블 대상으로 쿼리&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;네이티브 SQL
 &lt;div id="네이티브-sql" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%84%a4%ec%9d%b4%ed%8b%b0%eb%b8%8c-sql" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;em.createNativeQuery&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;JPA가 제공하는 SQL을 직접 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;특정 DB에 의존적인 기능을 사용할때 (오라클 CONNECT BY 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;기본문법
 &lt;div id="기본문법" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b8%b0%eb%b3%b8%eb%ac%b8%eb%b2%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;엔티티와 속성은 대소문자 구분함 (키워드는 구분안함)&lt;/li&gt;
&lt;li&gt;엔티티 이름 사용, 별칭(m)은 필수 as는 생략가능&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;Select_문 :: =&lt;/p&gt;</description></item><item><title>값 타입</title><link>https://log.j2234.cc/posts/velog/022-%EA%B0%92-%ED%83%80%EC%9E%85/</link><pubDate>Sat, 07 Oct 2023 13:29:53 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/022-%EA%B0%92-%ED%83%80%EC%9E%85/</guid><description>&lt;blockquote&gt;&lt;p&gt;JPA의 값 타입은 Entity와 값 타입이 있다.&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;Entity : &lt;code&gt;@Entity&lt;/code&gt;로 정의하며, 식별자로 추적 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;값 타입 : &lt;code&gt;String&lt;/code&gt;처럼 단순히 값으로 사용 =&amp;gt; 변경시 완전히 다른 값으로 대체됨(추적불가)
&lt;code&gt;equals()&lt;/code&gt;사용 (&lt;code&gt;equals()&lt;/code&gt;,&lt;code&gt;hashcode()&lt;/code&gt; 필요할수도)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;임베디드 타입
 &lt;div id="임베디드-타입" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9e%84%eb%b2%a0%eb%94%94%eb%93%9c-%ed%83%80%ec%9e%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;@Embeddable&lt;/code&gt;,&lt;code&gt;@Embedded&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;기본 값 타입입을 모아 만든 복합 값 타입&lt;/li&gt;
&lt;li&gt;엔티티가 아닌 그냥 값임 =&amp;gt; 엔티티에 생명주기를 의존 =&amp;gt; 테이블은 변화없음&lt;/li&gt;
&lt;li&gt;또다른 임베디드타입이나 Entity를 내부에 가질 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;재사용이 가능하고, 응집도가 높아짐&lt;/li&gt;
&lt;li&gt;객체와 테이블을 세밀하게 매핑 가능&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Embedded&lt;/code&gt; 는 필요없지만 쓰는걸 권장&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;한 엔티티에서 같은 타입을 사용한다면, &lt;code&gt;@AttributeOverride()&lt;/code&gt;사용 가능&lt;/em&gt;&lt;/p&gt;</description></item><item><title>CASCADE, 고아</title><link>https://log.j2234.cc/posts/velog/023-cascade-%EA%B3%A0%EC%95%84/</link><pubDate>Sat, 07 Oct 2023 00:23:05 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/023-cascade-%EA%B3%A0%EC%95%84/</guid><description>&lt;h2 class="relative group"&gt;CASCADE란?
 &lt;div id="cascade란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cascade%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;연관관계, 지연로딩 등과 아무 관계 ❌
A를 영속 상태로 만들 때, 편리하게 연관된 B도 같이 영속 상태로 만들고 싶을 때&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;CascadeType&lt;/code&gt; 종류&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;ALL : 모두&lt;/li&gt;
&lt;li&gt;PERSIST : 영속&lt;/li&gt;
&lt;li&gt;
&lt;details&gt;&lt;summary&gt;이외&lt;/summary&gt;REMOVE &lt;br&gt; MERGE &lt;br&gt; DETACH &lt;/details&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;A와 B의라이프사이클이 같거나, A만 B를 관리할때만 사용&lt;/p&gt;

&lt;h2 class="relative group"&gt;고아 ?
 &lt;div id="고아-" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b3%a0%ec%95%84-" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;del&gt;부모가 버린 자식 죽이기?&lt;/del&gt; 부모 엔티티와 연관관계가 끊어진 자식 엔티티 삭제하기&lt;/p&gt;</description></item><item><title>프록시, 지연로딩</title><link>https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/</link><pubDate>Fri, 06 Oct 2023 23:50:14 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/</guid><description>&lt;h2 class="relative group"&gt;프록시
 &lt;div id="프록시" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9d%ec%8b%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;em.find &lt;span style="color:red"&gt;VS&lt;/span&gt; em.getRefrence
 &lt;div id="emfind-vs-emgetrefrence" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#emfind-vs-emgetrefrence" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;em.find() : 실제 DB에서 가져옴&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;em.getReference() : DB 조회를 미루는 가짜(프록시 extends 실제) 를 가져옴&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;프록시 객체를 호출하면, 실제 객체의 메소드 호출
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1034"
 height="580"
 src="https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/img/image-01_hu_bb58604c6a805af0.webp"
 srcset="https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/img/image-01_hu_bb58604c6a805af0.webp 800w, https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;프록시의 특징
 &lt;div id="프록시의-특징" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9d%ec%8b%9c%ec%9d%98-%ed%8a%b9%ec%a7%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;처음 한번만 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;초기화할때, 실제 Entity로 바뀌지 않음 =&amp;gt; 프록시를 통해 실제에 접근하는것&lt;/li&gt;
&lt;li&gt;원본 엔티티를 상속받음 (비교시 &lt;code&gt;instance of&lt;/code&gt; )&lt;/li&gt;
&lt;li&gt;영속성 컨텍스트에 찾는 엔티티가 있으면, &lt;code&gt;em.getReference()&lt;/code&gt;는 실제 엔티티 반환&lt;/li&gt;
&lt;li&gt;준영속 상태일때, 초기화시 문제 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;지연로딩
 &lt;div id="지연로딩" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a7%80%ec%97%b0%eb%a1%9c%eb%94%a9" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;지연로딩&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/featured.webp"/></item><item><title>상속관계 매핑</title><link>https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/</link><pubDate>Fri, 06 Oct 2023 22:00:53 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/</guid><description>&lt;h2 class="relative group"&gt;상속관계 매핑이란?
 &lt;div id="상속관계-매핑이란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%83%81%ec%86%8d%ea%b4%80%ea%b3%84-%eb%a7%a4%ed%95%91%ec%9d%b4%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;객체 지향 프로그래밍에서의 상속 개념을 데이터베이스 스키마에 매핑
(객체) 상속구조 &amp;lt;=&amp;gt; (DB)슈퍼-서브타입&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;구현방법&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;각각 테이블로 (조인)&lt;/li&gt;
&lt;li&gt;통합 테이블로 (단일 테이블)&lt;/li&gt;
&lt;li&gt;&lt;del&gt;서브타입 테이블로 (구현 클래스마다 테이블로)&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Inheritance(strategy = ? )&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h3 class="relative group"&gt;조인 전략
 &lt;div id="조인-전략" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a1%b0%ec%9d%b8-%ec%a0%84%eb%9e%b5" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;InheritanceType.JOINED&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;정석적인 방법
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1060"
 height="354"
 src="https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01_hu_d5b59a25132ec618.webp"
 srcset="https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01_hu_d5b59a25132ec618.webp 800w, https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/featured.webp"/></item><item><title>연관관계 매핑</title><link>https://log.j2234.cc/posts/velog/026-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/</link><pubDate>Wed, 04 Oct 2023 15:15:26 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/026-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/</guid><description>&lt;h2 class="relative group"&gt;연관관계 매핑이 필요한 이유
 &lt;div id="연관관계-매핑이-필요한-이유" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%97%b0%ea%b4%80%ea%b4%80%ea%b3%84-%eb%a7%a4%ed%95%91%ec%9d%b4-%ed%95%84%ec%9a%94%ed%95%9c-%ec%9d%b4%ec%9c%a0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;DB는 기본적으로, 연관관계의 방향이 없다. (FK로 join걸면 다 해결됨)
하지만 객체는 참조를 사용해서 관계를 맺는다.
따라서, 객체지향적인 방법으로 데이터를 조작하려면 연관관계 매핑이 필수적이다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr&gt;

&lt;h2 class="relative group"&gt;단방향 연관관계
 &lt;div id="단방향-연관관계" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8b%a8%eb%b0%a9%ed%96%a5-%ec%97%b0%ea%b4%80%ea%b4%80%ea%b3%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;객체의 &lt;strong&gt;참조&lt;/strong&gt; 와 &lt;strong&gt;FK&lt;/strong&gt;를 매칭
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="956"
 height="468"
 src="https://log.j2234.cc/posts/velog/026-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01_hu_c485a3d463121f41.webp"
 srcset="https://log.j2234.cc/posts/velog/026-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01_hu_c485a3d463121f41.webp 800w, https://log.j2234.cc/posts/velog/026-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/026-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/026-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/featured.webp"/></item><item><title>엔티티 매핑-기본키</title><link>https://log.j2234.cc/posts/velog/027-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91-%EA%B8%B0%EB%B3%B8%ED%82%A4/</link><pubDate>Tue, 03 Oct 2023 23:23:52 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/027-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91-%EA%B8%B0%EB%B3%B8%ED%82%A4/</guid><description>&lt;p&gt;직접할당 :&lt;code&gt;@Id&lt;/code&gt;만 사용
자동생성 : &lt;code&gt;@GeneratedValue&lt;/code&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;@GeneratedValue(strategy= ? )
 &lt;div id="generatedvaluestrategy--" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generatedvaluestrategy--" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;&lt;code&gt;GenerationTpye.Identity&lt;/code&gt;: 전략을 DB에 위임
 &lt;div id="generationtpyeidentity--전략을-db에-위임" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generationtpyeidentity--%ec%a0%84%eb%9e%b5%ec%9d%84-db%ec%97%90-%ec%9c%84%ec%9e%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;DB에 들어간 후에, ID값을 알 수 있음 =&amp;gt; &lt;code&gt;persist()&lt;/code&gt; 후 바로 쿼리 날라감&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;AUTO_INCREMENT 생각&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;GenerationTpye.Sequence
 &lt;div id="generationtpyesequence" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generationtpyesequence" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;DB의 Sequence 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;persist()&lt;/code&gt; 후 Sequence값만 가져왔다가, 끝날때 날림&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allocationSize&lt;/code&gt; 등을 통해 성능향상 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Entity&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SequenceGenerator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;MEMBER_SEQ_GENERATOR&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;sequenceName=“MEMBER_SEQ&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;//시퀀스이름&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;initialValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocationSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//한번에 50개 가져오고,그동안은 메모리에서 가져옴&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Id&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@GeneratedValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strategy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GenerationType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SEQUENCE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;MEMBER_SEQ_GENERATOR&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;GenerationType.TABLE
 &lt;div id="generationtypetable" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generationtypetable" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;Sequence 역활을 하는 테이블 사용 정략&lt;/li&gt;
&lt;li&gt;Sequence 없는 DB도 가능하지만, 성능 이슈&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;GenerationType.UUID
 &lt;div id="generationtypeuuid" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generationtypeuuid" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;강의에는 없는데 추가된거같음&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;말그대로 UUID 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;권장 식별자 전략
 &lt;div id="권장-식별자-전략" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b6%8c%ec%9e%a5-%ec%8b%9d%eb%b3%84%ec%9e%90-%ec%a0%84%eb%9e%b5" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Long + 대체키 + 생성전략&lt;/p&gt;</description></item><item><title>엔티티 매핑</title><link>https://log.j2234.cc/posts/velog/028-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91/</link><pubDate>Tue, 03 Oct 2023 20:42:44 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/028-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91/</guid><description>&lt;h2 class="relative group"&gt;객체와 테이블 매핑
 &lt;div id="객체와-테이블-매핑" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b0%9d%ec%b2%b4%ec%99%80-%ed%85%8c%ec%9d%b4%eb%b8%94-%eb%a7%a4%ed%95%91" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;@Entity
 &lt;div id="entity" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#entity" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;@Entity&lt;/code&gt;가 붙은 클래스는 JPA가 관리&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;주의 : 기본생성자(public | protected) 필요&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;@Table
 &lt;div id="table" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#table" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;엔티티와 매핑할 테이블 지정&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;속성&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt; : 테이블명&lt;/li&gt;
&lt;li&gt;&lt;code&gt;catalog&lt;/code&gt; : DB 카탈로그&lt;/li&gt;
&lt;li&gt;&lt;code&gt;schema&lt;/code&gt; : 스키마&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unique&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;스키마 자동 생성
 &lt;div id="스키마-자동-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8a%a4%ed%82%a4%eb%a7%88-%ec%9e%90%eb%8f%99-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;JPA에서는, 로딩 시점에 DDL 자동 생성 지원 &lt;del&gt;&lt;span style="color:red"&gt; 운영에서 쓸때 조심 &lt;/span&gt;&lt;/del&gt;&lt;/p&gt;</description></item><item><title>영속성 컨텍스트</title><link>https://log.j2234.cc/posts/velog/029-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8/</link><pubDate>Tue, 03 Oct 2023 18:49:53 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/029-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8/</guid><description>&lt;h2 class="relative group"&gt;JPA에서 가장 중요한 2가지
 &lt;div id="jpa에서-가장-중요한-2가지" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#jpa%ec%97%90%ec%84%9c-%ea%b0%80%ec%9e%a5-%ec%a4%91%ec%9a%94%ed%95%9c-2%ea%b0%80%ec%a7%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ORM, 영속성 컨텍스트&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;영속성 컨텍스트란?
 &lt;div id="영속성-컨텍스트란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%98%81%ec%86%8d%ec%84%b1-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;Entity를 영구 저장하는 환경&lt;/code&gt;
엔티티 객체의 생명주기 관리, 캐싱, 트랜잭션 처리 등을 담당하는 핵심 컴포넌트&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;이점
 &lt;div id="이점" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%ec%a0%90" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;1차캐시, 동일성보장, 변경 감지(dirty checking), 지연 로딩(lazy loading) 등&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;엔티티의 생명주기
 &lt;div id="엔티티의-생명주기" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%97%94%ed%8b%b0%ed%8b%b0%ec%9d%98-%ec%83%9d%eb%aa%85%ec%a3%bc%ea%b8%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;비영속&lt;code&gt;new&lt;/code&gt; (전혀 관계가 없음)&lt;/li&gt;
&lt;li&gt;영속&lt;code&gt;managed&lt;/code&gt; (관리되는 상태)&lt;/li&gt;
&lt;li&gt;준영속&lt;code&gt;detached&lt;/code&gt; (저장되었다가 분리된 상태 )&lt;/li&gt;
&lt;li&gt;삭제&lt;code&gt;removed&lt;/code&gt; (삭제된 상태)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;flush
 &lt;div id="flush" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#flush" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;저장&lt;/strong&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/029-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8/featured.webp"/></item><item><title>JPA 강의 시작</title><link>https://log.j2234.cc/posts/velog/030-jpa-%EA%B0%95%EC%9D%98-%EC%8B%9C%EC%9E%91/</link><pubDate>Mon, 02 Oct 2023 21:10:02 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/030-jpa-%EA%B0%95%EC%9D%98-%EC%8B%9C%EC%9E%91/</guid><description>&lt;h2 class="relative group"&gt;INIT
 &lt;div id="init" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#init" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;추석할인으로 &lt;a href="https://www.inflearn.com/course/ORM-JPA-Basic" target="_blank" rel="noreferrer"&gt;김영한님 JPA 강의&lt;/a&gt; 득템!!&lt;/p&gt;
&lt;p&gt;최소한 하루에 한 챕터씩은 공부할 예정이다.&lt;/p&gt;</description></item><item><title>4. 변경 감지와 병합</title><link>https://log.j2234.cc/posts/velog/031-4.-%EB%B3%80%EA%B2%BD-%EA%B0%90%EC%A7%80%EC%99%80-%EB%B3%91%ED%95%A9/</link><pubDate>Sat, 30 Sep 2023 21:43:36 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/031-4.-%EB%B3%80%EA%B2%BD-%EA%B0%90%EC%A7%80%EC%99%80-%EB%B3%91%ED%95%A9/</guid><description>&lt;p&gt;&lt;em&gt;원래 웹 계층 개발이지만, 딱히 쓸 게 없다&lt;/em&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;준영속 엔티티 수정
 &lt;div id="준영속-엔티티-수정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a4%80%ec%98%81%ec%86%8d-%ec%97%94%ed%8b%b0%ed%8b%b0-%ec%88%98%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;준영속 엔티티란&lt;/strong&gt; &amp;lt;- 영속성 컨텍스트가 더이상 관리하지 않는 엔티티&lt;/p&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;JPA 엔티티는 변경을 자동으로 감지해서 UPDATE를 날라지만, &lt;br&gt; 준영속 엔티티는 (예: DB에서 꺼내지 않고, 임의로 만듬)UPDATE를 날리지 않음&lt;/li&gt;
&lt;li&gt;따라서, 업데이트를 하려면 아래의 두가지 방법을 쓸 수 있다. &lt;strong&gt;근데 무조건 첫번째를 쓰자&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h4 class="relative group"&gt;변경감지 기능 (무조건 이거씀)
 &lt;div id="변경감지-기능-무조건-이거씀" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b3%80%ea%b2%bd%ea%b0%90%ec%a7%80-%ea%b8%b0%eb%8a%a5-%eb%ac%b4%ec%a1%b0%ea%b1%b4-%ec%9d%b4%ea%b1%b0%ec%94%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;blockquote&gt;&lt;p&gt;DB에서 다시 엔티티를 조회하고, 그 엔티티를 수정하는 방법&lt;/p&gt;</description></item><item><title>3. 도메인 개발</title><link>https://log.j2234.cc/posts/velog/032-3.-%EB%8F%84%EB%A9%94%EC%9D%B8-%EA%B0%9C%EB%B0%9C/</link><pubDate>Fri, 29 Sep 2023 22:26:02 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/032-3.-%EB%8F%84%EB%A9%94%EC%9D%B8-%EA%B0%9C%EB%B0%9C/</guid><description>&lt;p&gt;이 강의에서는 따로 적을게 별로없다. &lt;del&gt;그냥 개발하는 내용이 다임&lt;/del&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;테스트 환경설정
 &lt;div id="테스트-환경설정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%85%8c%ec%8a%a4%ed%8a%b8-%ed%99%98%ea%b2%bd%ec%84%a4%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;테스트를 할때, 기본적으로 &lt;code&gt;/test/resources/application.yml&lt;/code&gt;에 있는 설정 파일을 먼져 읽는다. (없으면 기본 파일읽음)
따라서, 이곳에 테스트에서의 설정을 생성할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;또한, 스프링부트는 아무 설정이 안되어있는 경우, 기본적으로 메모리DB(H2)로 설정을 한다.
따라서, 빈 application.yml을 만들기만 하면, 기본적으로 메모리DB가 설정된다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;동적쿼리
 &lt;div id="동적쿼리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8f%99%ec%a0%81%ec%bf%bc%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;JPA에서 기본적인 동적쿼리는 지원하지만, 코드가 진짜 끔찍해진다.
따라서 QueryDsl과의 동작이 잘 어울린다.&lt;/p&gt;</description></item><item><title>docker attach, exec</title><link>https://log.j2234.cc/posts/velog/033-docker-attach-exec/</link><pubDate>Sun, 17 Sep 2023 19:34:51 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/033-docker-attach-exec/</guid><description>&lt;p&gt;두 명령어의 차이점을 모른 채 &lt;code&gt;exec -it&lt;/code&gt; 만 쓰고 있었는데, 차이점을 알게 됨&lt;/p&gt;

&lt;h2 class="relative group"&gt;exec
 &lt;div id="exec" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#exec" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;추가 명령을 실행!&lt;/li&gt;
&lt;li&gt;즉, 실행중인건 건드리지 않고, 새로운 프로세스를 실행 (대부분 쉘)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-it&lt;/code&gt;는 &lt;code&gt;interactive mode&lt;/code&gt;, &lt;code&gt;terminal&lt;/code&gt; 의 약자&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;attach
 &lt;div id="attach" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#attach" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;실행중인 컨테이너의 &lt;code&gt;stdio&lt;/code&gt; 에 연걸&lt;/li&gt;
&lt;li&gt;새로운 프로세스를 실행 ❌❌, 실행 중인 메인 프로세스에 연결&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;EX
 &lt;div id="ex" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ex" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;Ubuntu 같은 컨테이너는, Docker run 명령어만을 실행했을때, 메인인 /bin/bash가 아무런 입력을 받지 못해서 죽어버림
따라서 docker run -dit ubuntu 으로, &lt;code&gt;interactive mode&lt;/code&gt;로 계속 실행되게 할 것이 강제됨&lt;/p&gt;</description></item><item><title>docker redis 설치</title><link>https://log.j2234.cc/posts/velog/034-docker-redis-%EC%84%A4%EC%B9%98/</link><pubDate>Mon, 14 Aug 2023 22:53:54 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/034-docker-redis-%EC%84%A4%EC%B9%98/</guid><description>&lt;h2 class="relative group"&gt;이미지 다운로드
 &lt;div id="이미지-다운로드" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%eb%af%b8%ec%a7%80-%eb%8b%a4%ec%9a%b4%eb%a1%9c%eb%93%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt; docker pull redis&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;실행
 &lt;div id="실행" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8b%a4%ed%96%89" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;❯ docker run --name redis -d -p 6379:6379 redis&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;접속
 &lt;div id="접속" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%91%ec%86%8d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; docker &lt;span class="nb"&gt;exec&lt;/span&gt; -it redis /bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root@c000d28c9b96:/data# redis-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>JWT 구조</title><link>https://log.j2234.cc/posts/velog/035-jwt-%EA%B5%AC%EC%A1%B0/</link><pubDate>Sun, 30 Jul 2023 21:34:27 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/035-jwt-%EA%B5%AC%EC%A1%B0/</guid><description>&lt;p&gt;&lt;a href="JWT-%EB%B0%B0%EA%B2%BD%EC%A7%80%EC%8B%9D" &gt;이전글&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;구조
 &lt;div id="구조" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b5%ac%ec%a1%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.&lt;/code&gt;으로 구분된 세 부분&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Header&lt;/li&gt;
&lt;li&gt;Payload (정보)&lt;/li&gt;
&lt;li&gt;Signature (서명)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Header
 &lt;div id="header" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#header" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;서명 알고리즘, 토큰 유형
ex)&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;alg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;HS256&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;typ&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;JWT&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Base64Url&lt;/strong&gt;로 인코딩됨&lt;/p&gt;

&lt;h3 class="relative group"&gt;Payload
 &lt;div id="payload" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#payload" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;클래임 (정보의 단위)&lt;/p&gt;
&lt;details&gt;
 &lt;summary&gt;종류&lt;/summary&gt;
 &lt;ul&gt;
 &lt;li&gt;등록된 클레임 (Registered Claims) : 이미 정해저 있는, JWT에 공통적으로 포함되는 클레임 &lt;strong&gt;필수❌ &lt;/strong&gt; 
 &lt;/li&gt;
 &lt;li&gt;공개 클레임 (Public Claims) : 사용저 정의 클레임 &lt;/li&gt;
 &lt;li&gt;비공개 클레임 (Private Claims) : 등록되지 않음, 두 개체가 합의해서 사용&lt;/li&gt;
 &lt;/ul&gt;
&lt;/details&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sub&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1234567890&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;John Doe&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;해더와 같이 &lt;strong&gt;Base64Url&lt;/strong&gt;로 인코딩됨&lt;/p&gt;</description></item><item><title>JWT 배경지식</title><link>https://log.j2234.cc/posts/velog/036-jwt-%EB%B0%B0%EA%B2%BD%EC%A7%80%EC%8B%9D/</link><pubDate>Sun, 30 Jul 2023 21:33:50 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/036-jwt-%EB%B0%B0%EA%B2%BD%EC%A7%80%EC%8B%9D/</guid><description>&lt;blockquote&gt;&lt;p&gt;JWT 이해에 필요한 배경지식들 정리&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;기존 세션 방식의 문제점
 &lt;div id="기존-세션-방식의-문제점" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b8%b0%ec%a1%b4-%ec%84%b8%ec%85%98-%eb%b0%a9%ec%8b%9d%ec%9d%98-%eb%ac%b8%ec%a0%9c%ec%a0%90" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h4 class="relative group"&gt;로드 밸런싱 (여러대의 서버가 나누어 운영)에서, 세션 처리를 어떻게 해야될지 난감
 &lt;div id="로드-밸런싱-여러대의-서버가-나누어-운영에서-세션-처리를-어떻게-해야될지-난감" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a1%9c%eb%93%9c-%eb%b0%b8%eb%9f%b0%ec%8b%b1-%ec%97%ac%eb%9f%ac%eb%8c%80%ec%9d%98-%ec%84%9c%eb%b2%84%ea%b0%80-%eb%82%98%eb%88%84%ec%96%b4-%ec%9a%b4%ec%98%81%ec%97%90%ec%84%9c-%ec%84%b8%ec%85%98-%ec%b2%98%eb%a6%ac%eb%a5%bc-%ec%96%b4%eb%96%bb%ea%b2%8c-%ed%95%b4%ec%95%bc%eb%90%a0%ec%a7%80-%eb%82%9c%ea%b0%90" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;EX)&lt;/p&gt;
&lt;blockquote&gt;&lt;ol&gt;
&lt;li&gt;A,B,C라는 서버 3대가 요청을 처리중&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;&lt;ol start="2"&gt;
&lt;li&gt;사용자가 A서버에 로그인을 처리해서 세션쿠키 발급받음&lt;/li&gt;
&lt;li&gt;갑자기 A서버에 트래픽이 몰려서, B서버에서 다음 작업을 수행&lt;/li&gt;
&lt;li&gt;B서버는 사용자에 대한 세션이 없음&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;또한, 서버의 메모리를 소모하므로, 사용자가 많아지면 &amp;hellip;.&lt;/p&gt;</description></item><item><title>docker mysql 설치</title><link>https://log.j2234.cc/posts/velog/037-docker-mysql-%EC%84%A4%EC%B9%98/</link><pubDate>Wed, 21 Jun 2023 21:16:41 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/037-docker-mysql-%EC%84%A4%EC%B9%98/</guid><description>&lt;h2 class="relative group"&gt;이미지 다운로드&amp;amp;확인
 &lt;div id="이미지-다운로드확인" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%eb%af%b8%ec%a7%80-%eb%8b%a4%ec%9a%b4%eb%a1%9c%eb%93%9c%ed%99%95%ec%9d%b8" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull mysql &lt;span class="o"&gt;[&lt;/span&gt;:버전&lt;span class="o"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker images&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;컨테이너 생성
 &lt;div id="컨테이너-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bb%a8%ed%85%8c%ec%9d%b4%eb%84%88-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d --name mysql -p 3306:3306 -e &lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0000&lt;/span&gt; -e &lt;span class="nv"&gt;TZ&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Asia/Seoul mysql --character-set-server&lt;span class="o"&gt;=&lt;/span&gt;utf8 --collation-server&lt;span class="o"&gt;=&lt;/span&gt;utf8_general_ci --lower_case_table_names&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --name [컨테이너이름] -p [포트연결]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -d는 백그라운드에서 돌리겠다는 의미&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -e는 환경변수 설치&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --lower_case_table_names=1 안하면 대소문자 구분 -- 개불편함&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;시작
 &lt;div id="시작" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8b%9c%ec%9e%91" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker start/stop/restart&lt;span class="o"&gt;[&lt;/span&gt;컨테이너명&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 참고로, restart는 재부팅하는거임&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;접속
 &lt;div id="접속" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%91%ec%86%8d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; -it mysql bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;이후
 &lt;div id="이후" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%ed%9b%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;###vim&lt;/p&gt;</description></item><item><title>HTTP Header2</title><link>https://log.j2234.cc/posts/velog/038-http-header2/</link><pubDate>Tue, 28 Mar 2023 20:11:55 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/038-http-header2/</guid><description>&lt;p&gt;&lt;a href="./HTTP-header" &gt;HTTP Header1&lt;/a&gt;에서 이어짐&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;검증 헤더1
 &lt;div id="검증-헤더1" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%80%ec%a6%9d-%ed%97%a4%eb%8d%941" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Last-Modified&lt;/code&gt;, &lt;code&gt;if-modified-since&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;캐시 유효 시간이 초과한 경우, 서버의 데이터는 변경되었을 수도 있다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;캐시가 만료 후에도 데이터가 변경되지 않았다면, 저장된 캐시 재사용 가능&lt;/li&gt;
&lt;li&gt;❗️단, &lt;strong&gt;데이터가 같다는 사실을 확인할 방법&lt;/strong&gt; 이 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Last-Modified&lt;/code&gt; 헤더를 통해서 이를 확인&lt;/p&gt;
&lt;p&gt;동작방식&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;서버에서 &lt;code&gt;Last-Modified&lt;/code&gt; 헤더를 전송&lt;/li&gt;
&lt;li&gt;캐시 시간 초과시, 브라우저가 &lt;code&gt;if-modified-since&lt;/code&gt;를 서버에 전송&lt;/li&gt;
&lt;li&gt;서버에서 판단&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;변경안됬으면 &lt;code&gt;304 Not Modified&lt;/code&gt; 응답(데이터전송 ❌) =&amp;gt; 캐시 정보 갱신 &amp;amp; 응답 결과 재사용&lt;/li&gt;
&lt;li&gt;변경됬으면 &lt;code&gt;200&lt;/code&gt; 모든 데이터 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;검증 헤더 2
 &lt;div id="검증-헤더-2" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%80%ec%a6%9d-%ed%97%a4%eb%8d%94-2" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Etag&lt;/code&gt;, &lt;code&gt;If-None-Match&lt;/code&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/038-http-header2/featured.webp"/></item><item><title>HTTP Header1</title><link>https://log.j2234.cc/posts/velog/039-http-header1/</link><pubDate>Sun, 26 Mar 2023 19:35:18 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/039-http-header1/</guid><description>&lt;h2 class="relative group"&gt;Header란?
 &lt;div id="header란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#header%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;Http 전송에 필요한 모든 부가정보 &lt;a href="https://en.wikipedia.org/wiki/List_of_HTTP_header_fields" target="_blank" rel="noreferrer"&gt;&lt;em&gt;엄청많음&lt;/em&gt; &lt;/a&gt;
필요시 임의의 헤더 추가 가능&lt;/p&gt;
&lt;/blockquote&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="976"
 height="458"
 src="https://log.j2234.cc/posts/velog/039-http-header1/img/image-01_hu_5e99a24764b72488.webp"
 srcset="https://log.j2234.cc/posts/velog/039-http-header1/img/image-01_hu_5e99a24764b72488.webp 800w, https://log.j2234.cc/posts/velog/039-http-header1/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/039-http-header1/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Message body&lt;/code&gt;로 데이터를 전달 (payload)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;header&lt;/code&gt;는 데이터를 해석할 수 있는 정보 제공 (유형, 길이 &amp;hellip;.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;** 표현 = 표현 메타데이터 + 표현 데이터 **&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;표현 (Representation)
 &lt;div id="표현-representation" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%91%9c%ed%98%84-representation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;표현 헤더는 전송, 응답 둘다 사용함&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/039-http-header1/featured.webp"/></item><item><title>HTTP 상태코드</title><link>https://log.j2234.cc/posts/velog/040-http-%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C/</link><pubDate>Sun, 26 Mar 2023 19:17:44 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/040-http-%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C/</guid><description>&lt;ul&gt;
&lt;li&gt;1xx : 처리중 (거의 사용 안함)&lt;/li&gt;
&lt;li&gt;2xx : 정상처리&lt;/li&gt;
&lt;li&gt;3xx : 추가 행동 필요&lt;/li&gt;
&lt;li&gt;4xx : 클라이언트 오류&lt;/li&gt;
&lt;li&gt;5xx : 서버 오류&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;인식할 수 없는 상태코드는 상위상태코드 (ex 299=&amp;gt;2xx)로 해석&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;2xx 성공👍
 &lt;div id="2xx-성공" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2xx-%ec%84%b1%ea%b3%b5" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;200&lt;/code&gt; &lt;em&gt;OK&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;201&lt;/code&gt; &lt;em&gt;CREATED&lt;/em&gt; : (리소스 생성)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;202&lt;/code&gt; &lt;em&gt;Accepted&lt;/em&gt; : (요청이 접수되었으나, 처리가 완료되지 않음 ) (ex 배치처리)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;204&lt;/code&gt; &lt;em&gt;No Content&lt;/em&gt; : (서버에서 요청을 수행했지만, 응답 본문에 보낼 데이터는 없음)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;3xx (Redirection) ▶️▶️
 &lt;div id="3xx-redirection-" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3xx-redirection-" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;리다이렉션이란?
 &lt;div id="리다이렉션이란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a6%ac%eb%8b%a4%ec%9d%b4%eb%a0%89%ec%85%98%ec%9d%b4%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;웹 브라우저는 3xx 응답에 Location 헤더가 있으면, 자동으로 Location 위치로 이동&lt;/p&gt;</description></item><item><title>빈 스코프</title><link>https://log.j2234.cc/posts/velog/041-%EB%B9%88-%EC%8A%A4%EC%BD%94%ED%94%84/</link><pubDate>Sun, 12 Mar 2023 19:48:49 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/041-%EB%B9%88-%EC%8A%A4%EC%BD%94%ED%94%84/</guid><description>&lt;h2 class="relative group"&gt;빈 스코프란?
 &lt;div id="빈-스코프란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b9%88-%ec%8a%a4%ec%bd%94%ed%94%84%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;빈이 존재할 수 있는 범위&lt;/p&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;싱글톤&lt;/strong&gt; : 기본 스코프, 스프링 컨테이너의 시작~종료&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;프로토타입&lt;/strong&gt; : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;웹 관련 스코프&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;request&lt;/strong&gt; : 웹 요청이 들어오고 나갈때까지&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;session&lt;/strong&gt; : 웹 세션이 생성되고 종료될때까지&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;application&lt;/strong&gt; : 웹의 서블릿 컨텍스트와 같은 범위로 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;프로토타입 스코프
 &lt;div id="프로토타입-스코프" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9c%ed%86%a0%ed%83%80%ec%9e%85-%ec%8a%a4%ec%bd%94%ed%94%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;싱글톤 스코프의 빈을 조회하면, 항상 같은 인스턴스의 스프링 빈을 반환&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/041-%EB%B9%88-%EC%8A%A4%EC%BD%94%ED%94%84/featured.webp"/></item><item><title>빈 생명주기 콜백</title><link>https://log.j2234.cc/posts/velog/042-%EB%B9%88-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-%EC%BD%9C%EB%B0%B1/</link><pubDate>Sun, 12 Mar 2023 16:41:49 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/042-%EB%B9%88-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-%EC%BD%9C%EB%B0%B1/</guid><description>&lt;h2 class="relative group"&gt;빈 생명주기 콜백이란?
 &lt;div id="빈-생명주기-콜백이란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b9%88-%ec%83%9d%eb%aa%85%ec%a3%bc%ea%b8%b0-%ec%bd%9c%eb%b0%b1%ec%9d%b4%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;db커넥션 풀이나, 네트워크 소캣처럼 연결을 미리 해두고, 어플리케이션 종료 시점에 연결을 모두 종료하라면 객체의 초기화와 종료 작업이 필요&lt;/p&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;스프링은 의존관계 주입이 완료되면, &lt;strong&gt;스프링 빈에게 콜백 메서드를 통해서&lt;/strong&gt; 초기화 시점을 알려줌&lt;/li&gt;
&lt;li&gt;또한, 스프링 컨테이너가 종료되기 직전에 &lt;strong&gt;소멸 콜백&lt;/strong&gt;을 줌&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;빈 생명주기 콜백 지원 3가지 방법&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;인터페이스(InitializingBean, DisposableBean)&lt;/li&gt;
&lt;li&gt;설정 정보에 초기화 메서드, 종료 메서드 지정&lt;/li&gt;
&lt;li&gt;@PostConstruct, @PreDestroy&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;인터페이스
 &lt;div id="인터페이스" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b8%ed%84%b0%ed%8e%98%ec%9d%b4%ec%8a%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;초창기에 나온 방법으로, 거의 사용안함&lt;/em&gt;&lt;/p&gt;</description></item><item><title>의존관계 자동 주입</title><link>https://log.j2234.cc/posts/velog/043-%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84-%EC%9E%90%EB%8F%99-%EC%A3%BC%EC%9E%85/</link><pubDate>Mon, 06 Mar 2023 22:37:41 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/043-%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84-%EC%9E%90%EB%8F%99-%EC%A3%BC%EC%9E%85/</guid><description>&lt;h2 class="relative group"&gt;의존관계 주입 방법
 &lt;div id="의존관계-주입-방법" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%98%ec%a1%b4%ea%b4%80%ea%b3%84-%ec%a3%bc%ec%9e%85-%eb%b0%a9%eb%b2%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;생성자, 수정자, 필드 ,메서드 4가지&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;생성자 주입
 &lt;div id="생성자-주입" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%83%9d%ec%84%b1%ec%9e%90-%ec%a3%bc%ec%9e%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;생성자를 통해 주입받는 방법&lt;/li&gt;
&lt;li&gt;생성자 호출시점에 단 한번만 (불변, 필수)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입&lt;/em&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;수정자 주입
 &lt;div id="수정자-주입" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%88%98%ec%a0%95%ec%9e%90-%ec%a3%bc%ec%9e%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;setter&lt;/code&gt;을 통해 의존관계 주입&lt;/li&gt;
&lt;li&gt;&lt;code&gt;선택, 변경&lt;/code&gt; 가능성이 있는 의존관계에 사용 (거의 사용할일 없음)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;필드 주입
 &lt;div id="필드-주입" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%95%84%eb%93%9c-%ec%a3%bc%ec%9e%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;필드에 바로 주입하는 방식&lt;/li&gt;
&lt;li&gt;코드가 간결하지만, 외부에서 변경 불가 =&amp;gt; 테스트하기 어려움&lt;/li&gt;
&lt;li&gt;DI 프레임워크가 없으면 암것도 못함&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Configuration&lt;/code&gt; 같은 곳에서만 특별한 용도로 사용
웬만하면 사용하지 말자!!
&lt;del&gt;실무에서 많이씀&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;일반 메서드 주입
 &lt;div id="일반-메서드-주입" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%bc%eb%b0%98-%eb%a9%94%ec%84%9c%eb%93%9c-%ec%a3%bc%ec%9e%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;일반적인 메서드를 통한 주입&lt;/li&gt;
&lt;li&gt;안씀&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;옵션 처리
 &lt;div id="옵션-처리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%98%b5%ec%85%98-%ec%b2%98%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;주입할 스프링 빈이 없어도 동작해야 될 때&lt;/p&gt;</description></item><item><title>컴포넌트 스캔</title><link>https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/</link><pubDate>Sun, 05 Mar 2023 20:56:21 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/</guid><description>&lt;h2 class="relative group"&gt;컴포넌트 스캔
 &lt;div id="컴포넌트-스캔" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bb%b4%ed%8f%ac%eb%84%8c%ed%8a%b8-%ec%8a%a4%ec%ba%94" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;이전 강의들에서는 &lt;code&gt;@Bean&lt;/code&gt; 등을 통해서 직접 스프링 빈을 등록함 (귀찮음)&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔
설정 정보에 &lt;code&gt;@ComponentScan&lt;/code&gt;을 붙여주기만 하면 됨&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;컴포넌트 스캔은 이름 그대로 &lt;code&gt;@Component&lt;/code&gt; 어노테이션이 붙은 클래스들을 스캔해서 스프링 빈으로 등록&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@Autowired&lt;/code&gt;를 사용하면, 생성자에서 여러 의존관계도 한번에 주입 가능&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;순서&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;@ComponentScan
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="800"
 height="358"
 src="https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@ComponentScan&lt;/code&gt;은 &lt;code&gt;@Component&lt;/code&gt;가 붙은 모든 클래스를 스프링 빈으로
&lt;ul&gt;
&lt;li&gt;빈 이름 기본 : 앞글자만 대문자로
MemberServiceImpl =&amp;gt; memberServiceImpl&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Component(&amp;quot;name&amp;quot;)&lt;/code&gt; 으로 직접 이름 지정도 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="2"&gt;
&lt;li&gt;의존관계 자동 주입
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="804"
 height="348"
 src="https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/img/image-02_hu_53becf381c0c0e4d.webp"
 srcset="https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/img/image-02_hu_53becf381c0c0e4d.webp 800w, https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/img/image-02.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/img/image-02.webp"&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;생성자에 &lt;code&gt;@Autowired&lt;/code&gt; 를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입&lt;/li&gt;
&lt;li&gt;파라미터가 많아도 다 찾아서 주입해줌&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;탐색 위치, 기본 스캔 대상
 &lt;div id="탐색-위치-기본-스캔-대상" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%83%90%ec%83%89-%ec%9c%84%ec%b9%98-%ea%b8%b0%eb%b3%b8-%ec%8a%a4%ec%ba%94-%eb%8c%80%ec%83%81" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;탐색 위치 지정&lt;/strong&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/044-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94/featured.webp"/></item><item><title>싱글톤 컨테이너</title><link>https://log.j2234.cc/posts/velog/045-%EC%8B%B1%EA%B8%80%ED%86%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88/</link><pubDate>Sun, 05 Mar 2023 10:53:26 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/045-%EC%8B%B1%EA%B8%80%ED%86%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88/</guid><description>&lt;h2 class="relative group"&gt;싱글톤
 &lt;div id="싱글톤" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8b%b1%ea%b8%80%ed%86%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;웹 어플리케이션 특성상, 굉장히 많은 요청이 들어옴
이 때마다 객체가 생성되고 소멸되면, 이는 엄청난 메모리 낭비임&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;해결책 : 해당 객체가 딱 1개만 생성되고, 공유하도록 설계 =&amp;gt; 싱글톤&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;singleton 예제&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SingletonService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SingletonService&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SingletonService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SingletonService&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;싱글톤 패턴은 여러가지 문제점을 가지고 있다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>스프링 컨테이너와 스프링 빈</title><link>https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/</link><pubDate>Thu, 02 Mar 2023 21:12:46 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/</guid><description>&lt;h2 class="relative group"&gt;컨테이너 생성
 &lt;div id="컨테이너-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bb%a8%ed%85%8c%ec%9d%b4%eb%84%88-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ApplicationContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;applicationContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AnnotationConfigApplicationContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;1. 스프링 컨테이너 생성
 &lt;div id="1-스프링-컨테이너-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-%ec%8a%a4%ed%94%84%eb%a7%81-%ec%bb%a8%ed%85%8c%ec%9d%b4%eb%84%88-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="809"
 height="381"
 src="https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/img/image-01_hu_4113b8bdf8138fe5.webp"
 srcset="https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/img/image-01_hu_4113b8bdf8138fe5.webp 800w, https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt; new AnnotationConfigApplicationContext(AppConfig.class)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;2. 스프링 빈 등록
 &lt;div id="2-스프링-빈-등록" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-%ec%8a%a4%ed%94%84%eb%a7%81-%eb%b9%88-%eb%93%b1%eb%a1%9d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="806"
 height="363"
 src="https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/img/image-02_hu_3e456ce632684ec.webp"
 srcset="https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/img/image-02_hu_3e456ce632684ec.webp 800w, https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/img/image-02.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/img/image-02.webp"&gt;&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈 등록&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;** 빈 이름 **&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/046-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88/featured.webp"/></item><item><title>스프링 객체지향원리 적용</title><link>https://log.j2234.cc/posts/velog/047-%EC%8A%A4%ED%94%84%EB%A7%81-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%9B%90%EB%A6%AC-%EC%A0%81%EC%9A%A9/</link><pubDate>Wed, 01 Mar 2023 17:38:36 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/047-%EC%8A%A4%ED%94%84%EB%A7%81-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%9B%90%EB%A6%AC-%EC%A0%81%EC%9A%A9/</guid><description>&lt;blockquote&gt;&lt;p&gt;&lt;a href="https://velog.io/@jiheon2234/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%EC%84%A4%EA%B3%84%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81" target="_blank" rel="noreferrer"&gt;이전 글&lt;/a&gt;에서 언급되었던 &lt;strong&gt;OCP&lt;/strong&gt;,&lt;strong&gt;DIP&lt;/strong&gt; 의 문제점을 스프링에서 해결하는 방법
&lt;em&gt;클라이언트 코드를 변경하지 않고, 새로운 구현체로 갈아끼우려면??&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr&gt;

&lt;h2 class="relative group"&gt;관심사의 분리
 &lt;div id="관심사의-분리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b4%80%ec%8b%ac%ec%82%ac%ec%9d%98-%eb%b6%84%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;어플리케이션의 전체 동작 방식을 구성(config) 하기 위해서, &lt;strong&gt;구현 객체를 생성&lt;/strong&gt; 하고, &lt;strong&gt;연결&lt;/strong&gt; 하는 책임을 가지는 별도의 생성 클래스&lt;/p&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;어플리케이션의 실제 동작에 필요한 &lt;strong&gt;구현 객체를 생성&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;생성한 객체 인스턴스의 참조(rference)를 &lt;strong&gt;생성자를 통해서 주입&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;즉, 생성자를 통해 어떤 구현체가 들어올지는 오직 외부에서 결정됨
=&amp;gt; &lt;strong&gt;의존관계에 대한 고민은 외부에 맡기고, 실행에만 집중&lt;/strong&gt;
&lt;em&gt;클라이언트 코드는 절대 변경되지 않음&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;IOD, DI, 컨테이너
 &lt;div id="iod-di-컨테이너" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#iod-di-%ec%bb%a8%ed%85%8c%ec%9d%b4%eb%84%88" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;IOC (제어의 역전)
 &lt;div id="ioc-제어의-역전" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ioc-%ec%a0%9c%ec%96%b4%ec%9d%98-%ec%97%ad%ec%a0%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Inversion of Control&lt;/em&gt;&lt;/p&gt;</description></item><item><title>객체 지향 설계</title><link>https://log.j2234.cc/posts/velog/048-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%EC%84%A4%EA%B3%84/</link><pubDate>Mon, 27 Feb 2023 21:27:34 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/048-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%EC%84%A4%EA%B3%84/</guid><description>&lt;h2 class="relative group"&gt;SQLID (좋은 객체 지향 설계의 5원칙)
 &lt;div id="sqlid-좋은-객체-지향-설계의-5원칙" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sqlid-%ec%a2%8b%ec%9d%80-%ea%b0%9d%ec%b2%b4-%ec%a7%80%ed%96%a5-%ec%84%a4%ea%b3%84%ec%9d%98-5%ec%9b%90%ec%b9%99" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;SRP (단일책임)
 &lt;div id="srp-단일책임" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#srp-%eb%8b%a8%ec%9d%bc%ec%b1%85%ec%9e%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;*Single Responsibility priniple *&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;한 클래스는 하나의 책임만
&lt;ul&gt;
&lt;li&gt;하나의 책임이란? 문맥과 상황에 라 다름&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;중요한 기준은 변경&lt;/strong&gt; =&amp;gt; 변경이 있을 때 파급 효과가 적으면 👍&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;OCP (개방-폐쇄)❗️
 &lt;div id="ocp-개방-폐쇄" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ocp-%ea%b0%9c%eb%b0%a9-%ed%8f%90%ec%87%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Open/closed principle&lt;/em&gt;&lt;/p&gt;</description></item><item><title>파일 업로드</title><link>https://log.j2234.cc/posts/velog/049-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C/</link><pubDate>Sat, 25 Feb 2023 19:27:09 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/049-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C/</guid><description>&lt;h2 class="relative group"&gt;전송방식
 &lt;div id="전송방식" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%84%ec%86%a1%eb%b0%a9%ec%8b%9d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;폼을 전송하는 두 방법&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipart/form-data&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;파일을 전송할 땐, 이진 데이터를 전송해야 되므로, 이 방식 사용 불가
또한, 보통 폼과 파일을 같이 전송하므로, &lt;strong&gt;문자와 바이너리를 동시에 전송&lt;/strong&gt;해야 함&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;이 문제를 해결하기 위해서, HTTP는 &lt;code&gt;multipart/form-data&lt;/code&gt; 방식 제공!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;&lt;code&gt;multipart/form-data&lt;/code&gt;
 &lt;div id="multipartform-data" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#multipartform-data" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;다른 종류의 여러 파일과 폼의 내용을 함께 전송하는 방식&lt;/em&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="801"
 height="393"
 src="https://log.j2234.cc/posts/velog/049-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C/img/image-01_hu_34dc54dd473e5235.webp"
 srcset="https://log.j2234.cc/posts/velog/049-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C/img/image-01_hu_34dc54dd473e5235.webp 800w, https://log.j2234.cc/posts/velog/049-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/049-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/049-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C/featured.webp"/></item><item><title>스프링 타입 컨버터</title><link>https://log.j2234.cc/posts/velog/050-%EC%8A%A4%ED%94%84%EB%A7%81-%ED%83%80%EC%9E%85-%EC%BB%A8%EB%B2%84%ED%84%B0/</link><pubDate>Tue, 21 Feb 2023 20:11:01 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/050-%EC%8A%A4%ED%94%84%EB%A7%81-%ED%83%80%EC%9E%85-%EC%BB%A8%EB%B2%84%ED%84%B0/</guid><description>&lt;h2 class="relative group"&gt;타입 컨버터란?
 &lt;div id="타입-컨버터란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%83%80%ec%9e%85-%ec%bb%a8%eb%b2%84%ed%84%b0%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;HTTP 요청 파라미터는 모두 문자로 처리함
&lt;code&gt;Integer intvalue = Integer.valueOf(data)&lt;/code&gt;로 숫자로 변환해야됨&lt;/p&gt;
&lt;p&gt;스프링의 &lt;code&gt;RequestParam&lt;/code&gt;을 사용하면 쉽게 타입을 변환해서 받을 수 있음
&lt;code&gt;(@RequestParam Integer data)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;스프링은 &lt;strong&gt;컨버터 인터페이스&lt;/strong&gt; 를 사용해서 이를 가능하게 한다.
&lt;code&gt;org.springframework.core.convert.converter.Converter&lt;/code&gt;를 구현해서 사용가능&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;컨버전 서비스
 &lt;div id="컨버전-서비스" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bb%a8%eb%b2%84%ec%a0%84-%ec%84%9c%eb%b9%84%ec%8a%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;스프링이 제공하는, 개별 컨버터를 모아두고 묶어서 사용하는 기능&lt;/p&gt;</description></item><item><title>API 예외 처리</title><link>https://log.j2234.cc/posts/velog/051-api-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC/</link><pubDate>Mon, 13 Feb 2023 21:15:08 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/051-api-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC/</guid><description>&lt;h2 class="relative group"&gt;시작
 &lt;div id="시작" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8b%9c%ec%9e%91" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;HTML은, 오류가 나면 4xx,5xx 오류 페이지만 있으면 된다.
근데, API의 경우에는 각 오류 상황에 맞는 응답 스펙을 정하고, json으로 줘야됨&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ex)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@RequestMapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/error-page/500&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;produces&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MediaType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;APPLICATION_JSON_VALUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;errorPage500Api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpServletRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HttpServletResponse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RequestDispatcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ERROR_EXCEPTION&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RequestDispatcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ERROR_STATUS_CODE&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;statusCode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RequestDispatcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ERROR_STATUS_CODE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HttpStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;요청의 &lt;code&gt;Accept&lt;/code&gt;가 &lt;code&gt;application/json&lt;/code&gt;인 경우를 처리
&lt;code&gt;HttpRequest&lt;/code&gt;의 정보를 토대로 json 생성 후 반환
&lt;a href="https://velog.io/@jiheon2234/%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98#%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC" target="_blank" rel="noreferrer"&gt;이전글 참고&lt;/a&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/051-api-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC/featured.webp"/></item><item><title>예외 처리,오류</title><link>https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/</link><pubDate>Sat, 11 Feb 2023 19:41:43 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/</guid><description>&lt;h2 class="relative group"&gt;프로젝트 생성
 &lt;div id="프로젝트-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1302"
 height="595"
 src="https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/img/image-01_hu_4065ef16aad6e324.webp"
 srcset="https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/img/image-01_hu_4065ef16aad6e324.webp 800w, https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/img/image-01_hu_34e75541f48e389b.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;서블릿 예외 처리
 &lt;div id="서블릿-예외-처리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%9c%eb%b8%94%eb%a6%bf-%ec%98%88%ec%99%b8-%ec%b2%98%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;순수 서블릿 컨테이너가 에러를 처리하는 방법&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Exception&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;response.sendError&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;자바를 직접 실행할때, main()에서 에러를 던지면 해당 쓰레드는 종료됨
웹 어플리케이션은 Was 까지 던져지고, 해당 화면을 보게됨&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1830"
 height="242"
 src="https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/img/image-02_hu_23236eb065b9626b.webp"
 srcset="https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/img/image-02_hu_23236eb065b9626b.webp 800w, https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/img/image-02_hu_92a7883603fcfdbd.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/img/image-02.webp"&gt;&lt;/figure&gt;
&lt;p&gt;서블릿은 &lt;code&gt;Exception&lt;/code&gt;이 서블릿 밖으로 전달되거나, &lt;code&gt;response.sendError()&lt;/code&gt;가 호출 되었을 때 상황에 맞게 오류 처리 기능을 제공&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/052-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EC%98%A4%EB%A5%98/featured.webp"/></item><item><title>로그인2 (필터,인터셉터)</title><link>https://log.j2234.cc/posts/velog/053-%EB%A1%9C%EA%B7%B8%EC%9D%B82-%ED%95%84%ED%84%B0%EC%9D%B8%ED%84%B0%EC%85%89%ED%84%B0/</link><pubDate>Mon, 06 Feb 2023 20:52:07 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/053-%EB%A1%9C%EA%B7%B8%EC%9D%B82-%ED%95%84%ED%84%B0%EC%9D%B8%ED%84%B0%EC%85%89%ED%84%B0/</guid><description>&lt;h2 class="relative group"&gt;서블릿 필터
 &lt;div id="서블릿-필터" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%84%9c%eb%b8%94%eb%a6%bf-%ed%95%84%ed%84%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;서블릿이 지원하는 수문장&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;필터 흐름&lt;/strong&gt;
HTTP 요청 -&amp;gt; WAS -&amp;gt; 필터(들) -&amp;gt; 서블릿 -&amp;gt; 컨트롤러&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;필터에서 막히면 끝낼수 있음 (로그인에 딱임)&lt;/p&gt;
&lt;p&gt;**필터 인터페이스 (javax.servlet.Filter) **&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;init()&lt;/code&gt; : 컨테이너가 생성될때 호출&lt;/li&gt;
&lt;li&gt;&lt;code&gt;doFilter()&lt;/code&gt; : 로직&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destroy()&lt;/code&gt; : 컨테이너가 종료될 때 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;스프링시큐리티 등은 필터로 구현되어있음&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;인터셉터
 &lt;div id="인터셉터" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b8%ed%84%b0%ec%85%89%ed%84%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;스프링 MVC가 제공하는 기술로, 필터와 비슷하지만 &lt;strong&gt;순서,범위,사용방법이 다름&lt;/strong&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/053-%EB%A1%9C%EA%B7%B8%EC%9D%B82-%ED%95%84%ED%84%B0%EC%9D%B8%ED%84%B0%EC%85%89%ED%84%B0/featured.webp"/></item><item><title>로그인1(쿠키,세션)</title><link>https://log.j2234.cc/posts/velog/054-%EB%A1%9C%EA%B7%B8%EC%9D%B81%EC%BF%A0%ED%82%A4%EC%84%B8%EC%85%98/</link><pubDate>Sun, 29 Jan 2023 12:38:30 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/054-%EB%A1%9C%EA%B7%B8%EC%9D%B81%EC%BF%A0%ED%82%A4%EC%84%B8%EC%85%98/</guid><description>&lt;h2 class="relative group"&gt;쿠키를 사용한 로그인
 &lt;div id="쿠키를-사용한-로그인" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bf%a0%ed%82%a4%eb%a5%bc-%ec%82%ac%ec%9a%a9%ed%95%9c-%eb%a1%9c%ea%b7%b8%ec%9d%b8" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;로그인 상태 유지하기&lt;/strong&gt;
로그인에 성공하면, 쿠키를 생성하고 &lt;code&gt;HttpServletResponse&lt;/code&gt;에 담는다.
웹 브라우저는, 세션이 끊기기 전까지 쿠키를 서버에 계속 보내줌&lt;/p&gt;
&lt;p&gt;로그아웃시에는, 똑같은 이름의 새 쿠키를 생성하고,&lt;code&gt;.setMaxAge(0)&lt;/code&gt;으로 지속시간을 없애고, &lt;code&gt;HttpServletResponse&lt;/code&gt; 에 담아주면 된다.&lt;/p&gt;

&lt;h3 class="relative group"&gt;보안문제
 &lt;div id="보안문제" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b3%b4%ec%95%88%eb%ac%b8%ec%a0%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;쿠키값은 임의로 바뀔 수도 있고, 웹 브라우저에 보관되기 때문에 누군가 정보를 훔처갈 수도 있음
&lt;em&gt;해커가 한번 쿠키를 가져가면 평생 사용 가능&lt;/em&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/054-%EB%A1%9C%EA%B7%B8%EC%9D%B81%EC%BF%A0%ED%82%A4%EC%84%B8%EC%85%98/featured.webp"/></item><item><title>검증2 - Bean Validation</title><link>https://log.j2234.cc/posts/velog/055-%EA%B2%80%EC%A6%9D2-bean-validation/</link><pubDate>Thu, 26 Jan 2023 14:34:50 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/055-%EA%B2%80%EC%A6%9D2-bean-validation/</guid><description>&lt;h2 class="relative group"&gt;Bean Validation이란?
 &lt;div id="bean-validation이란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#bean-validation%ec%9d%b4%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;검증 어노테이션과 여러 인터페이스의 모음
일반적으로 하이버네이트 Validator를 구현체로 사용
&lt;a href="https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/#validator-defineconstraints-spec" target="_blank" rel="noreferrer"&gt;공식 문서&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;build.gradle&lt;/code&gt;에 의존관계추가&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; implementation &amp;#39;org.springframework.boot:spring-boot-starter-validation&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;스프링에선 빈 검증기를 완전히 통합해뒀음&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;스프링 적용
 &lt;div id="스프링-적용" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8a%a4%ed%94%84%eb%a7%81-%ec%a0%81%ec%9a%a9" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;	implementation 'org.springframework.boot:spring-boot-starter-validation'&lt;/code&gt;이 있으면, 자동으로 통합&lt;/p&gt;
&lt;p&gt;글로벌 Validator를 등록하기 때문에, &lt;code&gt;@Validated&lt;/code&gt;만 적용하면 됨
오류가 나면, &lt;code&gt;filedError&lt;/code&gt;,&lt;code&gt;ObjectError&lt;/code&gt;를 생성해서 &lt;code&gt;BindingResult&lt;/code&gt;에 담아줌&lt;/p&gt;</description></item><item><title>검증1 -Validation</title><link>https://log.j2234.cc/posts/velog/056-%EA%B2%80%EC%A6%9D1-validation/</link><pubDate>Wed, 25 Jan 2023 15:38:21 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/056-%EA%B2%80%EC%A6%9D1-validation/</guid><description>&lt;h2 class="relative group"&gt;검증 요구사항
 &lt;div id="검증-요구사항" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%80%ec%a6%9d-%ec%9a%94%ea%b5%ac%ec%82%ac%ed%95%ad" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;웹 서비스는 폼 입력시 오류가 발생하면, 데이터를 유지한 상태로 오류를 사용자에게 알려주어야 한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;컨트롤러의 중요한 역활 중 하나는, HTTP 요청이 정상인지 검증하는 것이다&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;클라이언트 검증(js)은 보안에 취약&lt;/li&gt;
&lt;li&gt;서버만으로 검증하면, 고객 사용성 부족&lt;/li&gt;
&lt;li&gt;적절히 섞어서 사용하되, 최종 서버 검증은 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;이전 프로젝트를 일부 수정한 &lt;code&gt;validation-start&lt;/code&gt;프로젝트에서 진행&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;검증 처리
 &lt;div id="검증-처리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%80%ec%a6%9d-%ec%b2%98%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;고객이 폼을 잘못 입력한 경우
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="808"
 height="529"
 src="https://log.j2234.cc/posts/velog/056-%EA%B2%80%EC%A6%9D1-validation/img/image-01_hu_405aae531202fafc.webp"
 srcset="https://log.j2234.cc/posts/velog/056-%EA%B2%80%EC%A6%9D1-validation/img/image-01_hu_405aae531202fafc.webp 800w, https://log.j2234.cc/posts/velog/056-%EA%B2%80%EC%A6%9D1-validation/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/056-%EA%B2%80%EC%A6%9D1-validation/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/056-%EA%B2%80%EC%A6%9D1-validation/featured.webp"/></item><item><title>메시지,국제화</title><link>https://log.j2234.cc/posts/velog/057-%EB%A9%94%EC%8B%9C%EC%A7%80%EA%B5%AD%EC%A0%9C%ED%99%94/</link><pubDate>Tue, 24 Jan 2023 18:23:52 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/057-%EB%A9%94%EC%8B%9C%EC%A7%80%EA%B5%AD%EC%A0%9C%ED%99%94/</guid><description>&lt;h2 class="relative group"&gt;메시지, 국제화 소개
 &lt;div id="메시지-국제화-소개" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a9%94%ec%8b%9c%ec%a7%80-%ea%b5%ad%ec%a0%9c%ed%99%94-%ec%86%8c%ea%b0%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;메시지
 &lt;div id="메시지" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a9%94%ec%8b%9c%ec%a7%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;기획자가 &lt;strong&gt;&amp;ldquo;상품명&amp;rdquo;&lt;/strong&gt; 이란 단어를 모두 &lt;strong&gt;&amp;ldquo;상품이름&lt;/strong&gt;&amp;rdquo; 으로 고쳐달라고 하면?
&lt;em&gt;HTML 파일에 메시지가 하드코딩 되어 있어 모든 화면을 고쳐야 한다&lt;/em&gt; &lt;del&gt;ㅅㅂ&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;이런 다양한 메시지를 한 곳(파일)에서 관리하는 기능을 메시지 기능이라 한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EX)&lt;/strong&gt;
&lt;code&gt;messages.properties&lt;/code&gt;라는 파일을 만들고&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;item=상품
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;item.itemName=상품명
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;HTML에서 해당 데이터를 key값으로 불러서 사용한다
&lt;strong&gt;addForm.html&lt;/strong&gt;
&lt;code&gt;&amp;lt;label for=&amp;quot;itemName&amp;quot; th:text=&amp;quot;#{item.itemName}&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&lt;/code&gt;&lt;/p&gt;</description></item><item><title>타임리프 스프링 통합</title><link>https://log.j2234.cc/posts/velog/058-%ED%83%80%EC%9E%84%EB%A6%AC%ED%94%84-%EC%8A%A4%ED%94%84%EB%A7%81-%ED%86%B5%ED%95%A9/</link><pubDate>Mon, 23 Jan 2023 20:12:41 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/058-%ED%83%80%EC%9E%84%EB%A6%AC%ED%94%84-%EC%8A%A4%ED%94%84%EB%A7%81-%ED%86%B5%ED%95%A9/</guid><description>&lt;h2 class="relative group"&gt;프로젝트 설정
 &lt;div id="프로젝트-설정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ec%84%a4%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://velog.io/@jiheon2234/%EC%8A%A4%ED%94%84%EB%A7%81-MVC-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0" target="_blank" rel="noreferrer"&gt;저번에했던 프로젝트&lt;/a&gt; 조금 수정해서 진행&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;타임리프 스프링 통합
 &lt;div id="타임리프-스프링-통합" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%83%80%ec%9e%84%eb%a6%ac%ed%94%84-%ec%8a%a4%ed%94%84%eb%a7%81-%ed%86%b5%ed%95%a9" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.thymeleaf.org/doc/tutorials/3.1/thymeleafspring.html" target="_blank" rel="noreferrer"&gt;공식문서&lt;/a&gt;
&lt;strong&gt;추가되는 기능들&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SpringEL 문법 통합&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;&amp;hellip;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;스프링 부트에서는&lt;code&gt;build.gradle&lt;/code&gt;의
&lt;code&gt; implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'&lt;/code&gt;가 있으면, 자동으로 설정해준다.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;입력 폼 처리
 &lt;div id="입력-폼-처리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9e%85%eb%a0%a5-%ed%8f%bc-%ec%b2%98%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;item.html&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;th:action&lt;/span&gt; &lt;span class="na"&gt;th:object&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;${item}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;itemName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;상품명&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;th:field&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;*{itemName}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;이름을 입력하세요&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;th:object=&amp;quot;{item}&amp;quot;&lt;/code&gt; : &lt;code&gt;form&lt;/code&gt;에서 사용할 객체를 지정&lt;/li&gt;
&lt;li&gt;&lt;code&gt;th:field=&amp;quot;*{itemName}&amp;quot;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;선택변수식 &lt;code&gt;*{itemName}&lt;/code&gt; == &lt;code&gt;${item.itemName}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;th:field&lt;/code&gt;는 id, name, value 속성을 자동으로 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;체크박스
 &lt;div id="체크박스" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%b2%b4%ed%81%ac%eb%b0%95%ec%8a%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;code&gt;logging.level.org.apache.coyote.http11=debug&lt;/code&gt; 서버에서 http 요청 메시지를 볼 수 있다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Init</title><link>https://log.j2234.cc/posts/velog/059-init/</link><pubDate>Tue, 17 Jan 2023 16:16:42 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/059-init/</guid><description>&lt;p&gt;&lt;a href="https://velog.io/@jiheon2234/series/SpringMVC2" target="_blank" rel="noreferrer"&gt;스프링MVC1&lt;/a&gt;에서 이어지는 시리즈
마찬가지로 김영한님의 스프링MVC2 강의를 듣고 정리&lt;/p&gt;</description></item><item><title>Thymeleaf</title><link>https://log.j2234.cc/posts/velog/060-thymeleaf/</link><pubDate>Tue, 17 Jan 2023 16:14:31 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/060-thymeleaf/</guid><description>&lt;h2 class="relative group"&gt;프로젝트 생성
 &lt;div id="프로젝트-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1509"
 height="611"
 src="https://log.j2234.cc/posts/velog/060-thymeleaf/img/image-01_hu_7c4ffb147110bef5.webp"
 srcset="https://log.j2234.cc/posts/velog/060-thymeleaf/img/image-01_hu_7c4ffb147110bef5.webp 800w, https://log.j2234.cc/posts/velog/060-thymeleaf/img/image-01_hu_6eb211c2c68d4324.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/060-thymeleaf/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;소개
 &lt;div id="소개" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%86%8c%ea%b0%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.thymeleaf.org/documentation.html" target="_blank" rel="noreferrer"&gt;공식문서&lt;/a&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;타임리프 특징
 &lt;div id="타임리프-특징" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%83%80%ec%9e%84%eb%a6%ac%ed%94%84-%ed%8a%b9%ec%a7%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&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;&lt;strong&gt;타임리프 사용 선언&lt;/strong&gt;
&lt;code&gt;&amp;lt;html xmlns:th&amp;quot;http://www.thymeleaf.org&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;텍스트 - text,utext
 &lt;div id="텍스트---textutext" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%85%8d%ec%8a%a4%ed%8a%b8---textutext" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;기본적으로 HTML 태그 속성에 기능을 정의해서 동작&lt;/em&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/060-thymeleaf/featured.webp"/></item><item><title>Port 8080 was already in use</title><link>https://log.j2234.cc/posts/velog/061-port-8080-was-already-in-use/</link><pubDate>Tue, 17 Jan 2023 00:57:15 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/061-port-8080-was-already-in-use/</guid><description>&lt;p&gt;오늘 하도 서버를 켯다껐다해서 그런가
&lt;code&gt;Port 8080 was already in use&lt;/code&gt; 에러가 뜨면서 실행이 안된다.
인터넷에서 해결방안을 찾아서 써논다.&lt;/p&gt;

&lt;h2 class="relative group"&gt;해결하는 방법
 &lt;div id="해결하는-방법" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%95%b4%ea%b2%b0%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;application.properties&lt;/code&gt;에서
&lt;code&gt;server.port=????&lt;/code&gt;로 포트 번호를 설정해준다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lsof -i tcp:8080 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 8080포트를 쓰고 있는 프로세스를 찾는다.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo &lt;span class="nb"&gt;kill&lt;/span&gt; -9 &lt;span class="o"&gt;[&lt;/span&gt;PID&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;#로 죽여버린다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;*참고
&lt;code&gt;lsof&lt;/code&gt;는 list of open file로, 열려있는 파일과 그에대한 정보를 알려준다 &lt;del&gt;리눅스는 모든게 파일임&lt;/del&gt;
&lt;code&gt;-i&lt;/code&gt; [프로토콜:포트번호]를 주면 특정 포트를 사용하는 프로세스 정보를 출력한다&lt;/p&gt;</description></item><item><title>스프링 MVC-웹페이지만들기</title><link>https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/</link><pubDate>Sun, 15 Jan 2023 19:39:57 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid><description>&lt;h2 class="relative group"&gt;프로젝트 생성
 &lt;div id="프로젝트-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1509"
 height="621"
 src="https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-01_hu_a235e8ad537ab8d9.webp"
 srcset="https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-01_hu_a235e8ad537ab8d9.webp 800w, https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-01_hu_47d20a92bbe2f339.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;요구사항 분석
 &lt;div id="요구사항-분석" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9a%94%ea%b5%ac%ec%82%ac%ed%95%ad-%eb%b6%84%ec%84%9d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;상품 관리 서비스&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;상품 도메인 모델&lt;/strong&gt;
(ID, 명, 가격, 수량)&lt;/p&gt;
&lt;p&gt;** 서비스 흐름 **
상품 관리 기능 = CRUD
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1614"
 height="678"
 src="https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-02_hu_9c87d4a42ec5eafc.webp"
 srcset="https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-02_hu_9c87d4a42ec5eafc.webp 800w, https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-02_hu_9e4716c5f71d366e.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-02.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;타임리프
 &lt;div id="타임리프" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%83%80%ec%9e%84%eb%a6%ac%ed%94%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;타임리프 사용 선언&lt;/strong&gt;
&lt;code&gt;&amp;lt;html xmlns:th=&amp;quot;http://www.thymeleaf.org&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/062-%EC%8A%A4%ED%94%84%EB%A7%81-mvc-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0/featured.webp"/></item><item><title>스프링MVC-기본 기능</title><link>https://log.j2234.cc/posts/velog/063-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B8%B0%EB%B3%B8-%EA%B8%B0%EB%8A%A5/</link><pubDate>Fri, 13 Jan 2023 14:47:59 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/063-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B8%B0%EB%B3%B8-%EA%B8%B0%EB%8A%A5/</guid><description>&lt;h2 class="relative group"&gt;프로젝트 생성
 &lt;div id="프로젝트-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1503"
 height="608"
 src="https://log.j2234.cc/posts/velog/063-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B8%B0%EB%B3%B8-%EA%B8%B0%EB%8A%A5/img/image-01_hu_b2031e3bd490edeb.webp"
 srcset="https://log.j2234.cc/posts/velog/063-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B8%B0%EB%B3%B8-%EA%B8%B0%EB%8A%A5/img/image-01_hu_b2031e3bd490edeb.webp 800w, https://log.j2234.cc/posts/velog/063-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B8%B0%EB%B3%B8-%EA%B8%B0%EB%8A%A5/img/image-01_hu_ea0a849fd8856781.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/063-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B8%B0%EB%B3%B8-%EA%B8%B0%EB%8A%A5/img/image-01.webp"&gt;&lt;/figure&gt;

build.gradle 파일로 프로젝트 열기&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Welcome Page&lt;/em&gt;
스프링 부트에 &lt;code&gt;Jar&lt;/code&gt;dmf tkdydgkaus &lt;code&gt;/resources/static/index.html/&lt;/code&gt; 자동 처리&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;로깅
 &lt;div id="로깅" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a1%9c%ea%b9%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;로깅 라이브러리&lt;/strong&gt;
스프링 부트를 사용하면, &lt;code&gt;spring-boot-logging&lt;/code&gt;이 함께 포함됨
기본적으로 &lt;code&gt;SL4J&lt;/code&gt; (인터페이스) 의 구현체 &lt;code&gt;Logback&lt;/code&gt;을 사용&lt;/p&gt;
&lt;p&gt;trace&amp;gt;debug&amp;gt;info&amp;gt;warn&amp;gt;error 5레벨 있으며
로깅을 사용해서 특정 수준 이상의 로그만 볼 수 있음
&lt;code&gt;application.properties&lt;/code&gt;에서 설정 가능&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/063-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B8%B0%EB%B3%B8-%EA%B8%B0%EB%8A%A5/featured.webp"/></item><item><title>스프링MVC 구조</title><link>https://log.j2234.cc/posts/velog/064-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B5%AC%EC%A1%B0/</link><pubDate>Thu, 12 Jan 2023 19:59:27 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/064-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B5%AC%EC%A1%B0/</guid><description>&lt;h2 class="relative group"&gt;스프링 MVC 전체 구조
 &lt;div id="스프링-mvc-전체-구조" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8a%a4%ed%94%84%eb%a7%81-mvc-%ec%a0%84%ec%b2%b4-%ea%b5%ac%ec%a1%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1608"
 height="734"
 src="https://log.j2234.cc/posts/velog/064-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B5%AC%EC%A1%B0/img/image-01_hu_283b9458aea003e1.webp"
 srcset="https://log.j2234.cc/posts/velog/064-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B5%AC%EC%A1%B0/img/image-01_hu_283b9458aea003e1.webp 800w, https://log.j2234.cc/posts/velog/064-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B5%AC%EC%A1%B0/img/image-01_hu_848a2e1cb019f41f.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/064-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B5%AC%EC%A1%B0/img/image-01.webp"&gt;&lt;/figure&gt;

&lt;a href="https://velog.io/@jiheon2234/MVC-%EB%A7%8C%EB%93%A4%EA%B8%B0" target="_blank" rel="noreferrer"&gt;이전에 만들었던 서블릿 프레임워크&lt;/a&gt;와 같은 구조이다!!&lt;/p&gt;

&lt;h2 class="relative group"&gt;DispatcherServlet
 &lt;div id="dispatcherservlet" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#dispatcherservlet" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;스프링 MVC의 &lt;strong&gt;프론트 컨트롤러&lt;/strong&gt;가 **&lt;code&gt;DispatcherServlet&lt;/code&gt;**이다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;부모 클래스에서 &lt;code&gt;HttpServlet&lt;/code&gt;을 상속받아서 사용하고, 서블릿으로 동작&lt;/li&gt;
&lt;li&gt;스프링은 &lt;code&gt;DispatcherServlet&lt;/code&gt;을 서블릿으로 자동등록하며, 모들 경로에 대해서 매핑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;요청 흐름&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;서블릿이 호출되면, &lt;code&gt;HttpServlet&lt;/code&gt;의 &lt;code&gt;service()&lt;/code&gt;가 호출됨&lt;/li&gt;
&lt;li&gt;스프링은 &lt;code&gt;DispatcherServlet&lt;/code&gt;의 부모인 &lt;code&gt;FrameworkServlet.service()&lt;/code&gt;가 오버라이딩 되있음&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FrameworkServlet.service()&lt;/code&gt;를 시작으로, 여러 메서드가 호출되며 &lt;code&gt;DispatcherServlet.doDispatch()&lt;/code&gt;가 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;MVC 시작
 &lt;div id="mvc-시작" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mvc-%ec%8b%9c%ec%9e%91" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;현재 스프링 컨트롤러는 &lt;strong&gt;99,9%&lt;/strong&gt; 어노테이션 기반으로 동작&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/064-%EC%8A%A4%ED%94%84%EB%A7%81mvc-%EA%B5%AC%EC%A1%B0/featured.webp"/></item><item><title>MVC 만들기</title><link>https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/</link><pubDate>Wed, 11 Jan 2023 11:50:04 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid><description>&lt;h2 class="relative group"&gt;프런트 컨트롤러 패턴
 &lt;div id="프런트-컨트롤러-패턴" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%9f%b0%ed%8a%b8-%ec%bb%a8%ed%8a%b8%eb%a1%a4%eb%9f%ac-%ed%8c%a8%ed%84%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;특징&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;서블릿 하나로 요청을 받음&lt;/li&gt;
&lt;li&gt;프런트 컨트롤러가 요청에 맞는 컨트롤러 호출 (입구 하나)&lt;/li&gt;
&lt;li&gt;나머지 컨트롤러는 서블릿 사용 ❌&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="793"
 height="408"
 src="https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-01.webp 800w, https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;v1
 &lt;div id="v1" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#v1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;기본 구조는 그대도되, Front Controller 추가&lt;/em&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="796"
 height="425"
 src="https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-02.webp"
 srcset="https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-02.webp 800w, https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-02.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/img/image-02.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/065-mvc-%EB%A7%8C%EB%93%A4%EA%B8%B0/featured.webp"/></item><item><title>JSP &amp; MVC</title><link>https://log.j2234.cc/posts/velog/066-jsp--mvc/</link><pubDate>Tue, 10 Jan 2023 16:55:25 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/066-jsp--mvc/</guid><description>&lt;h2 class="relative group"&gt;템플릿 엔진
 &lt;div id="템플릿-엔진" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%85%9c%ed%94%8c%eb%a6%bf-%ec%97%94%ec%a7%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;서블릿과 자바 코드만으로 HTML을 동적으로 만들 수 있다.
&lt;em&gt;하지만&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PrintWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getWriter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;html&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;head&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34; &amp;lt;meta charset=\&amp;#34;UTF-8\&amp;#34;&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34; &amp;lt;title&amp;gt;Title&amp;lt;/title&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;/head&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;body&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;a href=\&amp;#34;/index.html\&amp;#34;&amp;gt;메인&amp;lt;/a&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;table&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34; &amp;lt;thead&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34; &amp;lt;th&amp;gt;id&amp;lt;/th&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34; &amp;lt;th&amp;gt;username&amp;lt;/th&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;이런 짓은 사람이 할게 아니다.&lt;/p&gt;
&lt;p&gt;따라서, 자바 코드에서 HtTML을 만들지 않고 HTML 문서에 자바 코드를 넣어서 동적 HTML을 만들게 되었고, 이게 &lt;strong&gt;템플릿 엔진&lt;/strong&gt;이다.
&lt;em&gt;(JSP,Thymeleaf등)&lt;/em&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/066-jsp--mvc/featured.webp"/></item><item><title>서블릿</title><link>https://log.j2234.cc/posts/velog/067-%EC%84%9C%EB%B8%94%EB%A6%BF/</link><pubDate>Wed, 04 Jan 2023 20:00:13 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/067-%EC%84%9C%EB%B8%94%EB%A6%BF/</guid><description>&lt;h2 class="relative group"&gt;프로젝트 생성
 &lt;div id="프로젝트-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;서블릿은 스프링이 필요없지만, 환경설정이 잘 되 있어 스프링 사용&lt;/em&gt;
&lt;a href="https://start.spring.io/" target="_blank" rel="noreferrer"&gt;spring boot starter&lt;/a&gt; 에서 생성
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1464"
 height="581"
 src="https://log.j2234.cc/posts/velog/067-%EC%84%9C%EB%B8%94%EB%A6%BF/img/image-01_hu_8b8c8de7639d7a49.webp"
 srcset="https://log.j2234.cc/posts/velog/067-%EC%84%9C%EB%B8%94%EB%A6%BF/img/image-01_hu_8b8c8de7639d7a49.webp 800w, https://log.j2234.cc/posts/velog/067-%EC%84%9C%EB%B8%94%EB%A6%BF/img/image-01_hu_e924030a717ad80d.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/067-%EC%84%9C%EB%B8%94%EB%A6%BF/img/image-01.webp"&gt;&lt;/figure&gt;

다운 후, build.gradle 선택해서 열기&lt;/p&gt;

&lt;h2 class="relative group"&gt;Hello 서블릿
 &lt;div id="hello-서블릿" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hello-%ec%84%9c%eb%b8%94%eb%a6%bf" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;@ServeltComponentScan&lt;/code&gt;을 통하여 스프링에서 서블릿 자동 등록&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;모든 서블렛은 &lt;code&gt;javax.servlet.http.HttpServlet&lt;/code&gt;를 상속받음
&lt;code&gt;@Webservlet&lt;/code&gt;으로 url mapping
요칭이 오면, 오버라이딩된 &lt;code&gt;service&lt;/code&gt;메소드 실행&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/067-%EC%84%9C%EB%B8%94%EB%A6%BF/featured.webp"/></item><item><title>웹 어플리케이션</title><link>https://log.j2234.cc/posts/velog/068-%EC%9B%B9-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98/</link><pubDate>Wed, 04 Jan 2023 19:17:43 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/068-%EC%9B%B9-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98/</guid><description>&lt;h2 class="relative group"&gt;웹서버, WAS
 &lt;div id="웹서버-was" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9b%b9%ec%84%9c%eb%b2%84-was" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;웹 서버
 &lt;div id="웹-서버" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9b%b9-%ec%84%9c%eb%b2%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;Http 기반으로 정적 리소스들을 주고받는 서버&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;WAS (web application server)
 &lt;div id="was-web-application-server" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#was-web-application-server" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;웹 서버의 기능을 포함하며, 프로그램 코드를 실행해 애플리케이션 로직 수행
자바는 서벌릿 컨테이너 기능을 제공하면 WAS (ex.tomcat)&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/068-%EC%9B%B9-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98/featured.webp"/></item><item><title>Init</title><link>https://log.j2234.cc/posts/velog/069-init/</link><pubDate>Wed, 04 Jan 2023 00:05:21 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/069-init/</guid><description>&lt;blockquote&gt;&lt;p&gt;인프런 할인 이벤트를 보고, 눈여겨보고 있었던 김영한님의 스프링 MVC강의 1~2편을 다 샀다.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;열심히 공부해서 다른 사람의 도움을 받지 않고, 나만의 포트폴리오를 만들 생각이다&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;앞으로 이 시리즈에 강의내용을 정리해서 올릴 예정이다.
&lt;em&gt;화이팅!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>5. 마치며</title><link>https://log.j2234.cc/posts/velog/070-5.-%EB%A7%88%EC%B9%98%EB%A9%B0/</link><pubDate>Tue, 03 Jan 2023 17:37:21 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/070-5.-%EB%A7%88%EC%B9%98%EB%A9%B0/</guid><description>&lt;h2 class="relative group"&gt;부족한 부분
 &lt;div id="부족한-부분" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b6%80%ec%a1%b1%ed%95%9c-%eb%b6%80%eb%b6%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;파일 데이터를 다루는 코드가 잘 이해가 안됨&lt;/li&gt;
&lt;li&gt;jquery 내부에서의 오류 (이건 못고침)&lt;/li&gt;
&lt;li&gt;설정 관련 헷갈리는게 너무나 많음&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;느낀점
 &lt;div id="느낀점" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8a%90%eb%82%80%ec%a0%90" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;그래도 어케 돌아가는지는 알거같다.&lt;/li&gt;
&lt;li&gt;생각보다 웹 프레임워크가 거기서 거기인듯?&lt;/li&gt;
&lt;li&gt;분명 엄청 방대한 (나한테는) 분량임에도 불구하고 하나하나 짚어가면 그렇게 어렵지 않다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;앞으로
 &lt;div id="앞으로" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%95%9e%ec%9c%bc%eb%a1%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;인프런 세일 광고를 보고 &lt;code&gt;김영한스프링 강의&lt;/code&gt;를 큰맘먹고 등록했다.
이 강의는 스프링부트를 쓰는거긴 하지만, 이것까지 들으면서 좀더 이해력을 키워나갈 예정이다&lt;/p&gt;</description></item><item><title>4. 첨부파일 및 댓글 기능</title><link>https://log.j2234.cc/posts/velog/071-4.-%EC%B2%A8%EB%B6%80%ED%8C%8C%EC%9D%BC-%EB%B0%8F-%EB%8C%93%EA%B8%80-%EA%B8%B0%EB%8A%A5/</link><pubDate>Tue, 03 Jan 2023 17:32:39 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/071-4.-%EC%B2%A8%EB%B6%80%ED%8C%8C%EC%9D%BC-%EB%B0%8F-%EB%8C%93%EA%B8%80-%EA%B8%B0%EB%8A%A5/</guid><description>&lt;h2 class="relative group"&gt;공지사항과, 공지사항 첨부 파일 (1:n)
 &lt;div id="공지사항과-공지사항-첨부-파일-1n" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b3%b5%ec%a7%80%ec%82%ac%ed%95%ad%ea%b3%bc-%ea%b3%b5%ec%a7%80%ec%82%ac%ed%95%ad-%ec%b2%a8%eb%b6%80-%ed%8c%8c%ec%9d%bc-1n" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;테이블 생성
 &lt;div id="테이블-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%85%8c%ec%9d%b4%eb%b8%94-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TBL_NOTICE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NOTICE_NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TITLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CONTENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REGISTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REG_DATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;DATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOTICE_NO&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TBL_NOTICE_FILE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NOTICE_FILE_NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NOTICE_FILE_NAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NOTICE_NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOTICE_FILE_NO&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQUENCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQ_NOTICE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;START&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQUENCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQ_NOTICE_FILE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;START&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;FK설정&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TBL_NOTICE_FILE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CONSTRAINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NOTICE_FILE_NOTICE_NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FOREGIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOTICE_NO&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REFERENCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TBL_NOTICE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOTICE_NO&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;pom.xml 설정
 &lt;div id="pomxml-설정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pomxml-%ec%84%a4%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- START multi file upload --&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.imgscalr&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;imgscalr-lib&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;4.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;commons-fileupload&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-fileupload&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.3.2&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- END multi file upload --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- https://mvnrepository.com/artifact/org.webjars/jquery --&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.webjars&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jquery&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.3.1&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;root-context.xml 설정 (파일 최대크기)
 &lt;div id="root-contextxml-설정-파일-최대크기" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#root-contextxml-%ec%84%a4%ec%a0%95-%ed%8c%8c%ec%9d%bc-%ec%b5%9c%eb%8c%80%ed%81%ac%ea%b8%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- file upload로 들어오는 data를 처리하는 객체 --&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;bean&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;multipartResolver&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;org.springframework.web.multipart.commons.CommonsMultipartResolver&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;maxUploadSize&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10485760&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/property&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;servlet-context.xml bean 등록 설정
 &lt;div id="servlet-contextxml-bean-등록-설정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#servlet-contextxml-bean-%eb%93%b1%eb%a1%9d-%ec%84%a4%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--파일 업로드 관련 Beans 설정 --&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;beans:bean&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;multipartResolver&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;org.springframework.web.multipart.commons.CommonsMultipartResolver&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;beans:property&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;maxUploadSize&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10485760&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/beans:property&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/beans:bean&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 서버의 파일 저장 경로 설정 --&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;beans:bean&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;uploadPath&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;java.lang.String&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;beans:constructor-arg&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;C:\\resources\\upload&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/beans:constructor-arg&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/beans:bean&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;이후
 &lt;div id="이후" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%ed%9b%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;이전과 같이, NoticeDAO (persistence) =&amp;gt; noticeMapper =&amp;gt; NoticeEDAOImpl =&amp;gt; Service 순으로 코딩해 나간다&lt;/p&gt;</description></item><item><title>3.1 로그인</title><link>https://log.j2234.cc/posts/velog/072-3.1-%EB%A1%9C%EA%B7%B8%EC%9D%B8/</link><pubDate>Tue, 03 Jan 2023 11:18:30 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/072-3.1-%EB%A1%9C%EA%B7%B8%EC%9D%B8/</guid><description>&lt;h2 class="relative group"&gt;로그인 기능 구현
 &lt;div id="로그인-기능-구현" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%a1%9c%ea%b7%b8%ec%9d%b8-%ea%b8%b0%eb%8a%a5-%ea%b5%ac%ed%98%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;유저 테이블 생성
 &lt;div id="유저-테이블-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9c%a0%ec%a0%80-%ed%85%8c%ec%9d%b4%eb%b8%94-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TBL_USER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UPW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UPOINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;USID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;UserVO, LoginDTO 처리
 &lt;div id="uservo-logindto-처리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#uservo-logindto-%ec%b2%98%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;VO와 DTO의 차이점?&lt;/p&gt;</description></item><item><title>3 CRUD</title><link>https://log.j2234.cc/posts/velog/073-3-crud/</link><pubDate>Tue, 03 Jan 2023 10:40:33 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/073-3-crud/</guid><description>&lt;p&gt;&lt;em&gt;간단한 계시판 만들기&lt;/em&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;개발 목표
 &lt;div id="개발-목표" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b0%9c%eb%b0%9c-%eb%aa%a9%ed%91%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;등록 화면 구현, DB에 등록&lt;/li&gt;
&lt;li&gt;등록 결과 확인, 목록 이동, 전체 목록&lt;/li&gt;
&lt;li&gt;상세보기&lt;/li&gt;
&lt;li&gt;수정페이지 이동, DB 수정&lt;/li&gt;
&lt;li&gt;삭제&lt;/li&gt;
&lt;li&gt;페이징, 검색&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;DB생성
 &lt;div id="db생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#db%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TBL_BOARD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BNO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TITLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CONTENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WRITER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REGDATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;DATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYSDATE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VIEWCNT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BNO&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQUENCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQ_BOARD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;START&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;작업 순서
 &lt;div id="작업-순서" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9e%91%ec%97%85-%ec%88%9c%ec%84%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;테이블을 담을 BoardVO 클래스 작성 (domain)&lt;/li&gt;
&lt;li&gt;BoardDAO인터페이스 작성 (persistence)&lt;/li&gt;
&lt;li&gt;BoardMapper.xml 작성 (mapper)&lt;/li&gt;
&lt;li&gt;BoardDAOImpl 구현체 작성 (persistence)&lt;/li&gt;
&lt;li&gt;BoardService, 구현체 작성 (서비스는 생략가능)&lt;/li&gt;
&lt;li&gt;Boardcontroller에서, jsp와 서비스를 이어줌&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 class="relative group"&gt;페이징, 검색
 &lt;div id="페이징-검색" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%8e%98%ec%9d%b4%ec%a7%95-%ea%b2%80%ec%83%89" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;페이징
 &lt;div id="페이징" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%8e%98%ec%9d%b4%ec%a7%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;blockquote&gt;&lt;p&gt;오라클이면 rownum, mysql이면 limit을 이용해 구현&lt;/p&gt;</description></item><item><title>2.1 Spring + MyBatis</title><link>https://log.j2234.cc/posts/velog/074-2.1-spring-+-mybatis/</link><pubDate>Mon, 02 Jan 2023 20:54:19 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/074-2.1-spring-+-mybatis/</guid><description>&lt;h2 class="relative group"&gt;코딩 순서
 &lt;div id="코딩-순서" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%bd%94%eb%94%a9-%ec%88%9c%ec%84%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;테이블 생성 및 개발 준비&lt;/li&gt;
&lt;li&gt;도메인 객체의 설계 및 클래스 작성&lt;/li&gt;
&lt;li&gt;DAO 인터페이스 작성&lt;/li&gt;
&lt;li&gt;XML Mapper의 생성과 SQL문 작성&lt;/li&gt;
&lt;li&gt;MyBatis에서 작성된 Mapper 인식하도록 설정&lt;/li&gt;
&lt;li&gt;DAO 구현 (DAOImpl)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;XML Mapper
 &lt;div id="xml-mapper" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#xml-mapper" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;Mybatis에서 SQL문을 저장하는 존재
&lt;code&gt;src/main/java/resources/mappers&lt;/code&gt;폴더에 저장&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;root-context.xml 추가
 &lt;div id="root-contextxml-추가" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#root-contextxml-%ec%b6%94%ea%b0%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;XML Mapper 인식 위해 설정 추가&lt;/p&gt;</description></item><item><title>2.Spring MVC</title><link>https://log.j2234.cc/posts/velog/075-2.spring-mvc/</link><pubDate>Mon, 02 Jan 2023 20:46:40 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/075-2.spring-mvc/</guid><description>&lt;h2 class="relative group"&gt;MVC란?
 &lt;div id="mvc란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mvc%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;MODEL - VIEW - Controller&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;Model
 &lt;div id="model" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#model" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;데이터를 가진 객체&lt;/li&gt;
&lt;li&gt;컨트롤러와 뷰에 통보&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;View
 &lt;div id="view" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#view" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;HTML/CSS/JS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Controller
 &lt;div id="controller" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#controller" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;사용자의 접근에 따라 Model을 만들고, 이를 View에 반영시켜 사용자에게 전달&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Spring MVC
 &lt;div id="spring-mvc" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#spring-mvc" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;servlet-context.xml
 &lt;div id="servlet-contextxml" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#servlet-contextxml" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;appServlet폴더 내의, MVC 설정만 분리하기 위한 파일&lt;/p&gt;</description></item><item><title>1.1 MyBatis+Oracle 설정</title><link>https://log.j2234.cc/posts/velog/076-1.1-mybatis+oracle-%EC%84%A4%EC%A0%95/</link><pubDate>Mon, 02 Jan 2023 20:10:14 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/076-1.1-mybatis+oracle-%EC%84%A4%EC%A0%95/</guid><description>&lt;h2 class="relative group"&gt;MyBatis란?
 &lt;div id="mybatis란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mybatis%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;스프링과 DB를 이어주는 중간다리 역활&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;pom.xml 라이브러리 추가
 &lt;div id="pomxml-라이브러리-추가" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pomxml-%eb%9d%bc%ec%9d%b4%eb%b8%8c%eb%9f%ac%eb%a6%ac-%ec%b6%94%ea%b0%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;mybatis
 &lt;div id="mybatis" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mybatis" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.mybatis&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;mybatis&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.4.1&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;mybatis-spring
 &lt;div id="mybatis-spring" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mybatis-spring" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.mybatis&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;mybatis-spring&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.3.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;spring-jdbc
 &lt;div id="spring-jdbc" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#spring-jdbc" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-jdbc&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${org.springframework-version}&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;spring-test
 &lt;div id="spring-test" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#spring-test" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-test&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${org.springframework-version}&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>1. INIT</title><link>https://log.j2234.cc/posts/velog/077-1.-init/</link><pubDate>Mon, 02 Jan 2023 19:50:29 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/077-1.-init/</guid><description>&lt;p&gt;&lt;em&gt;STS3사용&lt;/em&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;Spring MVC PROJECT 기본 구조
 &lt;div id="spring-mvc-project-기본-구조" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#spring-mvc-project-%ea%b8%b0%eb%b3%b8-%ea%b5%ac%ec%a1%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;/src/main/java =&amp;gt; &lt;code&gt;개발되는 Java 코드의 경로&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;src/main/resource =&amp;gt; &lt;code&gt;서버실행에 필요한 파일 경로&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;src/main/webapp/WEB-INF&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/spring=&amp;gt;&lt;code&gt;스프링 설정 파일 경로&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;/views =&amp;gt;&lt;code&gt;JSP파일 경로&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;src/test/* =&amp;gt; &lt;code&gt;테스트 전용 경로&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pom.xml =&amp;gt;&lt;code&gt;Maven 설정 파일&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;추가 설정
 &lt;div id="추가-설정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%b6%94%ea%b0%80-%ec%84%a4%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Properites-&amp;gt;Maven-&amp;gt;Project facts&lt;/code&gt; Java 버전 변경&lt;/li&gt;
&lt;li&gt;Tomcat 설치 후
&lt;code&gt;Windows→ Preferences → Server → Runtime Environments → Add&lt;/code&gt;
3.&lt;code&gt;Servers→ Tomcat서버 폴더 → server.xml Connector 포트 8181&lt;/code&gt; 변경(안하면 충돌)
4.&lt;a href="https://velog.io/@jiheon2234/1.1-MyBatisOracle-%EC%84%A4%EC%A0%95" target="_blank" rel="noreferrer"&gt;스프링+MyBatis+Oracle 설정&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>FirstSpring</title><link>https://log.j2234.cc/posts/velog/078-firstspring/</link><pubDate>Mon, 02 Jan 2023 19:31:55 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/078-firstspring/</guid><description>&lt;h2 class="relative group"&gt;처음으로 해보는 스프링
 &lt;div id="처음으로--해보는-스프링" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%b2%98%ec%9d%8c%ec%9c%bc%eb%a1%9c--%ed%95%b4%eb%b3%b4%eb%8a%94-%ec%8a%a4%ed%94%84%eb%a7%81" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;지금까지 python Django를 사용한 웹 개발만 해봤는데, 취업을 위해 스프링 프레임워크를 공부하고자 한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;환경
 &lt;div id="환경" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%99%98%ea%b2%bd" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;name&lt;/th&gt;
 &lt;th&gt;desc&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;OS&lt;/td&gt;
 &lt;td&gt;Window10&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;JAVA&lt;/td&gt;
 &lt;td&gt;JDK 1.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DB&lt;/td&gt;
 &lt;td&gt;Oracle&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Spring&lt;/td&gt;
 &lt;td&gt;Spring Legacy&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Server&lt;/td&gt;
 &lt;td&gt;Tomcat9.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;IDE&lt;/td&gt;
 &lt;td&gt;STS3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SQL&lt;/td&gt;
 &lt;td&gt;Mybatis&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>bandit33(미완)</title><link>https://log.j2234.cc/posts/velog/079-bandit33%EB%AF%B8%EC%99%84/</link><pubDate>Wed, 07 Dec 2022 14:26:52 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/079-bandit33%EB%AF%B8%EC%99%84/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit33@bandit.labs.overthewire.org -p 2220 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# odHo63fHiFqcWWJG9rLiLDtPm45KzUKy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;At this moment, level 34 does not exist yet.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;아직 만들어지 않은듯?
나중에 추가되면 풀어봄&lt;/p&gt;
&lt;p&gt;&amp;ndash;끝&amp;ndash;&lt;/p&gt;</description></item><item><title>bandit32</title><link>https://log.j2234.cc/posts/velog/080-bandit32/</link><pubDate>Wed, 07 Dec 2022 14:25:09 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/080-bandit32/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit32@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#rmCBvG56y58BXzv98yZGdO7ATVL5dW8y&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;After all this git stuff its time for another escape. Good luck!&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;??&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;시작하자마자 &lt;code&gt;WELCOME TO THE UPPERCASE SHELL&lt;/code&gt; 메세지가 나온다
모든 글자가 대문자로 처리되는듯 하다&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$0'을&lt;/code&gt; 입력하면 쉘로 정상 실행된다 ?&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat /etc/bandit_pass/bandit33
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;odHo63fHiFqcWWJG9rLiLDtPm45KzUKy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>bandit31</title><link>https://log.j2234.cc/posts/velog/081-bandit31/</link><pubDate>Wed, 07 Dec 2022 13:27:14 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/081-bandit31/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit31@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#OoffzGDlzhAlerFJ2cAiz1D41JW1Mhmt&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;There is a git repository at ssh://bandit31-git@localhost/home/bandit31-git/repo. The password for the user bandit31-git is the same as for the user bandit31.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;이전과 같dl git에서 찾으면 된다&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h1 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone ssh://bandit31-git@localhost:2220/home/bandit31-git/repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Reame.md&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bandit31@bandit:/tmp/tmp.cYOLY9Uwqg/repo$ cat README.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This &lt;span class="nb"&gt;time&lt;/span&gt; your task is to push a file to the remote repository.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Details:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; File name: key.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Content: &lt;span class="s1"&gt;&amp;#39;May I come in?&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Branch: master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;이번에는 remote repository에 파일을 푸시하라고 나온다
May I come in? 이라는 내용의 key.txt를 만들고 add한다&lt;/p&gt;</description></item><item><title>bandit30</title><link>https://log.j2234.cc/posts/velog/082-bandit30/</link><pubDate>Wed, 07 Dec 2022 12:55:48 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/082-bandit30/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit30@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#xbhV3HpNGlTIdnjUrdAlPzc2L6y9EOnS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;There is a git repository at ssh://bandit30-git@localhost/home/bandit30-git/repo. The password for the user bandit30-git is the same as for the user bandit30.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;이전과 같음&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#/tmp안에서 진행&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone ssh://bandit30-git@localhost:2220/home/bandit30-git/repo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#xbhV3HpNGlTIdnjUrdAlPzc2L6y9EOnS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;이번엔 로그도, 브랜치도 따로 없다&lt;/p&gt;
&lt;p&gt;git show-ref명령어가 있는데,
이는 커밋을 간접적으로 참조하는?? 방식이라고 한다 정확히는 모르겠다&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bandit30@bandit:/tmp/tmp.1hIj1KUVPA/repo$ git show-ref
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0019ee8c6d6fd1dba2d73666b9e6339ad3314ddb refs/heads/master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0019ee8c6d6fd1dba2d73666b9e6339ad3314ddb refs/remotes/origin/HEAD
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0019ee8c6d6fd1dba2d73666b9e6339ad3314ddb refs/remotes/origin/master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;831aac2e2341f009e40e46392a4f5dd318483019 refs/tags/secret&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git show refs/tags/secret
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#OoffzGDlzhAlerFJ2cAiz1D41JW1Mhmt&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>bandit29</title><link>https://log.j2234.cc/posts/velog/083-bandit29/</link><pubDate>Wed, 07 Dec 2022 12:38:37 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/083-bandit29/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit29@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#tQKvmcwNYcFS6vmPHIUSI3ShmsrQZK8S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;There is a git repository at ssh://bandit29-git@localhost/home/bandit29-git/repo. The password for the user bandit29-git is the same as for the user bandit29.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;ssh://bandit29-git@localhost/home/bandit29-git/repo에 git 저장소가 있습니다. 사용자 밴디트 29-git의 암호는 사용자 밴디트 29의 암호와 동일합니다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;정보
 &lt;div id="정보" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%95%eb%b3%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;git checkout [branch]를 통해서 branch를 바꿀 수 있다&lt;/li&gt;
&lt;li&gt;git log -p로 수정된것만 볼 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#mktemp -d로 임시폴더만들고 이동해서 진행&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh://bandit29-git@localhost:2220/home/bandit29-git/repo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#tQKvmcwNYcFS6vmPHIUSI3ShmsrQZK8S&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout dev &lt;span class="c1"&gt;# dev 브랜치로 변경&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bandit29@bandit:/tmp/tmp.pTgWuyrMjx/repo$ git log -p
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;commit 4177db8d2e8f795a23b911550ee864880ae643ff (HEAD -&amp;gt; dev, origin/dev)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Author: Morla Porla &amp;lt;morla@overthewire.org&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Date: Sat Dec 3 08:14:07 2022 +0000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; add data needed for development
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;diff --git a/README.md b/README.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;index 1af21d3..a4b1cf1 100644
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--- a/README.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+++ b/README.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@@ -4,5 +4,5 @@ Some notes for bandit30 of bandit.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ## credentials
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - username: bandit30
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-- password: &amp;lt;no passwords in production!&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+- password: xbhV3HpNGlTIdnjUrdAlPzc2L6y9EOnS&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>bandit28 (소름)</title><link>https://log.j2234.cc/posts/velog/084-bandit28-%EC%86%8C%EB%A6%84/</link><pubDate>Tue, 06 Dec 2022 21:24:45 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/084-bandit28-%EC%86%8C%EB%A6%84/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit28@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AVanL161y9rsbcJIsFHuw35rjaOM19nR&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;There is a git repository at ssh://bandit28-git@localhost/home/bandit28-git/repo. The password for the user bandit28-git is the same as for the user bandit28.
Clone the repository and find the password for the next level.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;ssh://bandit28-git@localhost/home/bandit28-git/repo에 git 저장소가 있습니다. 사용자 밴디트 28-git의 암호는 사용자 밴디트 28의 암호와 동일합니다.
리포지토리를 복제하고 다음 수준의 암호를 찾습니다&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;정보
 &lt;div id="정보" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%95%eb%b3%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;mktmp는 /tmp/에, temp는 지정한 위치에 임시 파일을 만든다&lt;/li&gt;
&lt;li&gt;-d 옵션으로 디렉토리를 임시로 만들 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# mktemp -d로 임시폴더를 만들고 거기서 진행&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone ssh://bandit28-git@localhost:2220/home/bandit28-git/repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;md파일을 찍어보면&lt;/p&gt;</description></item><item><title>bandit27</title><link>https://log.j2234.cc/posts/velog/085-bandit27/</link><pubDate>Tue, 06 Dec 2022 20:59:51 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/085-bandit27/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit27@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#YnQpBuifNMas1hcUFk70ZmqkhUU2EuaS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;There is a git repository at ssh://bandit27-git@localhost/home/bandit27-git/repo. The password for the user bandit27-git is the same as for the user bandit27.
Clone the repository and find the password for the next level.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;ssh://bandit27-git@localhost/home/bandit27-git/repo에 git 저장소가 있습니다. 사용자 밴디트 27-git의 암호는 사용자 밴디트 27의 암호와 동일합니다.
리포지토리를 복제하고 다음 수준의 암호를 찾습니다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;자꾸 에러나서 인터넷을 찾아보았더니 서버정책이 변경됬단다
&lt;strong&gt;포트를 꼭 추가해줘야한다&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>bandit26</title><link>https://log.j2234.cc/posts/velog/086-bandit26/</link><pubDate>Tue, 06 Dec 2022 19:09:41 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/086-bandit26/</guid><description>&lt;p&gt;bandit25에서 얻은 쉘에서 접속해야한다&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Good job getting a shell! Now hurry and grab the password for bandit27!
Commands you may need to solve this level&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;칭찬받았다 :)&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;ls를 쳐보면, bandit27-do라는 파일이 보인다
권한이 다음과 같다&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rwsr-x--- &lt;span class="m"&gt;1&lt;/span&gt; bandit27 bandit26 &lt;span class="m"&gt;14876&lt;/span&gt; Dec &lt;span class="m"&gt;3&lt;/span&gt; 08:14 bandit27-do&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;x자리에 s가 보이는데, 이는 setuid를 뜻한다
다음과 같이, 파일 소유자의 권한을 빌릴 수 있다&lt;/p&gt;</description></item><item><title>bandit25</title><link>https://log.j2234.cc/posts/velog/087-bandit25/</link><pubDate>Tue, 06 Dec 2022 18:46:19 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/087-bandit25/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit25@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#p7TaowMYrmu23Ol8hiZh9UvD0O9hpx8d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;Logging in to bandit26 from bandit25 should be fairly easy… The shell for user bandit26 is not /bin/bash, but something else. Find out what it is, how it works and how to break out of it.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;밴디트 25에서 밴디트 26에 로그인하는 것은 꽤 쉬울 것입니다. 사용자 밴디트 26의 셸은 /bin/bash가 아니라 다른 것이다. 그것이 무엇인지, 그것이 어떻게 작동하는지, 그리고 그것을 탈출하는 방법을 알아보세요.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;먼져 홈에있는 sshkey를 통해 접속해보자&lt;/p&gt;</description></item><item><title>bandit24</title><link>https://log.j2234.cc/posts/velog/088-bandit24/</link><pubDate>Tue, 06 Dec 2022 00:14:05 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/088-bandit24/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit24@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;A daemon is listening on port 30002 and will give you the password for bandit25 if given the password for bandit24 and a secret numeric 4-digit pincode. There is no way to retrieve the pincode except by going through all of the 10000 combinations, called brute-forcing.
You do not need to create new connections each time&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;이전암호 + 0000~9999 의 모든 조합을 30002번포트에 보내라 맞으면 비번을 준다&lt;/p&gt;</description></item><item><title>bandit23</title><link>https://log.j2234.cc/posts/velog/089-bandit23/</link><pubDate>Thu, 01 Dec 2022 20:45:40 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/089-bandit23/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit23@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#QYw0Y2aiA672PsMmh9puTQuhoz8SyR2G&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;A program is running automatically at regular intervals from cron, the time-based job scheduler. Look in /etc/cron.d/ for the configuration and see what command is being executed.
NOTE: This level requires you to create your own first shell-script. This is a very big step and you should be proud of yourself when you beat this level!
NOTE 2: Keep in mind that your shell script is removed once executed, so you may want to keep a copy around…&lt;/p&gt;</description></item><item><title>bandit22</title><link>https://log.j2234.cc/posts/velog/090-bandit22/</link><pubDate>Thu, 01 Dec 2022 17:45:04 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/090-bandit22/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit22@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#WdDozAdTM2z9DiFEQ2mGlwngMfj4EZff&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;A program is running automatically at regular intervals from cron, the time-based job scheduler. Look in /etc/cron.d/ for the configuration and see what command is being executed.
NOTE: Looking at shell scripts written by other people is a very useful skill. The script for this level is intentionally made easy to read. If you are having problems understanding what it does, try executing it to see the debug information it prints.&lt;/p&gt;</description></item><item><title>bandit21</title><link>https://log.j2234.cc/posts/velog/091-bandit21/</link><pubDate>Thu, 01 Dec 2022 17:14:33 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/091-bandit21/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit21@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#NvEJF7oVjkddltPSrdKEFOllh9V1IBcq&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;A program is running automatically at regular intervals from cron, the time-based job scheduler. Look in /etc/cron.d/ for the configuration and see what command is being executed.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;프로그램은 시간 기반 작업 스케줄러인 cron에서 일정한 간격으로 자동으로 실행됩니다. /etc/cron.d/에서 구성을 확인하고 실행 중인 명령을 확인합니다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;정보
 &lt;div id="정보" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%95%eb%b3%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;cron이란?&lt;/p&gt;</description></item><item><title>bandit20</title><link>https://log.j2234.cc/posts/velog/092-bandit20/</link><pubDate>Wed, 30 Nov 2022 13:35:54 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/092-bandit20/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit20@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#VxCazJaVykI6W36BkBU0mJTCM8rR95XT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;There is a setuid binary in the homedirectory that does the following: it makes a connection to localhost on the port you specify as a commandline argument. It then reads a line of text from the connection and compares it to the password in the previous level (bandit20). If the password is correct, it will transmit the password for the next level&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;홈 디렉토리에는 setuid 바이너리가 있으며, 이 바이너리는 명령줄 인수로 지정한 포트의 localhost에 연결합니다. 그런 다음 연결에서 텍스트 한 줄을 읽고 이전 수준의 암호(bandit20)와 비교합니다. 암호가 올바르면 다음 단계의 암호를 전송합니다.&lt;/p&gt;</description></item><item><title>bandit19</title><link>https://log.j2234.cc/posts/velog/093-bandit19/</link><pubDate>Wed, 30 Nov 2022 13:06:27 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/093-bandit19/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit19@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#awhqfNnAbc1naukrpqDYcF95h7HoMTrC&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;To gain access to the next level, you should use the setuid binary in the homedirectory. Execute it without arguments to find out how to use it. The password for this level can be found in the usual place (/etc/bandit_pass), after you have used the setuid binary.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;setuid를 사용한 후, /etc/bandit_pass 에서 비밀번호를 찾아라&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;정보
 &lt;div id="정보" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%95%eb%b3%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;setuid란?&lt;/p&gt;</description></item><item><title>bandit18</title><link>https://log.j2234.cc/posts/velog/094-bandit18/</link><pubDate>Wed, 30 Nov 2022 12:43:26 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/094-bandit18/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit18@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level is stored in a file readme in the homedirectory. Unfortunately, someone has modified .bashrc to log you out when you log in with SSH.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;readme 파일을 읽으면 된다. 근데 누가 bashrc를 만져서, 접속하자마자 로그아웃된다&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;시작하자마자 연결이 끊긴다
ssh로 접속할때, 실행할 명령어를 같이 보내주면 된다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit18@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cat readme&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#awhqfNnAbc1naukrpqDYcF95h7HoMTrC&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>bandit17</title><link>https://log.j2234.cc/posts/velog/095-bandit17/</link><pubDate>Tue, 29 Nov 2022 21:49:02 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/095-bandit17/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit17@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#VwOSWtCA7lRKkTfbr2IDh6awj9RNZM5e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;There are 2 files in the homedirectory: passwords.old and passwords.new. The password for the next level is in passwords.new and is the only line that has been changed between passwords.old and passwords.new
NOTE: if you have solved this level and see ‘Byebye!’ when trying to log into bandit18, this is related to the next level, bandit19&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;password.old와 password.new 파일에서 다른 줄을 찾아라&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;hr&gt;

&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;정보
 &lt;div id="정보" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%95%eb%b3%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;diff [file][file]&lt;/code&gt;&lt;/p&gt;</description></item><item><title>bandit16</title><link>https://log.j2234.cc/posts/velog/096-bandit16/</link><pubDate>Tue, 29 Nov 2022 12:44:38 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/096-bandit16/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit16@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;##JQttfApK4SeyHwDlI9SXGR50qclOAil1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The credentials for the next level can be retrieved by submitting the password of the current level to a port on localhost in the range 31000 to 32000. First find out which of these ports have a server listening on them. Then find out which of those speak SSL and which don’t. There is only 1 server that will give the next credentials, the others will simply send back to you whatever you send to it.&lt;/p&gt;</description></item><item><title>bandit15</title><link>https://log.j2234.cc/posts/velog/097-bandit15/</link><pubDate>Tue, 29 Nov 2022 11:48:12 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/097-bandit15/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit15@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#jN2kgmIXJ6fShzhT2avhotn4Zcka6tnt&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level can be retrieved by submitting the password of the current level to port 30001 on localhost using SSL encryption.
Helpful note: Getting “HEARTBEATING” and “Read R BLOCK”? Use -ign_eof and read the “CONNECTED COMMANDS” section in the manpage. Next to ‘R’ and ‘Q’, the ‘B’ command also works in this version of that command…&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;다음 수준의 암호는 SSL 암호화를 사용하여 로컬 호스트의 포트 30001에 현재 수준의 암호를 제출하여 검색할 수 있습니다.&lt;/p&gt;</description></item><item><title>bandit14</title><link>https://log.j2234.cc/posts/velog/098-bandit14/</link><pubDate>Mon, 28 Nov 2022 16:52:12 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/098-bandit14/</guid><description>&lt;p&gt;&lt;a href="https://overthewire.org/wargames/bandit/bandit15.html" target="_blank" rel="noreferrer"&gt;링크&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit14@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#fGrHPx402xGC7U7rXKDaxiWFTOiF0ENq&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level can be retrieved by submitting the password of the current level to port 30000 on localhost.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;현재 레벨의 비밀번호를 localhost의 포트 30000에 제출해라?&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;정보
 &lt;div id="정보" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a0%95%eb%b3%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;nc(netcat) 명령어를 통하여 네트워크에 데이터를 읽고 쓸 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nc localhost &lt;span class="m"&gt;3000&lt;/span&gt; &lt;span class="c1"&gt;#3000번 포트에 접속&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls -alths &lt;span class="c1"&gt;#임의의 명령어&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrong! Please enter the correct current password
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nc localhost &lt;span class="m"&gt;30000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# fGrHPx402xGC7U7rXKDaxiWFTOiF0ENq # 현재비밀번호&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Correct!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;jN2kgmIXJ6fShzhT2avhotn4Zcka6tnt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>bandit13</title><link>https://log.j2234.cc/posts/velog/099-bandit13/</link><pubDate>Mon, 28 Nov 2022 16:18:57 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/099-bandit13/</guid><description>&lt;p&gt;&lt;a href="https://overthewire.org/wargames/bandit/bandit14.html" target="_blank" rel="noreferrer"&gt;링크&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit13@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#wbWdlBxEir4CaE8LaPhauuOo6pwRmrDw&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level is stored in /etc/bandit_pass/bandit14 and can only be read by user bandit14. For this level, you don’t get the next password, but you get a private SSH key that can be used to log into the next level. Note: localhost is a hostname that refers to the machine you are working on&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;다음 레벨의 암호는 /etc/bandit_pass/bandit14에 저장되며 사용자 밴디트14만 읽을 수 있습니다. 이 수준에서는 다음 암호가 아니라 다음 수준에 로그인하는 데 사용할 수 있는 개인 SSH 키가 제공됩니다. 참고: localhost는 작업 중인 시스템을 나타내는 호스트 이름입니다.&lt;/p&gt;</description></item><item><title>bandit12</title><link>https://log.j2234.cc/posts/velog/100-bandit12/</link><pubDate>Wed, 23 Nov 2022 21:57:11 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/100-bandit12/</guid><description>&lt;h2 class="relative group"&gt;lv 12
 &lt;div id="lv-12" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv-12" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://overthewire.org/wargames/bandit/bandit13.html" target="_blank" rel="noreferrer"&gt;링크&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit12@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#JVNBBFSmZwKKOP0XbFXOoW8chDz5yVRv&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level is stored in the file data.txt, which is a hexdump of a file that has been repeatedly compressed. For this level it may be useful to create a directory under /tmp in which you can work using mkdir. For example: mkdir /tmp/myname123. Then copy the datafile using cp, and rename it using mv (read the manpages!)&lt;/p&gt;</description></item><item><title>bandit 11</title><link>https://log.j2234.cc/posts/velog/101-bandit-11/</link><pubDate>Wed, 23 Nov 2022 20:48:03 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/101-bandit-11/</guid><description>&lt;h2 class="relative group"&gt;lv 11
 &lt;div id="lv-11" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv-11" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://overthewire.org/wargames/bandit/bandit12.html" target="_blank" rel="noreferrer"&gt;링크&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level is stored in the file data.txt, where all lowercase (a-z) and uppercase (A-Z) letters have been rotated by 13 positions&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;대소문자가 13자리씩 밀려서 나타나있다 (카이사르암호)&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;풀이
 &lt;div id="풀이" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%92%80%ec%9d%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;파이썬으로 ord()를 가지고 풀면 풀 수 있을듯?&lt;/em&gt;
근데 그럼 의미가 없는것같아서 인터넷을 참조했다.&lt;/p&gt;</description></item><item><title>bandit10</title><link>https://log.j2234.cc/posts/velog/102-bandit10/</link><pubDate>Wed, 23 Nov 2022 20:29:42 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/102-bandit10/</guid><description>&lt;h2 class="relative group"&gt;lv10
 &lt;div id="lv10" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv10" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://overthewire.org/wargames/bandit/bandit11.html" target="_blank" rel="noreferrer"&gt;링크&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit10@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#EN632PlfYiZbn3PhVK3XOGSlNInNE00t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level is stored in the file data.txt, which contains base64 encoded data&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;data.txt가 base64로 인코딩되어있다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;가볍게 디코딩해주면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bandit10@bandit:~$ cat data.txt &lt;span class="p"&gt;|&lt;/span&gt; base64 --decode
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#The password is 6zPeziLdR2RKNdNYFNb6nVCKzphlXHBM&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;인터넷을 찾아보니깐 더 좋은 방법이 있었다.&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bandit10@bandit:~$ base64 --decode data.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>bandit 9</title><link>https://log.j2234.cc/posts/velog/103-bandit-9/</link><pubDate>Tue, 22 Nov 2022 22:22:15 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/103-bandit-9/</guid><description>&lt;p&gt;&lt;a href="https://overthewire.org/wargames/bandit/bandit10.html" target="_blank" rel="noreferrer"&gt;링크&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit9@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#EN632PlfYiZbn3PhVK3XOGSlNInNE00t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level is stored in the file data.txt in one of the few human-readable strings, preceded by several ‘=’ characters.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;여러&amp;rsquo;=&amp;rsquo; 앞에있는 사람이 읽을수 있는 문자가 비밀번호임&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ol&gt;
&lt;li&gt;strings를 통해, 사람이 읽을 수 있는 문자열만 출력&lt;/li&gt;
&lt;li&gt;grep- E 를 통해(regex) =이 여러번 반복되는 문자열 출력&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bandit9@bandit:~$ strings data.txt &lt;span class="p"&gt;|&lt;/span&gt; grep -E &lt;span class="o"&gt;={&lt;/span&gt;3&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#========== the&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#bu========== password&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#4iu========== is ㅋㅋㅋ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#========== G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>bandit8</title><link>https://log.j2234.cc/posts/velog/104-bandit8/</link><pubDate>Tue, 22 Nov 2022 22:03:52 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/104-bandit8/</guid><description>&lt;h2 class="relative group"&gt;lv8
 &lt;div id="lv8" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv8" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://overthewire.org/wargames/bandit/bandit9.html" target="_blank" rel="noreferrer"&gt;링크&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit8@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#TESKZC0XvTetK0S9xNwm25STk5iWrBvP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level is stored in the file data.txt and is the only line of text that occurs only once&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;단 한번만 등장하는 텍스트를 찾아라&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ol&gt;
&lt;li&gt;sort로 정렬&lt;/li&gt;
&lt;li&gt;uniq -u로 중복제거&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bandit8@bandit:~$ sort data.txt &lt;span class="p"&gt;|&lt;/span&gt; uniq -u
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#EN632PlfYiZbn3PhVK3XOGSlNInNE00t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;uniq
 &lt;div id="uniq" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#uniq" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기본적으로 중복되는건 하나만 표시함 (sort랑 같이쓰임)&lt;/li&gt;
&lt;li&gt;-u 중복되지 않는것만 표시함&lt;/li&gt;
&lt;li&gt;-d 중복된것만 표시&lt;/li&gt;
&lt;li&gt;-c 중복된개수 세기&lt;/li&gt;
&lt;li&gt;-i 대소문자 무시&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>리눅스 기초 설정1</title><link>https://log.j2234.cc/posts/velog/105-%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-%EC%84%A4%EC%A0%951/</link><pubDate>Tue, 22 Nov 2022 18:15:00 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/105-%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-%EC%84%A4%EC%A0%951/</guid><description>&lt;h2 class="relative group"&gt;초기 sudo 비밀번호 설정하는 방법
 &lt;div id="초기-sudo-비밀번호-설정하는-방법" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%b4%88%ea%b8%b0-sudo-%eb%b9%84%eb%b0%80%eb%b2%88%ed%98%b8-%ec%84%a4%ec%a0%95%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo passwd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#\n&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&amp;#39;비밀번호&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;mysql 초기 설정
 &lt;div id="mysql-초기-설정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mysql-%ec%b4%88%ea%b8%b0-%ec%84%a4%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysql_secure_installation &lt;span class="c1"&gt;#으로 root비밀번호 설정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;아이디&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;localhost&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identified&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;비밀번호&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;로컬&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;아이디&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identified&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;비밀번호&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;로컬빼고다&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;grant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;privileges&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;localhost&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identified&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;비밀번호&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;grant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;option&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;```&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="err"&gt;모든&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;데이터베이스에&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;대한&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;접근을&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;허용한다는&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;의미로&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;절대&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;하면&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;안됨&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;나는연습이니까&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ㅎㅎ&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>bandit lv 6,7</title><link>https://log.j2234.cc/posts/velog/106-bandit-lv-67/</link><pubDate>Mon, 21 Nov 2022 12:52:28 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/106-bandit-lv-67/</guid><description>&lt;p&gt;&lt;em&gt;어려워진다&lt;/em&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;lv6
 &lt;div id="lv6" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv6" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;조건
 &lt;div id="조건" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a1%b0%ea%b1%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;owned by user bandit7&lt;/li&gt;
&lt;li&gt;owned by group bandit6&lt;/li&gt;
&lt;li&gt;33 bytes in size&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;지금까지는 find를 이름으로만 찾았는데, 옵션이 너무 많다.
-size 33c -user bandit7 -group bandit6 -type f
에서 에러를 없앤다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit6@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#P4L4vucdmLnm8I7Vl7jG1ApGSfjYKqJU&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bandit6@bandit:~$ find / -size 33c -user bandit7 -type f -group bandit6 2&amp;gt;&amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#var/lib/dpkg/info/bandit7.password&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /var/lib/dpkg/info/bandit7.password
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# z7WtoNQU2XfjmMtWA8u5rN4vzqu4v99S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;lv7
 &lt;div id="lv7" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv7" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;
 &lt;div id="" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;The password for the next level is stored in the file data.txt next to the word millionth&lt;/p&gt;</description></item><item><title>bandit lv 1~5</title><link>https://log.j2234.cc/posts/velog/107-bandit-lv-1~5/</link><pubDate>Mon, 21 Nov 2022 11:48:59 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/107-bandit-lv-1~5/</guid><description>&lt;h2 class="relative group"&gt;lv1
 &lt;div id="lv1" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;-&lt;/code&gt;라는 파일을 읽어야 된다
그냥읽으면 안읽히므로 ./-로 읽어야한다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh bandit1@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#lv0 비번&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# cat ./-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#rRGizSaX8Mk1RTb1CNQoXTcYZWU6lgzi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;lv2
 &lt;div id="lv2" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv2" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;space in this filename&lt;/code&gt;이라는 파일을 읽어야한다.
이스케이프 문자를 활용한다 (또는 &amp;lsquo;&amp;lsquo;사용)&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh bandit2@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cat spaces&lt;span class="se"&gt;\ &lt;/span&gt;in&lt;span class="se"&gt;\ &lt;/span&gt;this&lt;span class="se"&gt;\ &lt;/span&gt;filename
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#aBZ0W5EmUfAf7kHTQeOwd8bauFJ2lAiG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;lv3
 &lt;div id="lv3" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lv3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;₩inher₩e이라는 폴더가 있는데 안에 아무것도 없다
ls -al로 숨김파일 &lt;code&gt;.hidden&lt;/code&gt;을 찾을 수 있다.&lt;/p&gt;</description></item><item><title>bandit lv0</title><link>https://log.j2234.cc/posts/velog/108-bandit-lv0/</link><pubDate>Mon, 21 Nov 2022 11:42:01 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/108-bandit-lv0/</guid><description>&lt;p&gt;재미있는걸 찾아서 해볼려고한다.
&lt;a href="https://overthewire.org/wargames/bandit/bandit0.html" target="_blank" rel="noreferrer"&gt;overthewire&lt;/a&gt; 라는 곳에서 제공하는 게임인데&lt;/p&gt;
&lt;p&gt;0단계를 풀면 1단계에 접근할 수 있는 게임으로 총 34단계이다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;0단계는 그냥 접속만 하면 되긴 하는데, 예전에 로그인해서
&lt;code&gt;host key verification failed&lt;/code&gt; 문제가 생겼다.&lt;/p&gt;
&lt;p&gt;이럴경우엔 ~./ssh의 known_host 파일에서
접속하려는 서버의 IP를 지워주면 재생성된다.&lt;/p&gt;
&lt;hr&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh bandit0@bandit.labs.overthewire.org -p &lt;span class="m"&gt;2220&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#bandit0 &amp;lt;=비번&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cat readme
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#NH2SXQwcBdpmTEzi3bvBHMM9H66vVXjL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>pip경로꼬였을때</title><link>https://log.j2234.cc/posts/velog/109-pip%EA%B2%BD%EB%A1%9C%EA%BC%AC%EC%98%80%EC%9D%84%EB%95%8C/</link><pubDate>Fri, 18 Nov 2022 00:11:35 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/109-pip%EA%B2%BD%EB%A1%9C%EA%BC%AC%EC%98%80%EC%9D%84%EB%95%8C/</guid><description>&lt;h1 class="relative group"&gt;pip경로 꼬였다면
 &lt;div id="pip경로-꼬였다면" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pip%ea%b2%bd%eb%a1%9c-%ea%bc%ac%ec%98%80%eb%8b%a4%eb%a9%b4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;주피터노트북 경로가 꼬여서, pip이 엉뚱한 곳에 설치된다면&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;executable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;로 현재 파이썬 경로를 알 수 있다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!&lt;span class="o"&gt;{&lt;/span&gt;sys.executable&lt;span class="o"&gt;}&lt;/span&gt; -m pip install pymysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;을 통해서 현재경로에 설치 가능하다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;인터넷에서 참고했는데 어서했는진 모르겠다.
제일좋은건 경로 다시잡아주는건데 귀찮다.&lt;/p&gt;</description></item><item><title>12015 가장긴증가하는부분수열2</title><link>https://log.j2234.cc/posts/2022-tistory/185-12015-%EA%B0%80%EC%9E%A5%EA%B8%B4%EC%A6%9D%EA%B0%80%ED%95%98%EB%8A%94%EB%B6%80%EB%B6%84%EC%88%98%EC%97%B42/</link><pubDate>Mon, 07 Nov 2022 16:56:47 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/185-12015-%EA%B0%80%EC%9E%A5%EA%B8%B4%EC%A6%9D%EA%B0%80%ED%95%98%EB%8A%94%EB%B6%80%EB%B6%84%EC%88%98%EC%97%B42/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/12015" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/12015&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;12015번: 가장 긴 증가하는 부분 수열 2첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000)www.acmicpc.net&lt;/p&gt;
&lt;p&gt;예전에 풀어봤던 문제인데, 풀어야 하는 방식이 다르다&lt;/p&gt;
&lt;p&gt;예전에는 모든 배열을 돌면서 n^2의 시간복잡도로 풀었는데, 여기서는 시간초과가 난다.&lt;/p&gt;
&lt;p&gt;따라서 2분탐색을 통해서 시간복잡도를 nlogn으로 줄여야 한다.&lt;/p&gt;
&lt;p&gt;먼져, 원 수열을 반복문에 넣어 기본적으로 부분 수열을 구해나가는데,&lt;/p&gt;
&lt;p&gt;현재 보고있는 원소가&lt;/p&gt;
&lt;p&gt;만일 현재 구한 부분수열의 마지막원소(젤큼) 보다 크다면, 그냥 부분수열에 append시켜주면 된다.&lt;/p&gt;</description></item><item><title>13904 과제</title><link>https://log.j2234.cc/posts/2022-tistory/184-13904-%EA%B3%BC%EC%A0%9C/</link><pubDate>Tue, 01 Nov 2022 23:06:26 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/184-13904-%EA%B3%BC%EC%A0%9C/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/13904" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/13904&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;13904번: 과제예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;2가지 풀이가 있음&lt;/p&gt;
&lt;p&gt;힙으로 푸는건 순회공연때 해봤으므로, 그리디로 풀어봄(정답코드참고함)&lt;/p&gt;
&lt;p&gt;먼져, 숙제를 무조건 w가 큰 순서로 정렬한다&lt;/p&gt;
&lt;p&gt;그리고, 가장 좋은경우&lt;/p&gt;
&lt;p&gt;즉 숙제를 할 수 있는 마지막 날에 숙제를 한다고 생각한다.&lt;/p&gt;
&lt;p&gt;만일, 숙제를 할 수 있는 마지막날에 이미 숙제를 했다면, day를 1씩 줄여나가면서 가능한 날짜를 찾는다&lt;/p&gt;</description></item><item><title>1654랜선자르기</title><link>https://log.j2234.cc/posts/2022-tistory/183-1654%EB%9E%9C%EC%84%A0%EC%9E%90%EB%A5%B4%EA%B8%B0/</link><pubDate>Tue, 18 Oct 2022 13:07:09 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/183-1654%EB%9E%9C%EC%84%A0%EC%9E%90%EB%A5%B4%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1654" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1654&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1654번: 랜선 자르기첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그www.acmicpc.net&lt;/p&gt;
&lt;p&gt;실버문제지만, 이분탐색 개념이 잘 안잡혀있어서 헷갈렸다.&lt;/p&gt;
&lt;p&gt;시간초과를 피하기 위해, 이분탐색을 써야한다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;1 과 가장 긴 랜선의 값을 start, end로 놓는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2.(start+end)//2 , 즉 시작과 끝의 중간점을 랜선의 길이 (mid)라고 설정한다.&lt;/p&gt;
&lt;p&gt;mid 길이로 만들 때, 조건을 검사하여 n개 이상의 수가 나온다면,최소 길이(start)를 mid+1 로 설정한다.&lt;/p&gt;</description></item><item><title>14267 회사문화1</title><link>https://log.j2234.cc/posts/2022-tistory/182-14267-%ED%9A%8C%EC%82%AC%EB%AC%B8%ED%99%941/</link><pubDate>Mon, 17 Oct 2022 19:46:40 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/182-14267-%ED%9A%8C%EC%82%AC%EB%AC%B8%ED%99%941/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14267" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14267&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14267번: 회사 문화 1영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하www.acmicpc.net&lt;/p&gt;
&lt;p&gt;dp와 트리구조를 이용해서 풀음&lt;/p&gt;
&lt;p&gt;리스트를 돌아가면서, 자기값에 자기 직속선배값을 더하면 됨&lt;/p&gt;
&lt;p&gt;오랫만에알고리즘푸는거라 시간이 많이 걸렸음&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlinen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())]&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;bfor&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>2407두용액</title><link>https://log.j2234.cc/posts/2022-tistory/181-2407%EB%91%90%EC%9A%A9%EC%95%A1/</link><pubDate>Tue, 13 Sep 2022 13:03:31 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/181-2407%EB%91%90%EC%9A%A9%EC%95%A1/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/source/49072104" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/source/49072104&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;로그인www.acmicpc.net&lt;/p&gt;
&lt;p&gt;투 포인터가 뭔지 궁금해서 풀이를 봤다.&lt;/p&gt;
&lt;p&gt;생각보다 간단했다.&lt;/p&gt;
&lt;p&gt;먼저 정렬된 리스트를가지고 한다.&lt;/p&gt;
&lt;p&gt;처음에는 리스트[0],[-1]을 가지고 한다. (a,b)&lt;/p&gt;
&lt;p&gt;우리의 목적은 0에 가장 가까운 값을 찾는것이다.&lt;/p&gt;
&lt;p&gt;만일 a+b가 이전의 정답보다 작다면&lt;/p&gt;
&lt;p&gt;정답을 교체해준다.&lt;/p&gt;
&lt;p&gt;그리고 a+b가 0보다 크다면, 더 작은 수가 필요할 것이므로 end에서 1을 빼서 다시 계산,&lt;/p&gt;
&lt;p&gt;반대라면 더 큰 수가 필요하므로 start+1해서 다시 계산한다.&lt;/p&gt;
&lt;p&gt;start와 end의 위치가 바뀔때까지 탐색해서, 현 탐색 중 가장 a+b가 0에 가까웠던 a,b를 찾아 출력한다.&lt;/p&gt;</description></item><item><title>7662이중우선순위큐</title><link>https://log.j2234.cc/posts/2022-tistory/180-7662%EC%9D%B4%EC%A4%91%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%ED%81%90/</link><pubDate>Thu, 08 Sep 2022 02:56:11 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/180-7662%EC%9D%B4%EC%A4%91%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%ED%81%90/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/7662" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/7662&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7662번: 이중 우선순위 큐입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적www.acmicpc.net&lt;/p&gt;
&lt;p&gt;그냥 정렬해서 풀면 간단한데, 시간 때문에 개고생을 해야된다.&lt;/p&gt;
&lt;p&gt;힙과 defaultdict 를 이용한다.&lt;/p&gt;
&lt;p&gt;minheap과 maxheap을 만들어서, 원소를 각각 추가해 준다 이때 defaultdict로 수가 몇개 들어있는지 확인한다.&lt;/p&gt;
&lt;p&gt;그리고 최소값은 minheap에서, 최댓값은 maxheap에서 뺀다.&lt;/p&gt;
&lt;p&gt;이때, 만일 다른 힙에서 삭제된 값일수도 있으니, defaultdict에 현재 pop한 값이 1개 이상일 때까지 (유효한 수가 존재)&lt;/p&gt;</description></item><item><title>2109순회강연</title><link>https://log.j2234.cc/posts/2022-tistory/179-2109%EC%88%9C%ED%9A%8C%EA%B0%95%EC%97%B0/</link><pubDate>Sun, 04 Sep 2022 22:16:45 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/179-2109%EC%88%9C%ED%9A%8C%EA%B0%95%EC%97%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2109" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2109&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2109번: 순회강연한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;이전 &amp;lsquo;보석도둑&amp;rsquo; 문제를 참고해서 풀었다.&lt;/p&gt;
&lt;p&gt;먼저 날짜가 높은 순서대로 정렬하고,&lt;/p&gt;
&lt;p&gt;강의를 마지막 날짜부터 1씩 감소시키면서,&lt;/p&gt;
&lt;p&gt;현 날짜와 똑같은 날짜의 강의를 힙에 넣는다.&lt;/p&gt;
&lt;p&gt;그후, 날짜가 하나씩 감소할 때마다, 힙에 남아있는 가장 큰 값을 넣는다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysimport&lt;/span&gt; &lt;span class="n"&gt;heapqinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlinelect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="n"&gt;heapq&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heappush&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# 날짜, 강연료&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;lect&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# 높은 날짜순서로 정렬h = [] # 최대힙answer = 0day = -lect[0][0] # 마지막 나ㅣㄹ짜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# 강의가 존재할 때까지&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;lect&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lect&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# 강의가 존재하고, 강의의 제한시간과 같을 때&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;heapq&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heappush&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;heapq&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heappop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lect&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;heapq&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heappop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;그런데 다 풀고 나서 다른풀이를 보니 더 간단한 방법이 존재했다.&lt;/p&gt;</description></item><item><title>1202보석도둑</title><link>https://log.j2234.cc/posts/2022-tistory/178-1202%EB%B3%B4%EC%84%9D%EB%8F%84%EB%91%91/</link><pubDate>Sun, 04 Sep 2022 15:04:22 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/178-1202%EB%B3%B4%EC%84%9D%EB%8F%84%EB%91%91/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysimport &lt;span class="nv"&gt;heapqinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; sys.stdin.readlinejul &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n, &lt;span class="nv"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; map&lt;span class="o"&gt;(&lt;/span&gt;int, input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;n&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; heapq.heappush&lt;span class="o"&gt;(&lt;/span&gt;jul, &lt;span class="o"&gt;[&lt;/span&gt;*map&lt;span class="o"&gt;(&lt;/span&gt;int, input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;bag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;int&lt;span class="o"&gt;(&lt;/span&gt;input&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;k&lt;span class="o"&gt;)]&lt;/span&gt; &lt;span class="c1"&gt;# 작은순서대로 정렬bag.sort()h = []answer = 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; b in bag: &lt;span class="k"&gt;while&lt;/span&gt; jul and jul&lt;span class="o"&gt;[&lt;/span&gt;0&lt;span class="o"&gt;][&lt;/span&gt;0&lt;span class="o"&gt;]&lt;/span&gt; &amp;lt;&lt;span class="o"&gt;=&lt;/span&gt; b: &lt;span class="c1"&gt;# 가방에 담을수 있는 모든 보석&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; heapq.heappush&lt;span class="o"&gt;(&lt;/span&gt;h, -heapq.heappop&lt;span class="o"&gt;(&lt;/span&gt;jul&lt;span class="o"&gt;)[&lt;/span&gt;1&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;# 무게만 담기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; h: &lt;span class="c1"&gt;# 만일 담을수 있는 보석이 있다면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; answer -&lt;span class="o"&gt;=&lt;/span&gt; heapq.heappop&lt;span class="o"&gt;(&lt;/span&gt;h&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 현재 가방에 담을 수 있는 보석 중 가장 가치높은 보석만 꺼내기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;print&lt;span class="o"&gt;(&lt;/span&gt;answer&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1202" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1202&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1202번: 보석 도둑첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ciwww.acmicpc.net&lt;/p&gt;</description></item><item><title>스프링DB접근기술</title><link>https://log.j2234.cc/posts/2022-tistory/177-%EC%8A%A4%ED%94%84%EB%A7%81db%EC%A0%91%EA%B7%BC%EA%B8%B0%EC%88%A0/</link><pubDate>Fri, 02 Sep 2022 00:24:44 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/177-%EC%8A%A4%ED%94%84%EB%A7%81db%EC%A0%91%EA%B7%BC%EA%B8%B0%EC%88%A0/</guid><description>&lt;p&gt;h2 데이터베이스 사용&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;~&lt;/strong&gt;/study/h2/&lt;strong&gt;bin&lt;/strong&gt;의 h2.sh&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;순수 jdbc(무려 15년전)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;참고만하고 넘어가자&lt;/p&gt;
&lt;p&gt;2.jdbcTemplate&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.JPA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행&lt;/p&gt;
&lt;p&gt;개발 생산성 up!!&lt;/p&gt;
&lt;p&gt;JPA는 표준 인터베이스 (ORM) Object Relational Mapping&lt;/p&gt;
&lt;p&gt;구현은 각 업체마다 다르다&lt;/p&gt;
&lt;p&gt;gradle에&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;implementation &lt;span class="s1"&gt;&amp;#39;org.springframework.boot:spring-boot-starter-data-jpa&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;추가&lt;/p&gt;
&lt;p&gt;application.properties&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;spring.datasource.url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;jdbc:h2:tcp://localhost/~/test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;spring.datasource.driver-class-name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;org.h2.Driverspring.datasource.username=sa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;spring.jpa.show-sql&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;truespring.jpa.hibernate.ddl-auto=none&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;entity 매핑 (@Entity)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;@ID ==PK , @GeneratedValue == db에서 자동생성&lt;/p&gt;
&lt;p&gt;@Column(name=&amp;ldquo;username&amp;rdquo;) == 컬럼명&lt;/p&gt;
&lt;p&gt;jpa는 EntityManager로 모든게 동작함&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;스프링 데이터 JPA (JPA 업그레이드 버전)&lt;/strong&gt;****&lt;/p&gt;</description></item><item><title>13265색칠하기</title><link>https://log.j2234.cc/posts/2022-tistory/176-13265%EC%83%89%EC%B9%A0%ED%95%98%EA%B8%B0/</link><pubDate>Wed, 31 Aug 2022 20:05:52 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/176-13265%EC%83%89%EC%B9%A0%ED%95%98%EA%B8%B0/</guid><description>&lt;p&gt;acmicpc.net/problem/13265&lt;/p&gt;
&lt;p&gt;이분그래프 문제같다.&lt;/p&gt;
&lt;p&gt;나는 dfs가 좋다.&lt;/p&gt;
&lt;p&gt;dfs를 진행하면서, 색을 계속 바꿔가며 (not c)칠한다.&lt;/p&gt;
&lt;p&gt;만일 이미 색칠되어있는 칸을 만났는데, 현재색과 같으면 불가능한것이므로 바로 종료한다&lt;/p&gt;
&lt;p&gt;아니면 계속dfs를 진행한다&lt;/p&gt;
&lt;p&gt;이전에 이분그래프문제를 풀어봤더니 쉽게 풀었다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysfrom collections import &lt;span class="nv"&gt;dequeinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; sys.stdin.readlinedef bfs&lt;span class="o"&gt;(&lt;/span&gt;i&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; deque&lt;span class="o"&gt;()&lt;/span&gt; q.append&lt;span class="o"&gt;((&lt;/span&gt;i, True&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; q: now, &lt;span class="nv"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; q.popleft&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; next in arr&lt;span class="o"&gt;[&lt;/span&gt;now&lt;span class="o"&gt;]&lt;/span&gt;: &lt;span class="k"&gt;if&lt;/span&gt; visited&lt;span class="o"&gt;[&lt;/span&gt;next&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; c:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; False &lt;span class="k"&gt;elif&lt;/span&gt; visited&lt;span class="o"&gt;[&lt;/span&gt;next&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; -1:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; q.append&lt;span class="o"&gt;((&lt;/span&gt;next, not c&lt;span class="o"&gt;))&lt;/span&gt; visited&lt;span class="o"&gt;[&lt;/span&gt;next&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; not c
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;Truet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; int&lt;span class="o"&gt;(&lt;/span&gt;input&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;t&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n, &lt;span class="nv"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; map&lt;span class="o"&gt;(&lt;/span&gt;int, input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="nv"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[[]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;n + 1&lt;span class="o"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;-1 &lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;n + 1&lt;span class="o"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; __ in range&lt;span class="o"&gt;(&lt;/span&gt;m&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a, &lt;span class="nv"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; map&lt;span class="o"&gt;(&lt;/span&gt;int, input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())&lt;/span&gt; arr&lt;span class="o"&gt;[&lt;/span&gt;a&lt;span class="o"&gt;]&lt;/span&gt;.append&lt;span class="o"&gt;(&lt;/span&gt;b&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; arr&lt;span class="o"&gt;[&lt;/span&gt;b&lt;span class="o"&gt;]&lt;/span&gt;.append&lt;span class="o"&gt;(&lt;/span&gt;a&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; i in range&lt;span class="o"&gt;(&lt;/span&gt;1, n + 1&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; visited&lt;span class="o"&gt;[&lt;/span&gt;i&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; -1: visited&lt;span class="o"&gt;[&lt;/span&gt;i&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; True
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; bfs&lt;span class="o"&gt;(&lt;/span&gt;i&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; not tmp: &lt;span class="nb"&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;possible&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; tmp &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;impossible&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>웹 MVC 개발</title><link>https://log.j2234.cc/posts/2022-tistory/175-%EC%9B%B9-mvc-%EA%B0%9C%EB%B0%9C/</link><pubDate>Wed, 31 Aug 2022 18:05:46 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/175-%EC%9B%B9-mvc-%EA%B0%9C%EB%B0%9C/</guid><description>&lt;p&gt;홈화면 추가&lt;/p&gt;
&lt;p&gt;/ 가 등록되지않았으면 index.html호출되고 아니면 무시됨&lt;/p&gt;
&lt;p&gt;form 안의 input태그의 name 속성이 키가 됨&lt;/p&gt;
&lt;p&gt;웹프강의가 조금은 도움이 되는것 같기도 하고&amp;hellip;.&lt;/p&gt;
&lt;p&gt;도데체 interface(MemberRepository) 를 호출하는데&lt;/p&gt;
&lt;p&gt;MemoryMemberRepository가 등록되는건지 모르겠다.&lt;/p&gt;</description></item><item><title>1374강의실</title><link>https://log.j2234.cc/posts/2022-tistory/174-1374%EA%B0%95%EC%9D%98%EC%8B%A4/</link><pubDate>Wed, 31 Aug 2022 14:54:06 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/174-1374%EA%B0%95%EC%9D%98%EC%8B%A4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1374" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1374&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1374번: 강의실첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에는 걍 싹다비교해봤는데, 당연히 시간초과가 났다.&lt;/p&gt;
&lt;p&gt;이런류의 문제는 거의 처음 접해봐서, 힌트를 얻고 풀었다.&lt;/p&gt;
&lt;p&gt;먼져, 강의를 시작시간 순으로 정렬해준다.&lt;/p&gt;
&lt;p&gt;이후 끝나는 시간 순으로 힙을 만들어준다&lt;/p&gt;
&lt;p&gt;정렬해 놓은 강의들을 하나씩 비교하는데&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;만일 강의의 시작시간이 힙의 첫번째원소, 즉 가장 빨리 끝나는 강의보다 크다면&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>스프링 빈과 의존관계</title><link>https://log.j2234.cc/posts/2022-tistory/173-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88%EA%B3%BC-%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84/</link><pubDate>Tue, 30 Aug 2022 19:18:21 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/173-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88%EA%B3%BC-%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84/</guid><description>&lt;p&gt;@Controller&lt;/p&gt;
&lt;p&gt;스프링이 시작될때, 객체를 생성&lt;/p&gt;
&lt;p&gt;스프링 컨테이너에서 빈을 관리한다고 부름&lt;/p&gt;
&lt;p&gt;@Autowired&lt;/p&gt;
&lt;p&gt;스프링 컨테이너의 memberService를 가져와서 연동한다&lt;/p&gt;
&lt;p&gt;@Service&lt;/p&gt;
&lt;p&gt;스프링이 올라올때 컨테이너에 등록해줌&lt;/p&gt;
&lt;p&gt;@Repository&lt;/p&gt;
&lt;p&gt;스프링에 repository 등록&lt;/p&gt;
&lt;p&gt;전부 &lt;code&gt;@Component&lt;/code&gt; 가능&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;스프링 빈을 등록하는 2가지 방법&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;어노테이션 사용&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;@component 어노테이션이 있으면 스프링 빈으로 자동 등록한다&lt;/p&gt;
&lt;p&gt;@controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다&lt;/p&gt;
&lt;p&gt;@controoler, @Service, @Repository 모두 @component 하위임&lt;/p&gt;
&lt;p&gt;hello.hellospring 하위 패키지가 아니면, 등록안해줌&lt;/p&gt;
&lt;p&gt;스프링은 기본적으로 싱글톤으로 동작(유일하게 하나만 등록해서 공유)&lt;/p&gt;</description></item><item><title>회원 도메인과 저장소 만들기</title><link>https://log.j2234.cc/posts/2022-tistory/172-%ED%9A%8C%EC%9B%90-%EB%8F%84%EB%A9%94%EC%9D%B8%EA%B3%BC-%EC%A0%80%EC%9E%A5%EC%86%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0/</link><pubDate>Mon, 29 Aug 2022 14:30:23 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/172-%ED%9A%8C%EC%9B%90-%EB%8F%84%EB%A9%94%EC%9D%B8%EA%B3%BC-%EC%A0%80%EC%9E%A5%EC%86%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid><description>&lt;p&gt;Optional&lt;T&gt; : null도 반환가능하게해줌&lt;/p&gt;
&lt;p&gt;interface에 메소드의 몸통만 구현하면 &amp;ndash; 상속받는 개체에서 해당 메소드를 실행하면 오류가 날것&lt;/p&gt;
&lt;p&gt;따라서 상속받는 개체에서 메소드를 재정의해야함&lt;/p&gt;
&lt;p&gt;testcase를 작성하는법&lt;/p&gt;
&lt;p&gt;자바의 min메소드를 통해서 실행하면, 오래걸리고, 반복실행하기어렵고,&lt;/p&gt;
&lt;p&gt;한번에 실행하기 어려움&lt;/p&gt;
&lt;p&gt;따라서 Junit이라는 프레임워크를 실행하여 이러한 문제를 해결&lt;/p&gt;
&lt;p&gt;@AfterEach&lt;/p&gt;
&lt;p&gt;테스트가 끝날때마다 밑함수 호출&lt;/p&gt;
&lt;p&gt;command option v 그대로 반환&lt;/p&gt;
&lt;p&gt;ifPresent()객체가 있는지 확인&lt;/p&gt;
&lt;p&gt;given, when, then&lt;/p&gt;
&lt;p&gt;주어졌는데, 실행했을때, 결과가나와야됨&lt;/p&gt;</description></item><item><title>1655가운데를 말해요</title><link>https://log.j2234.cc/posts/2022-tistory/171-1655%EA%B0%80%EC%9A%B4%EB%8D%B0%EB%A5%BC-%EB%A7%90%ED%95%B4%EC%9A%94/</link><pubDate>Mon, 29 Aug 2022 11:34:05 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/171-1655%EA%B0%80%EC%9A%B4%EB%8D%B0%EB%A5%BC-%EB%A7%90%ED%95%B4%EC%9A%94/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1655" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1655&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1655번: 가운데를 말해요첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1www.acmicpc.net&lt;/p&gt;
&lt;p&gt;heap을 두개쓴다&lt;/p&gt;
&lt;p&gt;[최대힙] (중간값) [최소힙]&lt;/p&gt;
&lt;p&gt;중간값도 결국엔 힙에들어가야 하므로&lt;/p&gt;
&lt;p&gt;최대힙의 루트를 중간값으로 정한다.&lt;/p&gt;
&lt;p&gt;ex 1,2,3,&lt;/p&gt;
&lt;p&gt;[2,1],[3]&lt;/p&gt;
&lt;p&gt;왼쪽은 l , 오른쪽을 r 이라 하겠다.&lt;/p&gt;
&lt;p&gt;새로운 수가 들어오면,&lt;/p&gt;
&lt;p&gt;l이 r 보다 원소가 많으면 r에, 아니면 기준인 l 에 heappush 시킨다.&lt;/p&gt;
&lt;p&gt;이때, r의 루트가 (r에서 가장 작은 수가) l의루트(l에서 가장 큰 수) 보다 작다면&lt;/p&gt;</description></item><item><title>스프링 웹 개발 기초</title><link>https://log.j2234.cc/posts/2022-tistory/170-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88/</link><pubDate>Sun, 28 Aug 2022 19:24:25 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/170-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88/</guid><description>&lt;p&gt;정적 컨텐츠 - /static&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mvc와 템플릿 엔진 (서버사이드)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;model 은 비지니스 로직 및 데이터 처리&lt;/p&gt;
&lt;p&gt;view는 화면을 그리는거&lt;/p&gt;
&lt;p&gt;controller는 request를 받는거&lt;/p&gt;
&lt;p&gt;@requestParam으로 get 파라미터를 받을 수 있음&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;API(클라라이언트사이드)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;@responsebody의 의미&lt;/p&gt;
&lt;p&gt;http 프로토콜의 body에 직접 넣어 준다. 문자그대로 클라이언트에 내려감 (html요소 x)&lt;/p&gt;
&lt;p&gt;객체를 리턴하면 json방식으로 전달됨!!! (HttpMessageConverter)가 동작함&lt;/p&gt;</description></item><item><title>view 환경설정 &amp; 빌드하고 실행하기</title><link>https://log.j2234.cc/posts/2022-tistory/169-view-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95--%EB%B9%8C%EB%93%9C%ED%95%98%EA%B3%A0-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0/</link><pubDate>Sun, 28 Aug 2022 15:38:37 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/169-view-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95--%EB%B9%8C%EB%93%9C%ED%95%98%EA%B3%A0-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0/</guid><description>&lt;p&gt;뭔가가 궁금하면&lt;/p&gt;
&lt;p&gt;spring.io -&amp;gt; project -&amp;gt;spring boot 의 공식문서를 찾아보자&lt;/p&gt;
&lt;p&gt;스프링 부트가 제공하는 웰컴 페이지&lt;/p&gt;
&lt;p&gt;resources/static/index.html 을 만들면, 자동으로 인식해줌&lt;/p&gt;
&lt;p&gt;thymeleaf 템플릿 엔진&lt;/p&gt;
&lt;p&gt;locallhost:8080/hello - &amp;gt; 톰켓에서 getMapping(&amp;lsquo;hello&amp;quot;) 를 찾아서 컨트롤러를 찾아줌&lt;/p&gt;
&lt;p&gt;model.addAttribute(&amp;ldquo;data&amp;rdquo;,&amp;ldquo;hello&amp;rdquo;)를 통해서 속성지정해줌&lt;/p&gt;
&lt;p&gt;return &amp;ldquo;hello&amp;rdquo; 는 viewResolver에게 화면을 찾으라고 함&lt;/p&gt;
&lt;p&gt;resources/templates/hello.html을 찾으라는 의미임&lt;/p&gt;
&lt;p&gt;spring-boot-devtools라이브러리로 서버 재시작 막을 수 있음&lt;/p&gt;
&lt;p&gt;빌드&lt;/p&gt;
&lt;p&gt;./gradlew build 하면 build 폴더가 생김&lt;/p&gt;
&lt;p&gt;build/libs/에 있는 hello-spring-0.0.1-SNAPSHOT.jar 가 빌드된 파일&lt;/p&gt;
&lt;p&gt;java -jar hello-spring-0.0.1-SNAPSHOT.jar로 스프링 서버 실행 가능!!&lt;/p&gt;</description></item><item><title>라이브러리 살펴보기</title><link>https://log.j2234.cc/posts/2022-tistory/168-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0/</link><pubDate>Sun, 28 Aug 2022 15:02:57 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/168-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0/</guid><description>&lt;p&gt;gradle은 의존관계가 있는 라이브러리를 함께 다운로드한다.&lt;/p&gt;
&lt;p&gt;현업에서는 system.out.println대신 로그를 쓴다.&lt;/p&gt;
&lt;p&gt;스프링부트 라이브러리&lt;/p&gt;
&lt;p&gt;sprint-boot-starter-web&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;spring-boot-starter-tomcat : 톰캣서버&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;spring-boot-webmvc : 스프링 웹 MVC&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진&lt;/p&gt;
&lt;p&gt;spring-boot-starter(공통) : 스프링부트 + 스프링코어 + 로깅&lt;/p&gt;
&lt;p&gt;spring-boot&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;spring-core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;spring-boot-starter-logging&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;logback, slf4j&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>13460구슬탈출2</title><link>https://log.j2234.cc/posts/2022-tistory/167-13460%EA%B5%AC%EC%8A%AC%ED%83%88%EC%B6%9C2/</link><pubDate>Fri, 26 Aug 2022 17:17:47 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/167-13460%EA%B5%AC%EC%8A%AC%ED%83%88%EC%B6%9C2/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/13460" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/13460&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;13460번: 구슬 탈출 2첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 &amp;lsquo;.&amp;rsquo;, &amp;lsquo;#&amp;rsquo;, &amp;lsquo;O&amp;rsquo;, &amp;lsquo;R&amp;rsquo;, &amp;lsquo;B&amp;rsquo;&lt;a href="https://www.acmicpc.net" target="_blank" rel="noreferrer"&gt;www.acmicpc.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;빡세다. 예외케이스가 너무 많다.&lt;/p&gt;
&lt;p&gt;말로는 쉽다&lt;/p&gt;
&lt;p&gt;빨간구슬과 파랑구슬의 x,y좌표와 시간을 각각 큐에 넣고,&lt;/p&gt;
&lt;p&gt;더이상 진행할 수 없을때까지 한방향으로 움직인다음,&lt;/p&gt;
&lt;p&gt;조건에따라종료하면 된다. 근데 빡세다. 코드에 주석을 주렁주렁 달아놨더니 설명은 그만하겠다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysfrom collections import &lt;span class="nv"&gt;dequeinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sys.stdin.readlinearr&lt;span class="o"&gt;=[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;move&lt;/span&gt;&lt;span class="o"&gt;=[[&lt;/span&gt;-1,0&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="o"&gt;[&lt;/span&gt;1,0&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="o"&gt;[&lt;/span&gt;0,-1&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="o"&gt;[&lt;/span&gt;0,1&lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="nv"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;set&lt;span class="o"&gt;()&lt;/span&gt;n,m&lt;span class="o"&gt;=&lt;/span&gt;map&lt;span class="o"&gt;(&lt;/span&gt;int,input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; i in range&lt;span class="o"&gt;(&lt;/span&gt;n&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;list&lt;span class="o"&gt;(&lt;/span&gt;input&lt;span class="o"&gt;()&lt;/span&gt;.rstrip&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; j in range&lt;span class="o"&gt;(&lt;/span&gt;m&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; tmp&lt;span class="o"&gt;[&lt;/span&gt;j&lt;span class="o"&gt;]==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;B&amp;#39;&lt;/span&gt;: &lt;span class="nv"&gt;blue&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;i,j&lt;span class="o"&gt;)&lt;/span&gt; tmp&lt;span class="o"&gt;[&lt;/span&gt;j&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; tmp&lt;span class="o"&gt;[&lt;/span&gt;j&lt;span class="o"&gt;]==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;R&amp;#39;&lt;/span&gt;: &lt;span class="nv"&gt;red&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;i,j&lt;span class="o"&gt;)&lt;/span&gt; tmp&lt;span class="o"&gt;[&lt;/span&gt;j&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; tmp&lt;span class="o"&gt;[&lt;/span&gt;j&lt;span class="o"&gt;]==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;O&amp;#39;&lt;/span&gt;: &lt;span class="nv"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;i,j&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt; arr.append&lt;span class="o"&gt;(&lt;/span&gt;tmp&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;############################# arr만들기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def bfs&lt;span class="o"&gt;()&lt;/span&gt;: &lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;deque&lt;span class="o"&gt;()&lt;/span&gt; q.append&lt;span class="o"&gt;((&lt;/span&gt;red&lt;span class="o"&gt;[&lt;/span&gt;0&lt;span class="o"&gt;]&lt;/span&gt;,red&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;,blue&lt;span class="o"&gt;[&lt;/span&gt;0&lt;span class="o"&gt;]&lt;/span&gt;,blue&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;,0&lt;span class="o"&gt;))&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; q: rcx,rcy,bcx,bcy,t &lt;span class="o"&gt;=&lt;/span&gt; q.popleft&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;t&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;10:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# print(&amp;#39;10보다 커서 종료&amp;#39;) print(-1) exit()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; dx,dy in move: rnx,rny &lt;span class="o"&gt;=&lt;/span&gt; rcx,rcy &lt;span class="c1"&gt;# 다음에 갈 곳&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bnx,bny&lt;span class="o"&gt;=&lt;/span&gt; bcx,bcy R,B&lt;span class="o"&gt;=&lt;/span&gt;False,False &lt;span class="c1"&gt;#구멍에 들어갔는지 여부&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#####################################################while문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; True:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rflag,bflag&lt;span class="o"&gt;=&lt;/span&gt;False,False &lt;span class="c1"&gt;#r,b가 더이상 움직일수 없는가&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; not R : &lt;span class="c1"&gt;#빨강이 아직 구멍에 안들어갔다면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;arr&lt;span class="o"&gt;[&lt;/span&gt;rnx+dx&lt;span class="o"&gt;][&lt;/span&gt;rny+dy&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# 다음 빨강의 위치&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;O&amp;#39;&lt;/span&gt;: &lt;span class="c1"&gt;#구멍에 들어갔을 경우&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;R&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;t+1 &lt;span class="c1"&gt;#R만들어줌&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rnx,rny&lt;span class="o"&gt;=&lt;/span&gt;-1,-1 &lt;span class="c1"&gt;#-1로 바꿔서 비교할때 중복 ㅌ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#&amp;#39;&lt;/span&gt;: &lt;span class="c1"&gt;#벽일경우&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;rflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True &lt;span class="c1"&gt;#더이상 움직일 수 없음&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;: &lt;span class="c1"&gt;#움직일 수 있는경우&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rnx,rny&lt;span class="o"&gt;=&lt;/span&gt;rnx+dx,rny+dy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;: &lt;span class="c1"&gt;# 빨강이 구멍에 들어갔을경우, 조건 만족&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;rflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;arr&lt;span class="o"&gt;[&lt;/span&gt;bnx+dx&lt;span class="o"&gt;][&lt;/span&gt;bny+dy&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;#파란색&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;O&amp;#39;&lt;/span&gt;: &lt;span class="c1"&gt;#구멍에 들어갔을 경우 B=1 # B만들어줌&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;break&lt;/span&gt; &lt;span class="c1"&gt;#볼필요없음 elif tmp==&amp;#39;#&amp;#39;: #벽일경우&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;bflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True &lt;span class="c1"&gt;#더이상 움직일 수 없음 else: # 움직일 수 있는 경우&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bnx,bny&lt;span class="o"&gt;=&lt;/span&gt;bnx+dx,bny+dy 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;rnx&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;bnx and &lt;span class="nv"&gt;rny&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;bny : &lt;span class="c1"&gt;#만일 서로 같은 위치에 있다면 !! 둘다움직였다면 절대 같은 위치 불가능&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; bflag: &lt;span class="c1"&gt;#만일 빨강이 움직였다면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rnx,rny&lt;span class="o"&gt;=&lt;/span&gt; rnx-dx,rny-dy &lt;span class="c1"&gt;# 이전으로 초기화해줌&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;rflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True &lt;span class="k"&gt;elif&lt;/span&gt; rflag:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bnx,bny&lt;span class="o"&gt;=&lt;/span&gt; bnx-dx,bny-dy &lt;span class="nv"&gt;bflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; rflag and bflag : &lt;span class="c1"&gt;#서로 더이상 움직일 수 없는 상태라면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;break&lt;/span&gt; &lt;span class="c1"&gt;#드디어 종료 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;######################################################## While문 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; B: &lt;span class="c1"&gt;#만일 b가 구멍에 들어갔다면 continue; #그냥넘김&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; R: &lt;span class="c1"&gt;#만일 b가 구멍에들어가지않고 R만 들어갔다면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# print(&amp;#39;R만 들어가서 종료&amp;#39;) print(R) #출력후 종료&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; exit&lt;span class="o"&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;rnx,rny,bnx,bny&lt;span class="o"&gt;)&lt;/span&gt; not in s: &lt;span class="c1"&gt;#만일 아무것도 구멍에 안들어갔다면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; q.append&lt;span class="o"&gt;(((&lt;/span&gt;rnx,rny,bnx,bny,t+1&lt;span class="o"&gt;)))&lt;/span&gt; &lt;span class="c1"&gt;#큐에삽입&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; s.add&lt;span class="o"&gt;((&lt;/span&gt;rnx,rny,bnx,bny&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;#방문체크bfs()# print(s)# print(&amp;#39;끝나서 종료&amp;#39;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;print&lt;span class="o"&gt;(&lt;/span&gt;-1&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>프로젝트 준비</title><link>https://log.j2234.cc/posts/2022-tistory/166-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%A4%80%EB%B9%84/</link><pubDate>Fri, 26 Aug 2022 01:18:51 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/166-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%A4%80%EB%B9%84/</guid><description>&lt;p&gt;&lt;a href="https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard" target="_blank" rel="noreferrer"&gt;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런&amp;hellip;&lt;a href="https://www.inflearn.com" target="_blank" rel="noreferrer"&gt;www.inflearn.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;스프링 입문 강의를 보고 따라함&lt;/p&gt;
&lt;p&gt;&lt;a href="https://log.j2234.cc/posts/2022-tistory/166-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%A4%80%EB%B9%84/file/attachment-01.pdf" &gt;스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 v2021-12-01_2.pdf&lt;/a&gt;&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1437"
 height="855"
 src="https://log.j2234.cc/posts/2022-tistory/166-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%A4%80%EB%B9%84/img/image-01_hu_fb2123bf8a20e9a6.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/166-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%A4%80%EB%B9%84/img/image-01_hu_fb2123bf8a20e9a6.webp 800w, https://log.j2234.cc/posts/2022-tistory/166-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%A4%80%EB%B9%84/img/image-01_hu_d8d0c5827f9999b9.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/166-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%A4%80%EB%B9%84/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;IntellJ사용&lt;/p&gt;
&lt;p&gt;다운받은 파일을 study에 옮기고,&lt;/p&gt;
&lt;p&gt;거기에 있는 build.gradle에 IntellJ 프로젝트를 연다&lt;/p&gt;</description></item><item><title>첫 글</title><link>https://log.j2234.cc/posts/velog/110-%EC%B2%AB-%EA%B8%80/</link><pubDate>Wed, 24 Aug 2022 23:13:54 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/110-%EC%B2%AB-%EA%B8%80/</guid><description>&lt;p&gt;{{ date }}
티스토리-&amp;gt;velog&lt;/p&gt;</description></item><item><title>5052전화번호목록</title><link>https://log.j2234.cc/posts/2022-tistory/165-5052%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8%EB%AA%A9%EB%A1%9D/</link><pubDate>Wed, 24 Aug 2022 20:23:28 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/165-5052%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8%EB%AA%A9%EB%A1%9D/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/5052" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/5052&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5052번: 전화번호 목록첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가www.acmicpc.net&lt;/p&gt;
&lt;p&gt;하나하나비교하는방법밖에 안나서 인터넷을 찾아봤는데&lt;/p&gt;
&lt;p&gt;정말 간단했다.&lt;/p&gt;
&lt;p&gt;문자열을 입력받고 정렬하면,&lt;/p&gt;
&lt;p&gt;인접한 두 문자는 가장 가까운 문자일 것이다.&lt;/p&gt;
&lt;p&gt;따라서 arr[i]와 arr[i+1]만 비교하면 된다. 신기하다.&lt;/p&gt;
&lt;p&gt;그냥비교해줘도 되고, 좀더 빠르게 하려면&lt;/p&gt;
&lt;p&gt;startswith()함수를 통해서 비교해주면 끝&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import &lt;span class="nv"&gt;sysinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;sys.stdin.readlinet&lt;span class="o"&gt;=&lt;/span&gt;int&lt;span class="o"&gt;(&lt;/span&gt;input&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;t&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;int&lt;span class="o"&gt;(&lt;/span&gt;input&lt;span class="o"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sorted&lt;span class="o"&gt;([&lt;/span&gt;input&lt;span class="o"&gt;()&lt;/span&gt;.rstrip&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;n&lt;span class="o"&gt;)])&lt;/span&gt; &lt;span class="c1"&gt;#정렬하면 바로 옆만 비교하면 됨!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;False &lt;span class="k"&gt;for&lt;/span&gt; i in range&lt;span class="o"&gt;(&lt;/span&gt;n-1&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="k"&gt;if&lt;/span&gt; arr&lt;span class="o"&gt;[&lt;/span&gt;i+1&lt;span class="o"&gt;]&lt;/span&gt;.startswith&lt;span class="o"&gt;(&lt;/span&gt;arr&lt;span class="o"&gt;[&lt;/span&gt;i&lt;span class="o"&gt;])&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True &lt;span class="nb"&gt;break&lt;/span&gt; print&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;NO&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; flag &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;YES&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>18405경쟁적 전염</title><link>https://log.j2234.cc/posts/2022-tistory/164-18405%EA%B2%BD%EC%9F%81%EC%A0%81-%EC%A0%84%EC%97%BC/</link><pubDate>Tue, 23 Aug 2022 21:13:32 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/164-18405%EA%B2%BD%EC%9F%81%EC%A0%81-%EC%A0%84%EC%97%BC/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/18405" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/18405&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;18405번: 경쟁적 전염첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치www.acmicpc.net&lt;/p&gt;
&lt;p&gt;ㅋㅋㅋㅋㅋㅋㅋ 정신똑바로차리고풀어야겠다&lt;/p&gt;
&lt;p&gt;말도안되는부분에서실수했다.&lt;/p&gt;
&lt;p&gt;그냥 bfs다 큐에 넣을때 바이러스 내림차순으로만 넣어주면된다.&lt;/p&gt;
&lt;p&gt;끝&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysfrom collections import &lt;span class="nv"&gt;dequeinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sys.stdin.readlinearr&lt;span class="o"&gt;=[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;move&lt;/span&gt;&lt;span class="o"&gt;=[[&lt;/span&gt;-1,0&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="o"&gt;[&lt;/span&gt;1,0&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="o"&gt;[&lt;/span&gt;0,-1&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="o"&gt;[&lt;/span&gt;0,1&lt;span class="o"&gt;]]&lt;/span&gt;n,k&lt;span class="o"&gt;=&lt;/span&gt;map&lt;span class="o"&gt;(&lt;/span&gt;int,input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;virus&lt;/span&gt;&lt;span class="o"&gt;=[[]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;k+1&lt;span class="o"&gt;)]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; i in range&lt;span class="o"&gt;(&lt;/span&gt;n&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;*map&lt;span class="o"&gt;(&lt;/span&gt;int,input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())]&lt;/span&gt; arr.append&lt;span class="o"&gt;(&lt;/span&gt;tmp&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; j in range&lt;span class="o"&gt;(&lt;/span&gt;n&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tmp&lt;span class="o"&gt;[&lt;/span&gt;j&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; t!&lt;span class="o"&gt;=&lt;/span&gt;0: virus&lt;span class="o"&gt;[&lt;/span&gt;t&lt;span class="o"&gt;]&lt;/span&gt;.append&lt;span class="o"&gt;((&lt;/span&gt;i,j,0&lt;span class="o"&gt;))&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;s,x,y&lt;span class="o"&gt;=&lt;/span&gt;map&lt;span class="o"&gt;(&lt;/span&gt;int,input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;deque&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; vii in virus: &lt;span class="k"&gt;if&lt;/span&gt; vii:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; vi in vii: q.append&lt;span class="o"&gt;(&lt;/span&gt;vi&lt;span class="o"&gt;)&lt;/span&gt;def bfs&lt;span class="o"&gt;()&lt;/span&gt;: &lt;span class="k"&gt;while&lt;/span&gt; q:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cx,cy,t&lt;span class="o"&gt;=&lt;/span&gt;q.popleft&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;t&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;s: print&lt;span class="o"&gt;(&lt;/span&gt;arr&lt;span class="o"&gt;[&lt;/span&gt;x-1&lt;span class="o"&gt;][&lt;/span&gt;y-1&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; exit&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; dx,dy in move: nx,ny&lt;span class="o"&gt;=&lt;/span&gt;cx+dx,cy+dy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; 0&amp;lt;&lt;span class="o"&gt;=&lt;/span&gt;nx&amp;lt;n and 0&amp;lt;&lt;span class="o"&gt;=&lt;/span&gt;ny&amp;lt;n and not arr&lt;span class="o"&gt;[&lt;/span&gt;nx&lt;span class="o"&gt;][&lt;/span&gt;ny&lt;span class="o"&gt;]&lt;/span&gt;: 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; arr&lt;span class="o"&gt;[&lt;/span&gt;nx&lt;span class="o"&gt;][&lt;/span&gt;ny&lt;span class="o"&gt;]=&lt;/span&gt;arr&lt;span class="o"&gt;[&lt;/span&gt;cx&lt;span class="o"&gt;][&lt;/span&gt;cy&lt;span class="o"&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; q.append&lt;span class="o"&gt;((&lt;/span&gt;nx,ny,t+1&lt;span class="o"&gt;))&lt;/span&gt; bfs&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;print&lt;span class="o"&gt;(&lt;/span&gt;arr&lt;span class="o"&gt;[&lt;/span&gt;x-1&lt;span class="o"&gt;][&lt;/span&gt;y-1&lt;span class="o"&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>4574스도미노쿠</title><link>https://log.j2234.cc/posts/2022-tistory/163-4574%EC%8A%A4%EB%8F%84%EB%AF%B8%EB%85%B8%EC%BF%A0/</link><pubDate>Tue, 23 Aug 2022 10:05:24 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/163-4574%EC%8A%A4%EB%8F%84%EB%AF%B8%EB%85%B8%EC%BF%A0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/4574" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/4574&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;분명 푸는방법은 아는데,&lt;/p&gt;
&lt;p&gt;계속 오류가 생겨서 엄청 고생했다.&lt;/p&gt;
&lt;p&gt;스도쿠랑 푸는법은 같다.&lt;/p&gt;
&lt;p&gt;먼저 arr을 생성하고, 입력으로 이를 채운다.&lt;/p&gt;
&lt;p&gt;arr을 탐색하며 공백을 리스트에 넣는다.&lt;/p&gt;
&lt;p&gt;dfs를 통해 공백의 원소를 2개씩 채워나간다. 첫 번째 원소를 채운 후, 이에 맞게 백트래킹을 진행하여 두번째 원소를 채우고, 다음단계로 넘어간다.&lt;/p&gt;
&lt;p&gt;만일 공백의 다음번 좌표가 이미 전 단계에서 채워서 채워져있다면, 그 다음 공백을 채운다.&lt;/p&gt;
&lt;p&gt;이렇게 반복하여, 더이상 남은 공백이 없을 때 정답을 출력한다.&lt;/p&gt;
&lt;p&gt;어제풀때는 그렇게 에러가 나더니 오늘은 술술 풀려서 더 짜증난다.&lt;/p&gt;</description></item><item><title>A와B 2</title><link>https://log.j2234.cc/posts/2022-tistory/162-a%EC%99%80b-2/</link><pubDate>Sat, 13 Aug 2022 19:04:13 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/162-a%EC%99%80b-2/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/12919" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/12919&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;12919번: A와 B 2수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈www.acmicpc.net&lt;/p&gt;
&lt;p&gt;생각보다 어려운 문제였다.&lt;/p&gt;
&lt;p&gt;생각해야될 점은, 1번조건과 2번조건 중 어느조건을 선택해야하는지 모른다는 것이다.&lt;/p&gt;
&lt;p&gt;예제인&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dns" data-lang="dns"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;ABABA&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;를 볼때,&lt;/p&gt;
&lt;p&gt;BABA의 첫번째문자는 B이므로 2번 조건이 될 수 도 있고, 마지막에 A이므로 1번 조건이 될 수 도 있다.&lt;/p&gt;
&lt;p&gt;따라서 두가지 경우를 모두 탐색해야 한다.&lt;/p&gt;</description></item><item><title>16197 두동전</title><link>https://log.j2234.cc/posts/2022-tistory/160-16197-%EB%91%90%EB%8F%99%EC%A0%84/</link><pubDate>Wed, 10 Aug 2022 20:32:45 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/160-16197-%EB%91%90%EB%8F%99%EC%A0%84/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/16197" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/16197&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16197번: 두 동전N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고,www.acmicpc.net&lt;/p&gt;
&lt;p&gt;bfs를 두 동전으로 하면 된다&lt;/p&gt;
&lt;p&gt;방문처리를 안하고도 풀 수있지만, 시간이 어마어마하계 걸린다.&lt;/p&gt;
&lt;p&gt;나는 따로 방문배열을 만든 것이 아니라, set에 각 동전에 위치를 넣고, 비교하는 방식으로 했다.&lt;/p&gt;
&lt;p&gt;60%에서 계속 에러가 나서 고민했는데, 최대10번까지 허용인데 11번까지 허용해서 그랬다.&lt;/p&gt;
&lt;p&gt;즉, 11번하면 정답인 경우에는 -1을 출력해야한다.&lt;/p&gt;</description></item><item><title>9019 DSLR</title><link>https://log.j2234.cc/posts/2022-tistory/158-9019-dslr/</link><pubDate>Tue, 09 Aug 2022 20:22:59 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/158-9019-dslr/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/9019" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/9019&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9019번: DSLR네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에www.acmicpc.net&lt;/p&gt;
&lt;p&gt;간단한? dfs문제&lt;/p&gt;
&lt;p&gt;처음에는 L,R을 string으로 구현하려 했었지만,&lt;/p&gt;
&lt;p&gt;생각해보니 그냥 10으로 나누거나(몫) 곱해주고, 끝자리나 첫자리만 따로 처리해서 더해주면 된다.&lt;/p&gt;
&lt;p&gt;파이썬은 느려서 pypy로 제출했다. 파이썬으로 푼 사람이 3명밖에없다!!&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from collections import dequeimport &lt;span class="nv"&gt;sysinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sys.stdin.readlinedef D&lt;span class="o"&gt;(&lt;/span&gt;n:int&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;rv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;n&lt;span class="s"&gt;&amp;lt;&amp;lt;1 if rv&amp;gt;9999: rv%=1&lt;/span&gt;&lt;span class="m"&gt;0000&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; rvdef S&lt;span class="o"&gt;(&lt;/span&gt;n:int&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="nv"&gt;rv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;n-1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;rv&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;-1: &lt;span class="nv"&gt;rv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;9999&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; rvdef L&lt;span class="o"&gt;(&lt;/span&gt;n:int&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a,b&lt;span class="o"&gt;=&lt;/span&gt;divmod&lt;span class="o"&gt;(&lt;/span&gt;n,1000&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#첫자리, 나머지3자리 rv=(b*10)+a #세지리 값 변경, 첫자리값넣기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; rvdef R&lt;span class="o"&gt;(&lt;/span&gt;n:int&lt;span class="o"&gt;)&lt;/span&gt;: a,b&lt;span class="o"&gt;=&lt;/span&gt;divmod&lt;span class="o"&gt;(&lt;/span&gt;n,10&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#나머지3자리, 끝자리 rv=b*1000+a #앞세자리&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;rvdd&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;D&amp;#39;&lt;/span&gt;:D, &lt;span class="s1"&gt;&amp;#39;S&amp;#39;&lt;/span&gt;:S, &lt;span class="s1"&gt;&amp;#39;L&amp;#39;&lt;/span&gt;:L, &lt;span class="s1"&gt;&amp;#39;R&amp;#39;&lt;/span&gt;:R,&lt;span class="o"&gt;}&lt;/span&gt;def bfs&lt;span class="o"&gt;(&lt;/span&gt;start,end&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;None &lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;10000&lt;span class="o"&gt;)]&lt;/span&gt; arr&lt;span class="o"&gt;[&lt;/span&gt;start&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;deque&lt;span class="o"&gt;([&lt;/span&gt;start&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; q: &lt;span class="nv"&gt;now&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;q.popleft&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; k,v in dd.items&lt;span class="o"&gt;()&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;next&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; v&lt;span class="o"&gt;(&lt;/span&gt;now&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; 0&amp;lt;&lt;span class="o"&gt;=&lt;/span&gt;next&amp;lt;&lt;span class="m"&gt;10000&lt;/span&gt; and arr&lt;span class="o"&gt;[&lt;/span&gt;next&lt;span class="o"&gt;]==&lt;/span&gt;None:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; arr&lt;span class="o"&gt;[&lt;/span&gt;next&lt;span class="o"&gt;]=&lt;/span&gt;arr&lt;span class="o"&gt;[&lt;/span&gt;now&lt;span class="o"&gt;]&lt;/span&gt;+k q.append&lt;span class="o"&gt;(&lt;/span&gt;next&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;next&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;end: print&lt;span class="o"&gt;(&lt;/span&gt;arr&lt;span class="o"&gt;[&lt;/span&gt;end&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; _ in range&lt;span class="o"&gt;(&lt;/span&gt;int&lt;span class="o"&gt;(&lt;/span&gt;input&lt;span class="o"&gt;()))&lt;/span&gt;: start,end&lt;span class="o"&gt;=&lt;/span&gt;map&lt;span class="o"&gt;(&lt;/span&gt;int,input&lt;span class="o"&gt;()&lt;/span&gt;.split&lt;span class="o"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bfs&lt;span class="o"&gt;(&lt;/span&gt;start,end&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>6087레이저통신</title><link>https://log.j2234.cc/posts/2022-tistory/155-6087%EB%A0%88%EC%9D%B4%EC%A0%80%ED%86%B5%EC%8B%A0/</link><pubDate>Mon, 08 Aug 2022 22:34:04 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/155-6087%EB%A0%88%EC%9D%B4%EC%A0%80%ED%86%B5%EC%8B%A0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/6087" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/6087&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6087번: 레이저 통신크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 &amp;lsquo;C&amp;rsquo;로 표시되어 있는 칸이다. &amp;lsquo;C&amp;rsquo;로 표시되어 있는 두 칸을 레이저로 통신하기 위해서www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음엔, 모든 방향으로 더이상갈수없을때까지 bfs를 반복하다보면 답이 나올거라 생각했다.&lt;/p&gt;
&lt;p&gt;근데 50%정도에서 계속 틀려서 반례를보니깐&lt;/p&gt;
&lt;p&gt;4 4C&amp;hellip;&amp;hellip;.&lt;strong&gt;..&lt;/strong&gt;.C&lt;/p&gt;
&lt;p&gt;다음과같은반례가 있었다.&lt;/p&gt;
&lt;p&gt;요점은, 한 지점에 도착하는 최소경로가, 방향에 따라 최적의 정답이 아닐 수 있다는 것이다.&lt;/p&gt;
&lt;p&gt;따라서, 만일 bfs를 진행하다가, 다음 방문점이 지금의 방문점보다 클때만 탐색을 진행하고, 만일 크다면 덮어쓰는것이다.&lt;/p&gt;</description></item><item><title>사용자</title><link>https://log.j2234.cc/posts/2022-tistory/153-%EC%82%AC%EC%9A%A9%EC%9E%90/</link><pubDate>Sun, 07 Aug 2022 22:00:25 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/153-%EC%82%AC%EC%9A%A9%EC%9E%90/</guid><description>&lt;p&gt;id = id정보가져옴 (userid, groupid, groups)&lt;/p&gt;
&lt;p&gt;who = 누가 여기 접속해있는가?&lt;/p&gt;
&lt;p&gt;su[option][username] = 유저변경 암것도안주면 루트로&lt;/p&gt;
&lt;p&gt;sudo passwd -u root = 루트에 잠금걸려있는경우 풀기&lt;/p&gt;
&lt;p&gt;sudo passwd -l root = 잠금걸기&lt;/p&gt;
&lt;p&gt;사용자의 추가 (sudo필요)&lt;/p&gt;
&lt;p&gt;useradd -m [name] 사용자의 홈디렉토리까지 만들어줌&lt;/p&gt;
&lt;p&gt;passwd [name] 사용자 비밀번호 지정&lt;/p&gt;
&lt;p&gt;sudo usermod -a -G sudo [nusername] = 사용자에게 sudo권한주기 (sudo그룹에 추가)&lt;/p&gt;
&lt;p&gt;권한 (permission)&lt;/p&gt;
&lt;p&gt;-rw-rw-r&amp;ndash; 1 ubuntu ubuntu 3 Aug 7 12:10 perm.txt&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;= type&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;rw-rw-r&amp;ndash; = access mode&lt;/p&gt;</description></item><item><title>실행</title><link>https://log.j2234.cc/posts/2022-tistory/150-%EC%8B%A4%ED%96%89/</link><pubDate>Sat, 30 Jul 2022 21:52:43 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/150-%EC%8B%A4%ED%96%89/</guid><description>&lt;p&gt;vim 실행중 ctrl-z를 통하여 백그라운드로 전환 가능&lt;/p&gt;
&lt;p&gt;이후에 fg명령을 통해서 포그라운드로 전환 가능&lt;/p&gt;
&lt;p&gt;jobs라는 명령어를 통해서 백그라운드에 있는 프로세스를 볼 수 있음&lt;/p&gt;
&lt;p&gt;fg %[숫자] 명령어를 통하여 fg명령으로 실행할 프로세스를 결정할 수 있음&lt;/p&gt;
&lt;p&gt;kill %[숫자]를 통하여 프로세스 종료 가능 -9 강제종료 -15 안전종료&lt;/p&gt;
&lt;p&gt;ls -alR / &amp;gt;result.txt 2&amp;gt;error.log &amp;amp;&lt;/p&gt;
&lt;p&gt;&amp;amp; 명령어를 통해 진행중인 작업을 백그라운드에서 실행 (종료되면 알려줌)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;daemon이란?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;항상 실행되고 있는 프로그램 냉장고를 생각&lt;/p&gt;
&lt;p&gt;서버 등&lt;/p&gt;
&lt;p&gt;/etc/init.d/ 에 위치해있음 (데몬이 위치하는 디렉토리)&lt;/p&gt;</description></item><item><title>파일을 찾는 법</title><link>https://log.j2234.cc/posts/2022-tistory/149-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%B0%BE%EB%8A%94-%EB%B2%95/</link><pubDate>Sat, 30 Jul 2022 19:51:33 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/149-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%B0%BE%EB%8A%94-%EB%B2%95/</guid><description>&lt;p&gt;locate&lt;/p&gt;
&lt;p&gt;디렉토리를 뒤지지 않고, 파일정보가 있는 데이터베이스를 뒤짐&lt;/p&gt;
&lt;p&gt;find&lt;/p&gt;
&lt;p&gt;디렉토리를 뒤지면서 파일을 가져옴&lt;/p&gt;
&lt;p&gt;find /-name &amp;lsquo;.log&amp;rsquo; ==루트 디렉토리 안에 .log 파일을 찾아라&lt;/p&gt;
&lt;p&gt;whereis&lt;/p&gt;
&lt;p&gt;실행파일을 찾는 명령&lt;/p&gt;
&lt;p&gt;echo $PATH를 통하여, PATH 경로를 볼 수 있음&lt;/p&gt;
&lt;p&gt;PATH에서 명령어를 발견하면, 실행하게 됨&lt;/p&gt;</description></item><item><title>프로세스</title><link>https://log.j2234.cc/posts/2022-tistory/148-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4/</link><pubDate>Sat, 30 Jul 2022 19:30:12 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/148-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4/</guid><description>&lt;p&gt;기본용어&lt;/p&gt;
&lt;p&gt;ssd,hdd =저장장치 storage&lt;/p&gt;
&lt;p&gt;ram = memory&lt;/p&gt;
&lt;p&gt;cpu = 중앙처리장치&lt;/p&gt;
&lt;p&gt;이런것들을 포괄적으로 processor라고 부름&lt;/p&gt;
&lt;p&gt;memory와 storage는 정보를 저장한다는 공통점이 있다.&lt;/p&gt;
&lt;p&gt;cpu는 매우 빠르게 동작하므로, storage가 가진 속도로는 cpu의 처리속도를 따라올 수 없다.&lt;/p&gt;
&lt;p&gt;그래서, storage에 있는 프로그램을 사용할 때는, 프로그램을 메모리에 적재한다. 이 메모리를 cpu가 읽어 동작한다.&lt;/p&gt;
&lt;p&gt;process란?&lt;/p&gt;
&lt;p&gt;mkdir,top,rm &amp;hellip;. 등의 명령어는 /bin, /sbin등의 파일, 즉 storage에 저장되어있다. 이걸 프로그램이라 한다.&lt;/p&gt;
&lt;p&gt;이 프로그램을 실행하면, 프로그램이 memory에 적재되어 cpu에 의해서 처리되게된다. 이 상태를 프로세스라 한다.&lt;/p&gt;</description></item><item><title>shell script &amp; 디렉토리</title><link>https://log.j2234.cc/posts/2022-tistory/147-shell-script--%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC/</link><pubDate>Thu, 28 Jul 2022 20:47:00 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/147-shell-script--%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC/</guid><description>&lt;p&gt;쉘 명령어들 실행시키는 파일&lt;/p&gt;
&lt;p&gt;#!/bin/bash =&amp;gt; 밑에 작성되는 코드들이 /bin/bash를 통해 실행될 것임&lt;/p&gt;
&lt;p&gt;if ! [ -d bak ]; =&amp;gt; 현재 디렉토리에 bak라는 디렉토리가 존재하지 않는다면&lt;/p&gt;
&lt;p&gt;mkdir bak =&amp;gt; bak라는 디렉토리를 만들어라&lt;/p&gt;
&lt;p&gt;fi =&amp;gt; 조건문 종료&lt;/p&gt;
&lt;p&gt;cp *.log bak =&amp;gt; 현재 디렉토리의 모든 .log 파일을 bak 복사해라&lt;/p&gt;
&lt;p&gt;디렉토리&lt;/p&gt;
&lt;p&gt;/ (루트)를 기준으로 트리 형식&lt;/p&gt;
&lt;p&gt;/bin =&amp;gt; user binaries 사용자들이 사용하는 명령어들 위치&lt;/p&gt;
&lt;p&gt;/sbin =&amp;gt; system binaries 시스템이 사용하는 명령어 위치&lt;/p&gt;
&lt;p&gt;/etc =&amp;gt; configuration files 설정 파일&lt;/p&gt;</description></item><item><title>16954 움직이는 미로 탈출</title><link>https://log.j2234.cc/posts/2022-tistory/146-16954-%EC%9B%80%EC%A7%81%EC%9D%B4%EB%8A%94-%EB%AF%B8%EB%A1%9C-%ED%83%88%EC%B6%9C/</link><pubDate>Wed, 27 Jul 2022 21:20:25 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/146-16954-%EC%9B%80%EC%A7%81%EC%9D%B4%EB%8A%94-%EB%AF%B8%EB%A1%9C-%ED%83%88%EC%B6%9C/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/16954" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/16954&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16954번: 움직이는 미로 탈출욱제는 학교 숙제로 크기가 8×8인 체스판에서 탈출하는 게임을 만들었다. 체스판의 모든 칸은 빈 칸 또는 벽 중 하나이다. 욱제의 캐릭터는 가장 왼쪽 아랫 칸에 있고, 이 캐릭터는 가장 오른쪽www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에는 그래프를 통한 bfs를 생각했지만, 배열도 만들지 않고 풀었다.&lt;/p&gt;
&lt;p&gt;아이디어만 알면 진짜 간단하다.&lt;/p&gt;
&lt;p&gt;먼져, 벽의 위치를 집합에 넣는다.&lt;/p&gt;
&lt;p&gt;이후 7번 (어느 벽이던 7번 턴이 지나면 사라지므로) 반복문을 돌며 bfs를 하는데,&lt;/p&gt;
&lt;p&gt;다음 노드를 큐에 끝에 넣지 않고 임시집합에 넣는다.&lt;/p&gt;</description></item><item><title>정규표현식 기본</title><link>https://log.j2234.cc/posts/2022-tistory/145-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-%EA%B8%B0%EB%B3%B8/</link><pubDate>Tue, 26 Jul 2022 15:52:10 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/145-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-%EA%B8%B0%EB%B3%B8/</guid><description>&lt;p&gt;&lt;a href="http://zvon.org/comp/r/tut-Regexp.html#Pages~Page_1" target="_blank" rel="noreferrer"&gt;http://zvon.org/comp/r/tut-Regexp.html#Pages~Page_1&lt;/a&gt; 참고함&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;위치와 이스케이핑&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;^ = ^ 뒤에 있는 패턴이 시작되는 부분에 있는것 검출&lt;/p&gt;
&lt;p&gt;^ who = who로 시작하는거 검출&lt;/p&gt;
&lt;p&gt;$ = $뒤에있는 패턴이 끝나는 부분인거 검출&lt;/p&gt;
&lt;p&gt;who$ = $who로 끝나는거 검출&lt;/p&gt;
&lt;p&gt;만일 ^,$가 소스상에 있다면? : 역슬래시를 해준다. (이스케이프)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;모든문자&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;. (점) 은 모든 문자를 의미&lt;/p&gt;
&lt;p&gt;&amp;hellip;.. 어떠한것도 상관없이 5개의 문자를 가지고있는거&lt;/p&gt;
&lt;p&gt;만일 . 을 찾으려면 이스케이프!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;특정문자&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[] 사용 (문자 하나를 해당)&lt;/p&gt;
&lt;p&gt;[-] = range&lt;/p&gt;
&lt;p&gt;[a-Z] = a부터 Z까지의 모든 문자 [c-ka-d2-6] = c에서 k, a에서 d, 2에서 6까지의 모든문자&lt;/p&gt;</description></item><item><title>mysql 한번에끝내기</title><link>https://log.j2234.cc/posts/2022-tistory/144-mysql-%ED%95%9C%EB%B2%88%EC%97%90%EB%81%9D%EB%82%B4%EA%B8%B0/</link><pubDate>Mon, 25 Jul 2022 23:12:09 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/144-mysql-%ED%95%9C%EB%B2%88%EC%97%90%EB%81%9D%EB%82%B4%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=vgIc4ctNFbc" target="_blank" rel="noreferrer"&gt;https://www.youtube.com/watch?v=vgIc4ctNFbc&lt;/a&gt; 참고함&lt;/p&gt;
&lt;p&gt;DML : 데이터 조작(crud) 하는데 사용&lt;/p&gt;
&lt;p&gt;DDL : 데이터 정의 (create,drop,alter) 하는데 사용&lt;/p&gt;
&lt;p&gt;DCL :데이터 컨트롤(제어) Grant,REVOKE &amp;hellip;. (권한)&lt;/p&gt;
&lt;p&gt;기본적인 mysql의 world db 사용&lt;/p&gt;
&lt;p&gt;SHOW DATABASES :현재 서버에 있는 모든 db 조회&lt;/p&gt;
&lt;p&gt;USE world : world db를 사용하겠다.&lt;/p&gt;
&lt;p&gt;show tablews ; wolrd의 테이블 보기 status 붙이면 정보까지&lt;/p&gt;
&lt;p&gt;describe [tablename] 테이블 정보 보기 (줄여서 desc)&lt;/p&gt;
&lt;p&gt;SELECT&lt;/p&gt;
&lt;p&gt;where : 조건&lt;/p&gt;
&lt;p&gt;관계연산자 사용 가능&lt;/p&gt;
&lt;p&gt;or, and , 조건연산자, not, 등&lt;/p&gt;
&lt;p&gt;EX)7000000~8000000인구수의 도시 검색&lt;/p&gt;</description></item><item><title>14466소가길을건너간이유6</title><link>https://log.j2234.cc/posts/2022-tistory/143-14466%EC%86%8C%EA%B0%80%EA%B8%B8%EC%9D%84%EA%B1%B4%EB%84%88%EA%B0%84%EC%9D%B4%EC%9C%A06/</link><pubDate>Tue, 19 Jul 2022 22:36:44 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/143-14466%EC%86%8C%EA%B0%80%EA%B8%B8%EC%9D%84%EA%B1%B4%EB%84%88%EA%B0%84%EC%9D%B4%EC%9C%A06/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14466" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14466&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14466번: 소가 길을 건너간 이유 6첫 줄에 N, K, R이 주어진다. 다음 R줄에는 한 줄에 하나씩 길이 주어진다. 길은 상하좌우로 인접한 두 목초지를 잇고, r c r′ c′의 형태 (행, 열, 행, 열)로 주어진다. 각 수는 1 이상 N 이하이다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음엔 단순히 모든 소에 대해 bfs를 실행하여, 만나지못하는 모든 소를 구하고,&lt;/p&gt;
&lt;p&gt;만난소+1(자신) 에다가 만나지못한 모든소를 곱해준다음, 쌍이니 2로 나눠주는식으로 구했다.&lt;/p&gt;
&lt;p&gt;이렇게 통과를 하긴 했는데, 다른사람들정답을 보니 전부나보다 빨랐다. (1048ms나옴)&lt;/p&gt;</description></item><item><title>Drawer메뉴 &amp; BuildContext</title><link>https://log.j2234.cc/posts/2022-tistory/142-drawer%EB%A9%94%EB%89%B4--buildcontext/</link><pubDate>Tue, 19 Jul 2022 16:36:49 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/142-drawer%EB%A9%94%EB%89%B4--buildcontext/</guid><description>&lt;p&gt;leading: 아이콘버튼이나 간단한 위젯을 왼쪽에 배치할 때&lt;/p&gt;
&lt;p&gt;trailing: 오른쪽에 배치&lt;/p&gt;
&lt;p&gt;actions: 복수의 아이콘 버튼 등을 오른쪽에 배치할 때&lt;/p&gt;
&lt;p&gt;onpressed: 함수의 형태로 (eventlisenter)&lt;/p&gt;
&lt;p&gt;Drawer: 왼쪽에 누르면 나오는 메뉴&lt;/p&gt;
&lt;p&gt;BuildContext란?&lt;/p&gt;
&lt;p&gt;1.widget tree에서 현재 위젯의 위치를 알 수 있는 정보&lt;/p&gt;
&lt;p&gt;build-&amp;gt;scaffold wiget 리턴 이때 이게 어디에 위치하는지의 정보를 담은 context를 넣어서 리턴해줌&lt;/p&gt;
&lt;p&gt;2.이 BuildContext는 stateless | state 빌드 메서드에 의해서 리턴 된 위젯의 부모가 됨 (부모걸 상속받음)&lt;/p&gt;</description></item><item><title>플러터 기본 위젯</title><link>https://log.j2234.cc/posts/2022-tistory/141-%ED%94%8C%EB%9F%AC%ED%84%B0-%EA%B8%B0%EB%B3%B8-%EC%9C%84%EC%A0%AF/</link><pubDate>Mon, 18 Jul 2022 22:54:13 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/141-%ED%94%8C%EB%9F%AC%ED%84%B0-%EA%B8%B0%EB%B3%B8-%EC%9C%84%EC%A0%AF/</guid><description>&lt;p&gt;위젯이 tree구조로 이루어져있다.&lt;/p&gt;
&lt;p&gt;변화없으면 stateless stateful&lt;/p&gt;
&lt;p&gt;myapp (root)&lt;/p&gt;
&lt;p&gt;MaterialApp 전체앱을 감싸는 위젯&lt;/p&gt;
&lt;p&gt;MyHomePage 기능,디자인들이 만들어짐&lt;/p&gt;
&lt;p&gt;Scaffold (중요!) 앱화면과 기능을 구성하기 위한 빈 페이지를 준비&lt;/p&gt;
&lt;p&gt;이 밑으로 모든 위젯들이 들어감&lt;/p&gt;
&lt;p&gt;중요! 수정할때 항상 밑에괄호부터 지울것&lt;/p&gt;
&lt;p&gt;mainAxisAlignment= 현재 주 축에서 정렬 ex) column이면 세로축에서 정렬&lt;/p&gt;
&lt;p&gt;crossAxisAlignment=보조축정렬&lt;/p&gt;
&lt;p&gt;Sizedbox=공백만들기&lt;/p&gt;
&lt;p&gt;pubspec.yaml ==설정 (들여쓰기 중요)&lt;/p&gt;
&lt;p&gt;asset을 통하여 이미지 삽입&lt;/p&gt;
&lt;p&gt;안드로이드스튜디오에서 에뮬레이터를 만들었으면,&lt;/p&gt;
&lt;p&gt;그 폴더에 vsc로도 실행가능!&lt;/p&gt;</description></item><item><title>2206 벽부수고 이동하기</title><link>https://log.j2234.cc/posts/2022-tistory/140-2206-%EB%B2%BD%EB%B6%80%EC%88%98%EA%B3%A0-%EC%9D%B4%EB%8F%99%ED%95%98%EA%B8%B0/</link><pubDate>Thu, 14 Jul 2022 17:07:02 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/140-2206-%EB%B2%BD%EB%B6%80%EC%88%98%EA%B3%A0-%EC%9D%B4%EB%8F%99%ED%95%98%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2206" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2206&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2206번: 벽 부수고 이동하기N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로www.acmicpc.net&lt;/p&gt;
&lt;p&gt;가장 기본적인 방식&lt;/p&gt;
&lt;p&gt;visited 2차원배열에, 한차원을 더 추가하여&lt;/p&gt;
&lt;p&gt;벽을 부쉈는지를 판별한다.&lt;/p&gt;
&lt;p&gt;만일 벽을 부쉈다면, 앞으로 벽을 부수지 못할 것이고,&lt;/p&gt;
&lt;p&gt;벽을 부수지 않았다면, 벽을 부순 대신 벽을 부순 차원으로 넘어간다.&lt;/p&gt;
&lt;p&gt;이렇게 가장 먼저 n-1,m-1에 도착한 요소를 찾아 +1 해주고 print(해주면된다.)&lt;/p&gt;</description></item><item><title>아기상어</title><link>https://log.j2234.cc/posts/2022-tistory/139-%EC%95%84%EA%B8%B0%EC%83%81%EC%96%B4/</link><pubDate>Wed, 13 Jul 2022 12:54:13 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/139-%EC%95%84%EA%B8%B0%EC%83%81%EC%96%B4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/16236" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/16236&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16236번: 아기 상어N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가www.acmicpc.net&lt;/p&gt;
&lt;p&gt;가장 어려웠던 조건이&lt;/p&gt;
&lt;p&gt;거리가 가까운 물고기가 많다면, 가장 위에 있는 물고기, 그러한 물고기가 여러마리라면, 가장 왼쪽에 있는 물고기를 먹는다&lt;/p&gt;
&lt;p&gt;였다.&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;lsquo;해당 거리에서 먹을수 있는 모든 물고기들&amp;rsquo; 을 모아놓고,&lt;/p&gt;</description></item><item><title>5430 AC</title><link>https://log.j2234.cc/posts/2022-tistory/138-5430-ac/</link><pubDate>Tue, 12 Jul 2022 15:41:23 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/138-5430-ac/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/5430" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/5430&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5430번: AC각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;푸른건안어려웠는데 빈 배열이 주어질 경우 예외처리때문에 한참을 헤멨다.&lt;/p&gt;
&lt;p&gt;중요한건 실제로 뒤집는게 아니라&lt;/p&gt;
&lt;p&gt;boolean 변수 하나를 두고&lt;/p&gt;
&lt;p&gt;뒤집는걸 실제로 뒤집는게 아니라&lt;/p&gt;
&lt;p&gt;popleft, pop 으로 구현한다&lt;/p&gt;
&lt;p&gt;그후 만일 뒤집힌 상태면 리스트를 거꾸로 출력만하면 된다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysfrom&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;dequeinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;# 상태바 0은정상 1은 뒤집힌상태 for i in p:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;R&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="o"&gt;^=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;#0이면 1로, 1이면 0으로 continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#버리는연산일경우 if not l: #비어있으면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;error&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#뒤집힌상태면 l.pop() #뒤에서빼고&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#아니면 l.popleft() #앞에서뺌&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;,&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rstrip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rstrip&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>3190뱀</title><link>https://log.j2234.cc/posts/2022-tistory/137-3190%EB%B1%80/</link><pubDate>Mon, 11 Jul 2022 20:14:42 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/137-3190%EB%B1%80/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/3190" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/3190&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3190번: 뱀&amp;rsquo;Dummy&amp;rsquo; 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임www.acmicpc.net&lt;/p&gt;
&lt;p&gt;그냥구현이다&lt;/p&gt;
&lt;p&gt;하나 아쉬운점은 따로 뱀을 사전으로 나타내지 않고&lt;/p&gt;
&lt;p&gt;그냥 arr에 나타내면 더 빠르다.&lt;/p&gt;
&lt;p&gt;이게 더 간단한데 내가 왜 사전을 썼는지 몰겠다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlinefrom&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;dequen&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;#방향변환정보&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#가로세로좌표dd=[[0,1],[1,0],[0,-1],[-1,0]] #보고있는방향d=0 #방향 (첨에오른쪽)t=0 #시간&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;snake&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;([(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt; &lt;span class="c1"&gt;#뱀본체ss=dict() #뱀위치장용ss[(0,0)]=1while True: t+=1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#벽이나 자기자신과 부딪치지 않았다면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;snake&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="c1"&gt;# 이동한 칸에 사과가 없다면 tmp=snake.popleft() #꼬리자르기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;del&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;#꼬리자르기 else: arr[r][c]=0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#종료 break if t in info: #방향정보변환이 있다면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;L&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;-=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;#여기까지print(t)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>1461 도서관</title><link>https://log.j2234.cc/posts/2022-tistory/136-1461-%EB%8F%84%EC%84%9C%EA%B4%80/</link><pubDate>Sun, 10 Jul 2022 22:18:20 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/136-1461-%EB%8F%84%EC%84%9C%EA%B4%80/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1461" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1461&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1461번: 도서관세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책www.acmicpc.net&lt;/p&gt;
&lt;p&gt;쉬운문제였는데 생각이 너무많아서 어렵게풀었다.&lt;/p&gt;
&lt;p&gt;먼져, 음수와 양수를 각각 리스트에넣고 음수는 abs해준다. 이를 거꾸로 정렬한다.&lt;/p&gt;
&lt;p&gt;그 후, 각각 길이//m, 길이%m을 구한다. (a,b)&lt;/p&gt;
&lt;p&gt;a만큼 반복문을 돌면서 (a-1까지)&lt;/p&gt;
&lt;p&gt;각 배열[i*m](그 범위에서의 최댓값) 의 2배(왕복) 정답에 더해주다&lt;/p&gt;
&lt;p&gt;만약 b가 있다면,&lt;/p&gt;
&lt;p&gt;더 처리할 원소가 있으므로&lt;/p&gt;</description></item><item><title>14503 로봇 청소기</title><link>https://log.j2234.cc/posts/2022-tistory/135-14503-%EB%A1%9C%EB%B4%87-%EC%B2%AD%EC%86%8C%EA%B8%B0/</link><pubDate>Sun, 10 Jul 2022 16:49:46 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/135-14503-%EB%A1%9C%EB%B4%87-%EC%B2%AD%EC%86%8C%EA%B8%B0/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlinen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())])&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="c1"&gt;#방향&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;mv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="c1"&gt;#방향왼쪽으로 d-=mv if d&amp;lt;0: d=4+d return dcnt=0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#현재칸이 비어있다면 arr[r][c]=&amp;#39;#&amp;#39; #청소하고&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;#청소한칸+=1 next_d=dd(d) #현재의 왼쪽방향 a,b=ddd[next_d]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="c1"&gt;#왼쪽칸좌표 if not arr[rr][cc]: #왼쪽이 비어있다면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt; &lt;span class="c1"&gt;# 다음 반복에 그 칸으로 이동 d=next_d # 방향바꿈 cnt=0 #카운트 초기화&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;#왼쪽이 차있다면 if cnt&amp;lt;4: #4번이하라면,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;next_d&lt;/span&gt; &lt;span class="c1"&gt;#방향만 바꿈 cnt+=1 #횟수올려줌&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#4번연속 방향만 바꿨다면 next_d=dd(d,2) #뒤쪽을 탐색&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ddd&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;next_d&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;rr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rr&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#벽이라면 break #끗&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#벽이아니라면 cnt=0 #카운트초기화&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt; &lt;span class="c1"&gt;#다음반복때 들어갈 칸print(answer)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14503" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14503&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14503번: 로봇 청소기로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어www.acmicpc.net&lt;/p&gt;</description></item><item><title>1927 최소힙</title><link>https://log.j2234.cc/posts/2022-tistory/134-1927-%EC%B5%9C%EC%86%8C%ED%9E%99/</link><pubDate>Thu, 07 Jul 2022 14:05:32 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/134-1927-%EC%B5%9C%EC%86%8C%ED%9E%99/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1927" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1927&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;힙2&lt;/p&gt;
&lt;p&gt;힙1과 같음&lt;/p&gt;
&lt;p&gt;구현:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlineheap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;returndef&lt;/span&gt; &lt;span class="n"&gt;rm&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;heapify&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;resdef&lt;/span&gt; &lt;span class="n"&gt;heapify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;heap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;heapify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())):&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rm&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;모듈:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysimport&lt;/span&gt; &lt;span class="n"&gt;heapqinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlineh&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())):&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;heapq&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heappop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;heapq&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heappush&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>11279최대힙</title><link>https://log.j2234.cc/posts/2022-tistory/133-11279%EC%B5%9C%EB%8C%80%ED%9E%99/</link><pubDate>Wed, 06 Jul 2022 20:36:42 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/133-11279%EC%B5%9C%EB%8C%80%ED%9E%99/</guid><description>&lt;p&gt;오랫만에 글쓴다&lt;/p&gt;
&lt;p&gt;heap은 정말 ㅈ같은 구조이다.&lt;/p&gt;
&lt;p&gt;여서 설명할 자신이 없으니 그냥 나중에 인터넷 다시한번 찾아본다.&lt;/p&gt;
&lt;p&gt;이진트리이며, 배열로 구성되있고, maxheap이므로, 모든 부모는 자식보다 커야한다.&lt;/p&gt;
&lt;p&gt;편의를 위해 배열의 첫 번째는 0이다.&lt;/p&gt;
&lt;p&gt;먼져 insert는, 배열의 마지막에 삽입한다. 이후, 2씩 나눠주며(몫만취함) &amp;ndash;완전 2진트리이므로 2씩나누면 부모임&lt;/p&gt;
&lt;p&gt;부모가 자기보다 큰 원소일때까지 바꿔나간다.(아님루트일때만)&lt;/p&gt;
&lt;p&gt;힙에서 자료를 빼는것이 조금 까다롭다.&lt;/p&gt;
&lt;p&gt;먼져, 루트와 마지막노드를 바꿔준다. 그리고 pop해주면, 일단 빼긴 뺀거다.&lt;/p&gt;
&lt;p&gt;그럼 당연히 마지막 노드는 작을것이므로, heapify()를 수행해준다.&lt;/p&gt;
&lt;p&gt;heapify()란 루트부터 내려가면서 자신의 자식들과 비교하며 자식보다 자기가 작을 경우엔 위치를 바꾼다 &amp;ndash;힙구조를 유지시키는 연산이다&lt;/p&gt;</description></item><item><title>11659 구간합 구하기 4</title><link>https://log.j2234.cc/posts/2022-tistory/132-11659-%EA%B5%AC%EA%B0%84%ED%95%A9-%EA%B5%AC%ED%95%98%EA%B8%B0-4/</link><pubDate>Tue, 05 Jul 2022 23:03:43 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/132-11659-%EA%B5%AC%EA%B0%84%ED%95%A9-%EA%B5%AC%ED%95%98%EA%B8%B0-4/</guid><description>&lt;p&gt;개념만 알면 쉽다&lt;/p&gt;
&lt;p&gt;그냥 리스트로 하면 O(mn) 이 된다.&lt;/p&gt;
&lt;p&gt;참고로 행렬 m개에 대해 n번의 더하기를 수행한다는 뜻이다.&lt;/p&gt;
&lt;p&gt;따라서, 누적합리스트를 생성한다.&lt;/p&gt;
&lt;p&gt;그리고 구간이 주어지면, 끝구간의 값에서 시작구간 값-1을 해주면 된다&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlinel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;tt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>운영체제가 하는 일</title><link>https://log.j2234.cc/posts/2022-tistory/131-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EA%B0%80-%ED%95%98%EB%8A%94-%EC%9D%BC/</link><pubDate>Tue, 05 Jul 2022 17:29:32 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/131-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EA%B0%80-%ED%95%98%EB%8A%94-%EC%9D%BC/</guid><description>&lt;p&gt;OS=OPERATING SYSTEM = 운영체제&lt;/p&gt;
&lt;p&gt;접근제어+동기화+관리&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;프로세스들 관리하기 (자원관리)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;컴퓨터가 &amp;lsquo;국가&amp;rsquo; 라면 운영체제는 &amp;lsquo;정부조직&amp;rsquo; 이다 스레드는 &amp;lsquo;개인&amp;rsquo;이고 프로세스는 &amp;lsquo;가족&amp;rsquo; 이다&lt;/p&gt;
&lt;p&gt;커널영역 - 유저영역&lt;/p&gt;
&lt;p&gt;프로세스는 각자의 전용공간을 가지고 있다. (virtual Memory)&lt;/p&gt;
&lt;p&gt;이 안의 작업단위가 쓰레드임&lt;/p&gt;
&lt;p&gt;따라서, 쓰레드들은 프로세스에게 할당된 전용공간을 공유한다.&lt;/p&gt;
&lt;p&gt;따라서 동기화가 중요하다.&lt;/p&gt;
&lt;p&gt;가장 중요한 전산자원은 cpu와 메모리이다. 운영체제는 이것을 프로세스에게 분배환다.&lt;/p&gt;
&lt;p&gt;이를 분배하는 것을 스케줄링이라 한다.&lt;/p&gt;
&lt;p&gt;쓰레드마다 stack, 프로세스마다 heap과 실행코드 영역을 갖는다.&lt;/p&gt;
&lt;p&gt;가상메모리란?&lt;/p&gt;
&lt;p&gt;RAM과 HDD를 하나의논리적 메모리로 추상화시킨 메모리 관리 방법&lt;/p&gt;</description></item><item><title>간단한 용어정리</title><link>https://log.j2234.cc/posts/2022-tistory/130-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%9A%A9%EC%96%B4%EC%A0%95%EB%A6%AC/</link><pubDate>Tue, 05 Jul 2022 16:56:58 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/130-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%9A%A9%EC%96%B4%EC%A0%95%EB%A6%AC/</guid><description>&lt;p&gt;동시성 = 여러 일을 여러 사람이 각자 동시에 하는 것&lt;/p&gt;
&lt;p&gt;병렬성 = 같은 (혹은 대상이 같은 ) 일을 여러 사람이 동시에 하는 것&lt;/p&gt;
&lt;p&gt;원자성 = 쪼개어 나눌 수 없는 연속된 일&lt;/p&gt;
&lt;p&gt;의존성 = 전제조건 보통 행위나 존립(성립)에 대해 의존성을 고려&lt;/p&gt;
&lt;p&gt;deadlock= 교착상태&lt;/p&gt;</description></item><item><title>자료구조와 알고리즘</title><link>https://log.j2234.cc/posts/2022-tistory/129-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</link><pubDate>Tue, 05 Jul 2022 16:10:28 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/129-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</guid><description>&lt;p&gt;우리가 어떤 정보에 접근하려면, 이 자료에 적절히 접근해야한다.&lt;/p&gt;
&lt;p&gt;이 정보가 저장된 방식이 자료구조, 이에 접근하는 방식이 알고리즘이다.&lt;/p&gt;
&lt;p&gt;다시, &amp;lsquo;일정규칙으로 정리된 자료&amp;rsquo; 가 자료구조이고, 이 구조화된 자료에서 원하는 것을 빨리 찾아내는 방법이 알고리즘이다.&lt;/p&gt;
&lt;p&gt;일열로 되있는 자료구조를 선형구조라고 한다.&lt;/p&gt;
&lt;p&gt;list and linked list&lt;/p&gt;
&lt;p&gt;list(배열)&lt;/p&gt;
&lt;p&gt;배열은 말그대로 자료가 연접함&lt;/p&gt;
&lt;p&gt;그냥 idx증가시키면 다음 자료임&lt;/p&gt;
&lt;p&gt;가장 단순&lt;/p&gt;
&lt;p&gt;크기를 늘리거나 줄이려면 구조를 변경해야함&lt;/p&gt;
&lt;p&gt;중간에 삽입 또는 삭제도 문제&lt;/p&gt;
&lt;p&gt;linked list&lt;/p&gt;
&lt;p&gt;각자 따로 떨어진 자료를 위치정보로 묶은 것&lt;/p&gt;</description></item><item><title>cpu가 작동하는 원리</title><link>https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/</link><pubDate>Tue, 05 Jul 2022 15:34:21 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/</guid><description>&lt;p&gt;반도체는 전기가 흐르는 도체와 흐르지 않는 부도체 성격을 조건에 따라 선택할 수 있다.&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="2378"
 height="946"
 src="https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/img/image-01_hu_c1431d2493e4b96f.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/img/image-01_hu_c1431d2493e4b96f.webp 800w, https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/img/image-01_hu_8e392ad32540a882.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="2546"
 height="1134"
 src="https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/img/image-02_hu_7b5ffe91e8900058.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/img/image-02_hu_7b5ffe91e8900058.webp 800w, https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/img/image-02_hu_efe2abc30cb85892.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/128-cpu%EA%B0%80-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC/img/image-02.webp"&gt;&lt;/figure&gt;
&lt;p&gt;a = 0 0 1 0 (2)&lt;/p&gt;
&lt;p&gt;+b = 0 0 1 1 (3)&lt;/p&gt;
&lt;p&gt;res= 1 0 1 (5)&lt;/p&gt;
&lt;p&gt;빼기일때는? 보수를 더하면 됨&lt;/p&gt;
&lt;p&gt;보수란?&lt;/p&gt;
&lt;p&gt;12-9 =?&lt;/p&gt;
&lt;p&gt;9의 10에대한 보수는 9를 10으로 만들어 줄 수 있는 수이다. 따라서 1&lt;/p&gt;
&lt;p&gt;12에다가 보수인 1을 더하고, 윗자리 숫자를 하나 버림&lt;/p&gt;</description></item><item><title>용량</title><link>https://log.j2234.cc/posts/2022-tistory/127-%EC%9A%A9%EB%9F%89/</link><pubDate>Tue, 05 Jul 2022 15:01:32 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/127-%EC%9A%A9%EB%9F%89/</guid><description>&lt;p&gt;기본 상식 반드시 외울것&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Column 1&lt;/th&gt;
 &lt;th&gt;Column 2&lt;/th&gt;
 &lt;th&gt;Column 3&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;단위&lt;/td&gt;
 &lt;td&gt;크기&lt;/td&gt;
 &lt;td&gt;특징&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1bit&lt;/td&gt;
 &lt;td&gt;전기 스위치 1개 (0,1)&lt;/td&gt;
 &lt;td&gt;용량이 아니라 표한할 수 있는 최소수준&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1Byte&lt;/td&gt;
 &lt;td&gt;8bit 한 묶음&lt;/td&gt;
 &lt;td&gt;영문자 1개, 메모리 관리 단위 (한글은2)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;여기서부턴 알아만 놓자 1024배 증가할땨맏 단위가 바뀐다&lt;/p&gt;
&lt;p&gt;1KB 1024byte&lt;/p&gt;
&lt;p&gt;1MB 1024kb&lt;/p&gt;
&lt;p&gt;1GB 1024mb&lt;/p&gt;
&lt;p&gt;1TB 1024gb&lt;/p&gt;
&lt;p&gt;1PB&lt;/p&gt;
&lt;p&gt;1EB&lt;/p&gt;
&lt;p&gt;1ZB&lt;/p&gt;
&lt;p&gt;1YB&lt;/p&gt;
&lt;p&gt;4비트는 16진수 1자리로 표현이 가능하다. 1비트는 2진수 한 자리 숫자가 되고, &amp;lsquo;4비트&amp;rsquo;를 하나로 묶어 16진수 1자리로 표현&lt;/p&gt;</description></item><item><title>2. 자료형</title><link>https://log.j2234.cc/posts/2022-tistory/126-2.-%EC%9E%90%EB%A3%8C%ED%98%95/</link><pubDate>Mon, 04 Jul 2022 19:08:32 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/126-2.-%EC%9E%90%EB%A3%8C%ED%98%95/</guid><description>&lt;p&gt;자료형이란? 일정 길이의 메모리에 저장된 정보를 해석하는 방법&lt;/p&gt;
&lt;p&gt;자료(정보) -&amp;gt; 수(숫자) 메모리에 보관됨&lt;/p&gt;
&lt;p&gt;관리를 쉽게 하려고 번호를 붙인다.&lt;/p&gt;
&lt;p&gt;하나의 공간에 저장할 수 있는 크기는 1byte (8bit) (영문1글자) 메모리의 최소단위&lt;/p&gt;
&lt;p&gt;이 공간에는 번호가 붙어있으며 우리는 이것을 메모리의 주소라고 부른다.&lt;/p&gt;
&lt;p&gt;변수란?&lt;/p&gt;
&lt;p&gt;-&amp;gt; 아직 확정되지 않은 숫자&lt;/p&gt;
&lt;p&gt;상수란?&lt;/p&gt;
&lt;p&gt;-&amp;gt;확정된 숫자&lt;/p&gt;
&lt;p&gt;c언어에선&lt;/p&gt;
&lt;p&gt;변수-&amp;gt;메모리 반드시 주소를 가지고 있음 이에 저장되어 있는것이 data 이를 해석하는 방법이 자료형&lt;/p&gt;
&lt;p&gt;컴퓨터의 모든 정보는 숫자임 문자로 보여도 숫자임 ord(&amp;lsquo;a)생각&lt;/p&gt;
&lt;p&gt;영어는 1byte 한글은 두배&lt;/p&gt;</description></item><item><title>DHCP</title><link>https://log.j2234.cc/posts/2022-tistory/124-dhcp/</link><pubDate>Mon, 04 Jul 2022 12:48:01 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/124-dhcp/</guid><description>&lt;p&gt;IP를 직접 지정하려면 너무 어려움&lt;/p&gt;
&lt;p&gt;우리가 공유기에 연결되는 순간 각각의 기기에는 동적으로 복잡한 정보들이 설정됨 이를 위해 DHCP서버 필요!&lt;/p&gt;
&lt;p&gt;인터넷을 사용하는 기기에는 DHCP client 프로그램이 깔려있음&lt;/p&gt;
&lt;p&gt;우리가 사용하는 기계의 부품들엔, 공장에서 기록된 고유한 식별자를 가지고 있음&lt;/p&gt;
&lt;p&gt;이것이 MAC ADRRESS임 (physical address)&lt;/p&gt;</description></item><item><title>포트포워딩 해보기</title><link>https://log.j2234.cc/posts/2022-tistory/123-%ED%8F%AC%ED%8A%B8%ED%8F%AC%EC%9B%8C%EB%94%A9-%ED%95%B4%EB%B3%B4%EA%B8%B0/</link><pubDate>Mon, 04 Jul 2022 12:19:37 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/123-%ED%8F%AC%ED%8A%B8%ED%8F%AC%EC%9B%8C%EB%94%A9-%ED%95%B4%EB%B3%B4%EA%B8%B0/</guid><description>&lt;p&gt;맥에 기본적으로 깔려있는 apache를 통해 해보자&lt;/p&gt;
&lt;p&gt;먼져&lt;/p&gt;
&lt;p&gt;$ apachectl -v&lt;/p&gt;
&lt;p&gt;$ php -v&lt;/p&gt;
&lt;p&gt;를 통해 버전을 확인한다&lt;/p&gt;
&lt;p&gt;sudo apachectl start 를 통해 서버를 실행시켜준다&lt;/p&gt;
&lt;p&gt;cd /Library/WebServer/Documents 에 있는 index.html.en 파일을 확인한다&lt;/p&gt;
&lt;p&gt;포트포워딩을 통해 8081 포트로 오면, 내 컴퓨터의 80포트와 연결되게 한다&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="755"
 height="64"
 src="https://log.j2234.cc/posts/2022-tistory/123-%ED%8F%AC%ED%8A%B8%ED%8F%AC%EC%9B%8C%EB%94%A9-%ED%95%B4%EB%B3%B4%EA%B8%B0/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/123-%ED%8F%AC%ED%8A%B8%ED%8F%AC%EC%9B%8C%EB%94%A9-%ED%95%B4%EB%B3%B4%EA%B8%B0/img/image-01.webp 800w, https://log.j2234.cc/posts/2022-tistory/123-%ED%8F%AC%ED%8A%B8%ED%8F%AC%EC%9B%8C%EB%94%A9-%ED%95%B4%EB%B3%B4%EA%B8%B0/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/123-%ED%8F%AC%ED%8A%B8%ED%8F%AC%EC%9B%8C%EB%94%A9-%ED%95%B4%EB%B3%B4%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;이후 어디서나 http://59.26.61.169:8081/ 로 접속하면, 내가 띄운 페이지가 보이게 된다&lt;/p&gt;</description></item><item><title>port &amp; port forwarding</title><link>https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/</link><pubDate>Sun, 03 Jul 2022 23:51:53 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/</guid><description>&lt;p&gt;포트란? 영어로 항구임&lt;/p&gt;
&lt;p&gt;하나의 컴퓨터에는 여러가지 형테의 서버가 있을 수 있다.&lt;/p&gt;
&lt;p&gt;이 서버를 식별하기 위해서는 포트번호가 필요함&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1627"
 height="816"
 src="https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/img/image-01_hu_ea89d22a6786fa2f.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/img/image-01_hu_ea89d22a6786fa2f.webp 800w, https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/img/image-01_hu_fd24d7f066502be7.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;0~1023 well-known-port&lt;/p&gt;
&lt;p&gt;포트포워딩이란?&lt;/p&gt;
&lt;p&gt;우리 서버에 접속하기 위에선, 공유기의 아피이 주소를 알려주는데, 그 아이피로 접속했을때 내 컴퓨터로 연결되게 하는 것&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1920"
 height="785"
 src="https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/img/image-02_hu_c44ac219c3215656.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/img/image-02_hu_c44ac219c3215656.webp 800w, https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/img/image-02_hu_420afe684d5cc65b.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/122-port--port-forwarding/img/image-02.webp"&gt;&lt;/figure&gt;
&lt;p&gt;내 공유기 고급에서 설정!&lt;/p&gt;</description></item><item><title>IP 주소 알아내기</title><link>https://log.j2234.cc/posts/2022-tistory/121-ip-%EC%A3%BC%EC%86%8C-%EC%95%8C%EC%95%84%EB%82%B4%EA%B8%B0/</link><pubDate>Sun, 03 Jul 2022 23:32:26 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/121-ip-%EC%A3%BC%EC%86%8C-%EC%95%8C%EC%95%84%EB%82%B4%EA%B8%B0/</guid><description>&lt;p&gt;맥&lt;/p&gt;
&lt;p&gt;curl ifconfig.me -&amp;gt;외부 (59.26.61.169)&lt;/p&gt;
&lt;p&gt;ipconfig getifaddr en0 -&amp;gt; 내부아이피&lt;/p&gt;
&lt;p&gt;59.26.61.169 로 접속하면 공유기 환경설정이 나옴&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="842"
 height="600"
 src="https://log.j2234.cc/posts/2022-tistory/121-ip-%EC%A3%BC%EC%86%8C-%EC%95%8C%EC%95%84%EB%82%B4%EA%B8%B0/img/image-01_hu_4e073b11745a5323.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/121-ip-%EC%A3%BC%EC%86%8C-%EC%95%8C%EC%95%84%EB%82%B4%EA%B8%B0/img/image-01_hu_4e073b11745a5323.webp 800w, https://log.j2234.cc/posts/2022-tistory/121-ip-%EC%A3%BC%EC%86%8C-%EC%95%8C%EC%95%84%EB%82%B4%EA%B8%B0/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/121-ip-%EC%A3%BC%EC%86%8C-%EC%95%8C%EC%95%84%EB%82%B4%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;내부아이피주소 == gateway address&lt;/p&gt;
&lt;p&gt;외부아이피 주소 == public ip address&lt;/p&gt;</description></item><item><title>NAT</title><link>https://log.j2234.cc/posts/2022-tistory/120-nat/</link><pubDate>Sun, 03 Jul 2022 23:20:14 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/120-nat/</guid><description>&lt;p&gt;Network Address Translation&lt;/p&gt;
&lt;p&gt;우리가 위키피디아에 접속한다면?&lt;/p&gt;
&lt;p&gt;나 -&amp;gt; 공유기에 위키피디아로 가는 요청이 내 내부아이피의 요청이라는 것을 기록 -&amp;gt; 공유기에서 NAT 기술을 통해 public ip로 변경-&amp;gt;&lt;/p&gt;
&lt;p&gt;위키피디아로 보냄&lt;/p&gt;
&lt;p&gt;위키피디아에서 공유기로 응답을 보냄 -&amp;gt; 내 내부아이피가 요청했다는 사실을 파악 -&amp;gt; 나에게 응답&lt;/p&gt;
&lt;p&gt;내 컴퓨터를 서버로 사용한다면????????????????&lt;/p&gt;</description></item><item><title>Router (공유기)</title><link>https://log.j2234.cc/posts/2022-tistory/119-router-%EA%B3%B5%EC%9C%A0%EA%B8%B0/</link><pubDate>Sun, 03 Jul 2022 23:07:20 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/119-router-%EA%B3%B5%EC%9C%A0%EA%B8%B0/</guid><description>&lt;p&gt;IPv4 - 0,0,0,0 ~ 255.255.255.255&lt;/p&gt;
&lt;p&gt;IPv6 - IPv4가 다채워져서 만들어짐&lt;/p&gt;
&lt;p&gt;IP address - 컴퓨터들이 정보를 주고받는데에서 필요&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1880"
 height="860"
 src="https://log.j2234.cc/posts/2022-tistory/119-router-%EA%B3%B5%EC%9C%A0%EA%B8%B0/img/image-01_hu_21536026170d6445.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/119-router-%EA%B3%B5%EC%9C%A0%EA%B8%B0/img/image-01_hu_21536026170d6445.webp 800w, https://log.j2234.cc/posts/2022-tistory/119-router-%EA%B3%B5%EC%9C%A0%EA%B8%B0/img/image-01_hu_348a6720db0d0420.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/119-router-%EA%B3%B5%EC%9C%A0%EA%B8%B0/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;wan (wide area network) = 통신사와 계약해서 받은 케이블 (공유기에 접속) (!! 공용ip !!) public ip&lt;/p&gt;
&lt;p&gt;lan = 공유기에 소속되어있는 컴퓨터들 (공유기 포함) ex)192.168.?. ? (!! 사설ip !!) private ip&lt;/p&gt;</description></item><item><title>vim 에디터</title><link>https://log.j2234.cc/posts/2022-tistory/118-vim-%EC%97%90%EB%94%94%ED%84%B0/</link><pubDate>Sun, 03 Jul 2022 22:20:33 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/118-vim-%EC%97%90%EB%94%94%ED%84%B0/</guid><description>&lt;p&gt;문제겪을때마다 하나씩 추가예정&lt;/p&gt;
&lt;p&gt;set directory: 를 통해 파일경로알수있음&lt;/p&gt;</description></item><item><title>호스트와 컨테이너의 파일시스템 연결</title><link>https://log.j2234.cc/posts/2022-tistory/117-%ED%98%B8%EC%8A%A4%ED%8A%B8%EC%99%80-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%9D%98-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%97%B0%EA%B2%B0/</link><pubDate>Sat, 02 Jul 2022 22:43:04 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/117-%ED%98%B8%EC%8A%A4%ED%8A%B8%EC%99%80-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%9D%98-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%97%B0%EA%B2%B0/</guid><description>&lt;p&gt;&lt;strong&gt;내 컴퓨터의 ~/htdocs 폴더에서 진행 (만듬)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;index.html 파일을 만듬&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;터미널을 열고,&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker run -p 8888:80 -v ~/Desktop/htdocs:/usr/local/apache2/htdocs/ httpd (새로운 컨테이너 만든거임)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;#8888은 이미 jupyter가 사용하고있어서 난 8889포트를 썼더니 됨&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;이제 호스트 파일 안에서 수정하면, 반영됨&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;호스트의 8888:80을 연결하고, 호스트의 /Desktop/htdoc 와 컨테이너의 /usr/local/apache2/htdocs/&lt;/p&gt;
&lt;p&gt;-v 옵션은 volume을 뜻함 container와 host, 또는 또다른 container와 연결할 때 사용&lt;/p&gt;</description></item><item><title>네트워크 &amp; 명령어2</title><link>https://log.j2234.cc/posts/2022-tistory/116-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC--%EB%AA%85%EB%A0%B9%EC%96%B42/</link><pubDate>Sat, 02 Jul 2022 21:56:50 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/116-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC--%EB%AA%85%EB%A0%B9%EC%96%B42/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1767"
 height="831"
 src="https://log.j2234.cc/posts/2022-tistory/116-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC--%EB%AA%85%EB%A0%B9%EC%96%B42/img/image-01_hu_e2d3f0c95999712f.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/116-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC--%EB%AA%85%EB%A0%B9%EC%96%B42/img/image-01_hu_e2d3f0c95999712f.webp 800w, https://log.j2234.cc/posts/2022-tistory/116-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC--%EB%AA%85%EB%A0%B9%EC%96%B42/img/image-01_hu_7dd195181fda527f.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/116-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC--%EB%AA%85%EB%A0%B9%EC%96%B42/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;docker exec [OPTIONS] CONTAINER COMMAND [ARGS&amp;hellip;]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ex) docker exec -it ws3 /bin/sh docker exec -it ws3 /bin/bash(본,배쉬 쉘실행하는명령어 i,t옵션 필요)&lt;/p&gt;
&lt;p&gt;옵션 i와 t는 같이 사용하는 경우가 많은데 i는 –interactive 옵션으로 STDIN(표준입력)으로 컨테이너를 생성 하라는 뜻이다.t는 –tty 옵션으로 영어로 Allocate a pseudo-TTY 라고 설명이 되어있는데 여기서 pseudo-TTY는 유사 터미널로 컨테이너에 터미널 드라이버를 추가하여 컨테이너를 터미널을 이용하여 연결 할 수있도록 하는 옵션이다.정리하자면 i옵션으로 표준 입력을 받으며 t옵션으로 터미널로 연결 가능한 컨테이너를 만드는 것이다&lt;/p&gt;</description></item><item><title>기본 명령어</title><link>https://log.j2234.cc/posts/2022-tistory/115-%EA%B8%B0%EB%B3%B8-%EB%AA%85%EB%A0%B9%EC%96%B4/</link><pubDate>Fri, 01 Jul 2022 00:37:35 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/115-%EA%B8%B0%EB%B3%B8-%EB%AA%85%EB%A0%B9%EC%96%B4/</guid><description>&lt;p&gt;cli&lt;/p&gt;
&lt;p&gt;도커 어플을 실행시키거나 open -a Docker&lt;/p&gt;
&lt;p&gt;명령어 안되면 sudo해볼것&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker run [OPTIONS] IMAGE [COMMAND] [ARGS&amp;hellip;] 컨테이너 실행시키기&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker ps 만든 컨테이너 확인&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;하나의 의미지는 여러 컨테이너로 만들 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker stop [OPTIONS] CONTAINER이름 [CONTAINER&amp;hellip;] 실행중인 컨테이너를 끄기&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker start 컨테이너이름 껐던 컨테이너 실행시키기&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker logs [OPTION] CONTAINER이름 로그 확인 (실시간원하면 -f 옵션 줄것)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker rm [OPTIONS] CONTAINER이름 [CONTAINER&amp;hellip;] 삭제 (실행중인컨테이너면 에러남)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker rmi image이름 (이미지 삭제)&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>도커란?</title><link>https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/</link><pubDate>Fri, 01 Jul 2022 00:20:37 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/</guid><description>&lt;p&gt;vmware같은거라고 생각하면 됨 (서버용)&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1572"
 height="725"
 src="https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/img/image-01_hu_1d1b2dc15fe44e90.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/img/image-01_hu_1d1b2dc15fe44e90.webp 800w, https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/img/image-01_hu_b6926c4f3ecd045.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="964"
 height="592"
 src="https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/img/image-02_hu_810e007ed824b03d.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/img/image-02_hu_810e007ed824b03d.webp 800w, https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/img/image-02.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/114-%EB%8F%84%EC%BB%A4%EB%9E%80/img/image-02.webp"&gt;&lt;/figure&gt;
&lt;p&gt;appstore - program - process 생각&lt;/p&gt;
&lt;p&gt;docker hub - 필요한 소프트웨어를 찾는곳 &lt;a href="https://hub.docker.com/" target="_blank" rel="noreferrer"&gt;https://hub.docker.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;image - docker hub 에서 다운받은거&lt;/p&gt;
&lt;p&gt;container - image를 실행하는거&lt;/p&gt;
&lt;p&gt;docker hub =&amp;gt; image 다운받는거를 Pull&lt;/p&gt;
&lt;p&gt;image =&amp;gt; container 실행시키는것을 run&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker pull [OPTIONS] NAME[:TAG|@DIGEST] 이미지 다운받기&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;docker pull httpd (아파치)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;docker images 이미지를 잘 다운받았는지 확인&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>4일차</title><link>https://log.j2234.cc/posts/2022-tistory/113-4%EC%9D%BC%EC%B0%A8/</link><pubDate>Sat, 18 Jun 2022 00:26:54 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/113-4%EC%9D%BC%EC%B0%A8/</guid><description>&lt;p&gt;헷갈리는 부분&lt;/p&gt;
&lt;p&gt;mainpost=get_object_or_404(Mainpost,pk=mainpost_id)&lt;/p&gt;
&lt;p&gt;form =MainpostForm(request.POST, instance=mainpost)&lt;/p&gt;
&lt;p&gt;Mainpost모델의 form 인 MainpostForm을 불러오는데, instance를 받아온 mainpost로 준다.&lt;/p&gt;
&lt;p&gt;만일 instance를 안받으면, 이는 Mainpost model의 형식만 가져올 것이고, instance를 준다면, 이는 받아온데이터를 원래 있던 데이터에 덮어쓰게 된다.&lt;/p&gt;
&lt;p&gt;이후 form.is_valid()를 통하여 유효하면저장하고, 아니면 에러메시지를 남긴다.&lt;/p&gt;</description></item><item><title>3일차</title><link>https://log.j2234.cc/posts/2022-tistory/112-3%EC%9D%BC%EC%B0%A8/</link><pubDate>Thu, 16 Jun 2022 00:23:38 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/112-3%EC%9D%BC%EC%B0%A8/</guid><description>&lt;p&gt;오늘은 집중을 별로 못했다.&lt;/p&gt;
&lt;p&gt;XMLHttpRequest 를 통해 서버와 비동기 통신을 하여 아이디 중복체크 기능을 만들었다.&lt;/p&gt;
&lt;p&gt;도중 넘어온 json데이터는, json형식이 아닌 문자열 형식으로 온다. 이것땜에 시간을 많이 잡아먹었다. JSON.parse 를 해주면 해결된다.&lt;/p&gt;
&lt;p&gt;이후 대충 부트스트랩 강의와 점프투 장고 강의를 보면서, 틀을 꾸려나가고 있다.&lt;/p&gt;
&lt;p&gt;새로 안 사실인데, 줄바꿈을 나타내주려면, 컨텐츠를 나타낼때 [ |linebreaksbr ] 을 해주면 된다.&lt;/p&gt;
&lt;p&gt;오늘은 이거보다 그냥 유튜브만 본거같다.&lt;/p&gt;
&lt;p&gt;내일 일단 글 수정, 삭제기능을 할 예정이다.&lt;/p&gt;</description></item><item><title>2일차</title><link>https://log.j2234.cc/posts/2022-tistory/111-2%EC%9D%BC%EC%B0%A8/</link><pubDate>Tue, 14 Jun 2022 21:22:25 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/111-2%EC%9D%BC%EC%B0%A8/</guid><description>&lt;p&gt;유저모델은 따로 추가 없이 그냥 auth_user_model사용하기로 했다.&lt;/p&gt;
&lt;p&gt;기본적인 글과 댓글을 남길 수 있는걸 구현하고, 로그인이 필요하도록 했다.&lt;/p&gt;
&lt;p&gt;부트스트랩 강의를 보면서 하나씩 알아가고 있다.&lt;/p&gt;
&lt;p&gt;메인페이지를 만들고, 메인페이지에서 계시판 등의 어플리케이션에 접근 할 수 있도록 할 계획이다.&lt;/p&gt;
&lt;p&gt;일단 내일까진 혼자하고, 목요일엔 어짜피 가야되니깐 진수형한테 함 보여주고 피드백을 받아야겠다.&lt;/p&gt;
&lt;p&gt;이번주에 집에서 usb받아서 노트북에 리눅스 설치하는거 잊지 말자&lt;/p&gt;</description></item><item><title>kdt게시판만들기</title><link>https://log.j2234.cc/posts/2022-tistory/110-kdt%EA%B2%8C%EC%8B%9C%ED%8C%90%EB%A7%8C%EB%93%A4%EA%B8%B0/</link><pubDate>Mon, 13 Jun 2022 21:58:14 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/110-kdt%EA%B2%8C%EC%8B%9C%ED%8C%90%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid><description>&lt;p&gt;오늘부터 kdt게시판을 만들어볼려고한다&lt;/p&gt;
&lt;p&gt;가장 먼저 익명의 계시판을 만들고, 이후에 차차 여러 기능들을 추가할 것이다.&lt;/p&gt;
&lt;p&gt;오늘은 기본적인 백엔드 뼈대만 만들어볼려한다.&lt;/p&gt;
&lt;p&gt;가장먼저 파이썬 가상환경을 만들고, 장고를 설치했다.&lt;/p&gt;
&lt;p&gt;homepage라는 루트 디렉토리 안에, config라는 설정 디렉토리를 만들고, 가장먼저 계시판 board 부터 구현했다.&lt;/p&gt;
&lt;p&gt;settings.py에서 templates폴더 설정을해주고, 앱에 board를 추가시켰다.&lt;/p&gt;
&lt;p&gt;config의 urls.py에서 board를 include해줬다.&lt;/p&gt;
&lt;p&gt;계시글이 될 Mainpost, 답변이 될 Comment 모델을 생성했다.&lt;/p&gt;
&lt;p&gt;makemigrations, migrate를 통해 db에 반영해주고, admin superuser을 생성했다.&lt;/p&gt;
&lt;p&gt;이후 forms를 통해 계시글 form 을 만들고, 이를 통해 계시글을 등록할 수 있게 했다.&lt;/p&gt;</description></item><item><title>3-2페이징</title><link>https://log.j2234.cc/posts/2022-tistory/109-3-2%ED%8E%98%EC%9D%B4%EC%A7%95/</link><pubDate>Sat, 04 Jun 2022 17:35:41 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/109-3-2%ED%8E%98%EC%9D%B4%EC%A7%95/</guid><description>&lt;p&gt;&lt;a href="https://wikidocs.net/71240" target="_blank" rel="noreferrer"&gt;https://wikidocs.net/71240&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;글이 여러개라면, 화면에 끝도없이 나타날 것이므로 페이징의 필요하다.&lt;/p&gt;
&lt;p&gt;views.py에&lt;/p&gt;
&lt;p&gt;from django.core.paginator import Paginator 를 사용한다.&lt;/p&gt;
&lt;p&gt;page = request.GET.get(&amp;lsquo;page&amp;rsquo;, &amp;lsquo;1&amp;rsquo;)# get 방식으로 호출된 url에서 페이지를 가져올 때 사용한다. 호출값이 없을 땐 default로 1을 반환한다.&lt;/p&gt;
&lt;p&gt;context로 page_obj = paginator.get_page(page)를 받게된다.&lt;/p&gt;
&lt;p&gt;question_list.html의 페이징 코드이다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 페이징처리 시작 --&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pagination justify-content-center&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 이전페이지 --&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-link&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;?page=1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;처음&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {% if question_list.has_previous %} &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-link&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;?page={{ question_list.previous_page_number }}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;이전&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; {% else %} &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item disabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-link&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;tabindex&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;-1&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;aria-disabled&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;이전&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; {% endif %} &lt;span class="c"&gt;&amp;lt;!-- 페이지리스트 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {% for page_number in question_list.paginator.page_range %}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {% if page_number &amp;gt;= question_list.number|add:-3 and page_number &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;= question_list.number|add:3 %}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {% if page_number == question_list.number %}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item active&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;aria-current&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-link&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;?page={{ page_number }}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;{{ page_number }}&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; {% else %} &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-link&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;?page={{ page_number }}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;{{ page_number }}&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; {% endif %}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {% elif page_number &amp;gt;= question_list.number|add:-4 and page_number &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;= question_list.number|add:4 %}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; {% endif %} {% endfor %}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 다음페이지 --&amp;gt;&lt;/span&gt; {% if question_list.has_next %}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-link&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;?page={{ question_list.next_page_number }}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;다음&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; {% else %} &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item disabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-link&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;tabindex&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;-1&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;aria-disabled&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;다음&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; {% endif %} &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;page-link&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;?page={{ max_index }}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;마지막&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- 페이징처리 끝 --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;이걸 이해할려고 하다가 너무 답답해서 쓴다.&lt;/p&gt;</description></item><item><title>백준 9935 문자열 폭팔</title><link>https://log.j2234.cc/posts/2022-tistory/108-%EB%B0%B1%EC%A4%80-9935-%EB%AC%B8%EC%9E%90%EC%97%B4-%ED%8F%AD%ED%8C%94/</link><pubDate>Fri, 20 May 2022 16:36:09 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/108-%EB%B0%B1%EC%A4%80-9935-%EB%AC%B8%EC%9E%90%EC%97%B4-%ED%8F%AD%ED%8C%94/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/9935" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/9935&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9935번: 문자열 폭발첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모www.acmicpc.net&lt;/p&gt;
&lt;p&gt;아이디어만 떠올리면 쉽다 (그래서 어렵다)&lt;/p&gt;
&lt;p&gt;먼져, stack에 하나씩 넣는다.&lt;/p&gt;
&lt;p&gt;그후, stack의 마지막 문자가 폭팔문자의 마지막이면,&lt;/p&gt;
&lt;p&gt;폭팔문자수만큼 확인하면서 빼버린다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;s=list(input())boom=list(input())stack=[]for i in range(len(s)):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; stack.append(s[i]) if stack[-1]==boom[-1] and len(stack)&amp;gt;=len(boom):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if stack[-len(boom):]==boom: del stack[-len(boom):]if stack:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#39;&amp;#39;.join(stack))else: print(&amp;#39;FRULA&amp;#39;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준10026적록색약</title><link>https://log.j2234.cc/posts/2022-tistory/107-%EB%B0%B1%EC%A4%8010026%EC%A0%81%EB%A1%9D%EC%83%89%EC%95%BD/</link><pubDate>Wed, 18 May 2022 21:13:12 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/107-%EB%B0%B1%EC%A4%8010026%EC%A0%81%EB%A1%9D%EC%83%89%EC%95%BD/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/10026" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/10026&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10026번: 적록색약적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)www.acmicpc.net&lt;/p&gt;
&lt;p&gt;dfs를 두번수행한다.&lt;/p&gt;
&lt;p&gt;처음엔 색깔을 다 따로,&lt;/p&gt;
&lt;p&gt;다음엔 초록,빨강을 묶어서&lt;/p&gt;
&lt;p&gt;끝&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysfrom&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;dequeimport&lt;/span&gt; &lt;span class="n"&gt;copyinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;move&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bfs1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;popleft&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;move&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;tj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;tj&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;tj&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;tj&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;tj&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deepcopy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;arr1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deepcopy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;R&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;G&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;R&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;answer0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;answer1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;bfs1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;answer0&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;!=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bfs1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer1&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;answer1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준1062 가르침</title><link>https://log.j2234.cc/posts/2022-tistory/106-%EB%B0%B1%EC%A4%801062-%EA%B0%80%EB%A5%B4%EC%B9%A8/</link><pubDate>Wed, 18 May 2022 12:45:33 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/106-%EB%B0%B1%EC%A4%801062-%EA%B0%80%EB%A5%B4%EC%B9%A8/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1062" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1062&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1062번: 가르침첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문www.acmicpc.net&lt;/p&gt;
&lt;p&gt;거의 처음으로 풀어본 비트마스킹 문제였다.&lt;/p&gt;
&lt;p&gt;생각보다 할만했다.&lt;/p&gt;
&lt;p&gt;가장먼져, 무조건 포함되는 (a,n,t,i,c) 를 각각ord(&amp;lsquo;a)를 빼줘 비트집합 must_have로 바꾼다&lt;/p&gt;
&lt;p&gt;0b10000010000100000101 가 된다.&lt;/p&gt;
&lt;p&gt;이후, 단어를 받을때마다 &amp;amp;를 통해 (a,n,t,i,c)를 제거한다.&lt;/p&gt;
&lt;p&gt;그리고, 남아있는 단어들을 k-5개의 원소를 가지는 comb로 만들어서,&lt;/p&gt;
&lt;p&gt;각각의 받은 단어와 &amp;amp;로 비교했을때 받은 단어가 나오면 읽을 수 있는것이다.&lt;/p&gt;</description></item><item><title>백준 16928 뱀과 사다리 게임</title><link>https://log.j2234.cc/posts/2022-tistory/105-%EB%B0%B1%EC%A4%80-16928-%EB%B1%80%EA%B3%BC-%EC%82%AC%EB%8B%A4%EB%A6%AC-%EA%B2%8C%EC%9E%84/</link><pubDate>Mon, 16 May 2022 21:09:49 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/105-%EB%B0%B1%EC%A4%80-16928-%EB%B1%80%EA%B3%BC-%EC%82%AC%EB%8B%A4%EB%A6%AC-%EA%B2%8C%EC%9E%84/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/16928" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/16928&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16928번: 뱀과 사다리 게임첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x &amp;lt; y)가 주어진다. x번 칸에 도착하면, y번 칸으www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에 멍청하게 배열을 만들어서 풀려했다 ㅋㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;간단한 dfs문제이다.&lt;/p&gt;
&lt;p&gt;하필이면 kdt시간에 푸느라 엄청 안풀렸는데, 집에서푸니 10분컷이였다.&lt;/p&gt;
&lt;p&gt;주의할 점은 단 하나이다.&lt;/p&gt;
&lt;p&gt;뱀과 사다리는 무조건 타야 하므로&lt;/p&gt;
&lt;p&gt;조건문을 제대로 설정해서, 타지 않은 경우를 큐에 넣지 않도록 주의하자&lt;/p&gt;</description></item><item><title>백준 1987 알파벳</title><link>https://log.j2234.cc/posts/2022-tistory/104-%EB%B0%B1%EC%A4%80-1987-%EC%95%8C%ED%8C%8C%EB%B2%B3/</link><pubDate>Sun, 15 May 2022 15:18:36 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/104-%EB%B0%B1%EC%A4%80-1987-%EC%95%8C%ED%8C%8C%EB%B2%B3/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1987" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1987&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1987번: 알파벳세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에 온갖 똥고쇼를 해도 시간초과를 피할 수 없었다.&lt;/p&gt;
&lt;p&gt;그나마 줄일대로줄여서 pypy로 간신히 맞았다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysinput=sys.stdin.readlinemove=((-1,0),(1,0),(0,-1),(0,1))answer=1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def dfs(next,value): global answer answer=max(answer,value) i,j=next
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for a,b in move: ti,tj=i+a,j+b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if 0&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;=ti&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;r&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;c&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;not&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;visited&lt;/span&gt; &lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;visited&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;])&lt;/span&gt; &lt;span class="na"&gt;dfs&lt;/span&gt;&lt;span class="err"&gt;((&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;),&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;visited&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;])&lt;/span&gt; &lt;span class="na"&gt;r&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;map(int,input().split())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;[list(input().strip())&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;r&lt;/span&gt;&lt;span class="err"&gt;)]&lt;/span&gt;&lt;span class="na"&gt;visited&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;set(arr[0][0])dfs((0,0),1)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;answer&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;그후 다른사람들의 풀이를 보니 bfs로 푸는 방법이 있었다.&lt;/p&gt;</description></item><item><title>백준 1339 단어 수학</title><link>https://log.j2234.cc/posts/2022-tistory/103-%EB%B0%B1%EC%A4%80-1339-%EB%8B%A8%EC%96%B4-%EC%88%98%ED%95%99/</link><pubDate>Sat, 14 May 2022 13:35:27 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/103-%EB%B0%B1%EC%A4%80-1339-%EB%8B%A8%EC%96%B4-%EC%88%98%ED%95%99/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1339" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1339&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1339번: 단어 수학첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대www.acmicpc.net&lt;/p&gt;
&lt;p&gt;그리디는 아이디어가 중요한 거 같다.&lt;/p&gt;
&lt;p&gt;맨처음에는 string.uppercase()를 이용해 dcit를만들었는데 그럴필요조차 없었다.&lt;/p&gt;
&lt;p&gt;dictionary에 알파벳마다의 중요도를 넣는다.&lt;/p&gt;
&lt;p&gt;각 단어에서 알파벳의자릿수**10을 더해준다.&lt;/p&gt;
&lt;p&gt;그리고 중요도가 높은 순서대로 9부터 곱하면서 더해준다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import stringn=int(input())str_dict={}for _ in range(n): tmp=input()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; len_tmp=len(tmp) for i in range(len_tmp):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if tmp[i] in str_dict: str_dict[tmp[i]]+=10**(len_tmp-i-1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; else: str_dict[tmp[i]]=10**(len_tmp-i-1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmp_list=sorted(str_dict.values(),reverse=True)answer=0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;for i in range(len(tmp_list)-1,-1,-1): answer+=tmp_list[i]*(9-i)print(answer)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;여기서 한가지 알게 된 사실이있다.&lt;/p&gt;</description></item><item><title>백준 15686치킨배달</title><link>https://log.j2234.cc/posts/2022-tistory/102-%EB%B0%B1%EC%A4%80-15686%EC%B9%98%ED%82%A8%EB%B0%B0%EB%8B%AC/</link><pubDate>Fri, 13 May 2022 11:31:04 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/102-%EB%B0%B1%EC%A4%80-15686%EC%B9%98%ED%82%A8%EB%B0%B0%EB%8B%AC/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/15686" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/15686&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;15686번: 치킨 배달크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에 bfs를생각했는데 더 간단한 풀이가 있었다.&lt;/p&gt;
&lt;p&gt;모든 집과 치킨집을 구해놓고,&lt;/p&gt;
&lt;p&gt;치킨집에 대한 원소가m개인 combination을 구하고,&lt;/p&gt;
&lt;p&gt;각 combination에 대하여 치킨 거리를 구해 비교한다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysfrom itertools import combinationsinput=sys.stdin.readline
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n,m=map(int,input().split())arr=[]chickenhouse=[]blank=[]for i in range(n):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tmp=list(map(int,input().split())) for j in range(n):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if tmp[j]==1: blank.append((i,j)) elif tmp[j]==2:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; chickenhouse.append((i,j))chicken_comb=combinations(chickenhouse,m)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;answer=1e+7for chickens in chicken_comb: dist=0 for i,j in blank:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dist+=min([abs(i-c[0])+abs(j-c[1]) for c in chickens])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if dist&amp;gt;=answer:break answer=min(answer,dist)print(answer)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 14502 연구소</title><link>https://log.j2234.cc/posts/2022-tistory/101-%EB%B0%B1%EC%A4%80-14502-%EC%97%B0%EA%B5%AC%EC%86%8C/</link><pubDate>Thu, 12 May 2022 23:12:09 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/101-%EB%B0%B1%EC%A4%80-14502-%EC%97%B0%EA%B5%AC%EC%86%8C/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14502" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14502&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14502번: 연구소인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크www.acmicpc.net&lt;/p&gt;
&lt;p&gt;브루트포스&lt;/p&gt;
&lt;p&gt;모든 blank에 대하여, 길이가 3인 comb를만들고,&lt;/p&gt;
&lt;p&gt;각각의 경우에대해 bfs를수행하여 0이 최대인값을 구한다.&lt;/p&gt;
&lt;p&gt;지금까지 copy가 만능인줄알았는데, 아니였다.&lt;/p&gt;
&lt;p&gt;copy를 쓰면, 그 객체 자체의 주소값은은 다르지만,&lt;/p&gt;
&lt;p&gt;다차원배열인경우, 그 안의 배열의 주소값은 같다.&lt;/p&gt;
&lt;p&gt;#ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 왜일케만들었지&lt;/p&gt;
&lt;p&gt;따라서, copy모듈의 decopy()를 사용하여 깊은복사를 해야만, 독립적인 arr을 유지할 수 있다.&lt;/p&gt;
&lt;p&gt;이것때문에 한참고민했다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysfrom collections import dequefrom itertools import combinations
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import copy ##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!input=sys.stdin.readline
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move=[[-1,0],[1,0],[0,-1],[0,1]]answer=0def bfs(walls): global answer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tmp_arr=copy.deepcopy(arr) !!!!!!!!!!!!!!!!!!!!!!!!! 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tmp_answer=len(blank_list) for i,j in walls: tmp_arr[i][j]=1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tmp_answer-=1 que=deque() que.extend(virus_list) while que:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; i,j=que.popleft() for a,b in move: tmp_i,tmp_j=i+a,j+b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if 0&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;=tmp_i&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;n&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;tmp_j&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;m&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;tmp_arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;tmp_i&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tmp_j&lt;/span&gt;&lt;span class="err"&gt;]==&lt;/span&gt;&lt;span class="na"&gt;0:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;tmp_arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;tmp_i&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tmp_j&lt;/span&gt;&lt;span class="err"&gt;]=&lt;/span&gt;&lt;span class="na"&gt;2&lt;/span&gt; &lt;span class="na"&gt;tmp_answer-&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;que&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;((&lt;/span&gt;&lt;span class="na"&gt;tmp_i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;tmp_j&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt; &lt;span class="na"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;max(answer,tmp_answer)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;map(int,input().split())arr=[]virus_list=[]blank_list=[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;[*&lt;/span&gt; &lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;int&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="err"&gt;().&lt;/span&gt;&lt;span class="na"&gt;split&lt;/span&gt;&lt;span class="err"&gt;())]&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;j&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;len&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;]==&lt;/span&gt;&lt;span class="na"&gt;2:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;virus_list&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;((&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt; &lt;span class="na"&gt;elif&lt;/span&gt; &lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;]==&lt;/span&gt;&lt;span class="na"&gt;0:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;blank_list&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;((&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt;&lt;span class="na"&gt;wall_comb&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;list(combinations(blank_list,3))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;walls&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;wall_comb:&lt;/span&gt; &lt;span class="na"&gt;bfs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;walls&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;answer&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 5014 스타트링크</title><link>https://log.j2234.cc/posts/2022-tistory/100-%EB%B0%B1%EC%A4%80-5014-%EC%8A%A4%ED%83%80%ED%8A%B8%EB%A7%81%ED%81%AC/</link><pubDate>Thu, 12 May 2022 17:12:01 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/100-%EB%B0%B1%EC%A4%80-5014-%EC%8A%A4%ED%83%80%ED%8A%B8%EB%A7%81%ED%81%AC/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="c1"&gt;#f=총 층, g=스타트링크의 층, s=내가있는층, u=u층위로, d=d층아래로&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;popleft&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;use the stairs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/5014" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/5014&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5014번: 스타트링크첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;간단한 dfs문제&lt;/p&gt;
&lt;p&gt;처음에 틀렸는데, 내가있는층==가고싶은층일때를 제외했기 때문&lt;/p&gt;
&lt;p&gt;설명 x&lt;/p&gt;</description></item><item><title>백준 1967 트리의 지름</title><link>https://log.j2234.cc/posts/2022-tistory/099-%EB%B0%B1%EC%A4%80-1967-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EC%A7%80%EB%A6%84/</link><pubDate>Thu, 12 May 2022 16:23:06 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/099-%EB%B0%B1%EC%A4%80-1967-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EC%A7%80%EB%A6%84/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1967" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1967&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1967번: 트리의 지름파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연www.acmicpc.net&lt;/p&gt;
&lt;p&gt;1167번 문제와 똑같은 개념&lt;/p&gt;
&lt;p&gt;이번엔 입력이 한방향만 주어지므로, 둘다 업데이트시켜줘야됨&lt;/p&gt;
&lt;p&gt;##필수개념##&lt;/p&gt;
&lt;p&gt;트리의 한 점에서 가장 먼 점은, 항상 지름 중 한 점이다!! &lt;a href="https://fuckingcomputer.tistory.com/97" target="_blank" rel="noreferrer"&gt;https://fuckingcomputer.tistory.com/97&lt;/a&gt; 참고&lt;/p&gt;
&lt;p&gt;##코드##&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysfrom&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;dequeinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlinedef&lt;/span&gt; &lt;span class="n"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;one&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;long_d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;popleft&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;weight&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;weight&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;que&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;long_d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;long_d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;long_d&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="c1"&gt;#트리 채우기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;tresh&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#지름중하나, 쓰레기값(거리&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;one&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;#거리만 출력!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 11404플로이드</title><link>https://log.j2234.cc/posts/2022-tistory/098-%EB%B0%B1%EC%A4%80-11404%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%93%9C/</link><pubDate>Thu, 12 May 2022 02:43:34 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/098-%EB%B0%B1%EC%A4%80-11404%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%93%9C/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11404" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11404&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11404번: 플로이드첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가www.acmicpc.net&lt;/p&gt;
&lt;p&gt;내 기억상 유튜브에서 보고 처음으로 감탄사를 내뱉었던 알고리즘&lt;/p&gt;
&lt;p&gt;우리는 n*n 배열을 만들거다.&lt;/p&gt;
&lt;p&gt;배열 i,j는 i에서 j로가는 최소 경로이다.&lt;/p&gt;
&lt;p&gt;직접가는 버스가 있으면 가중치를, 없으면 존나큰값을 넣는다.&lt;/p&gt;
&lt;p&gt;n에 대한 3중 반복문을 돌면서,&lt;/p&gt;
&lt;p&gt;arr[i][j]가arr[i][k]+arr[k][j] 즉 직접가는 경로보다 k지점을 거쳐서 가는 경로가 빠르다면,&lt;/p&gt;
&lt;p&gt;더 빠른 경로를 업데이트해준다.&lt;/p&gt;</description></item><item><title>백준 1167 트리의 지름</title><link>https://log.j2234.cc/posts/2022-tistory/097-%EB%B0%B1%EC%A4%80-1167-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EC%A7%80%EB%A6%84/</link><pubDate>Thu, 12 May 2022 00:12:47 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/097-%EB%B0%B1%EC%A4%80-1167-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EC%A7%80%EB%A6%84/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1167" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1167&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1167번: 트리의 지름트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지www.acmicpc.net&lt;/p&gt;
&lt;p&gt;개념도 ㅈ같고 구현도 ㅈ같았던 문제&lt;/p&gt;
&lt;p&gt;가장 먼져 든 생각은, 트리의 모든 정점에서 모든 정점까지의 길이를 탐색하는거였는데, 말도안되서 포기했다.&lt;/p&gt;
&lt;p&gt;가장 중요한건 트리의 개념이다.&lt;/p&gt;
&lt;p&gt;트리는, 어떠한 두 노드를 선택해도, 경로는 항상 하나이다.&lt;/p&gt;
&lt;p&gt;따라서, 임이의 한 점에서 가장 먼 정점은, 트리의 지름(가장 먼 정점) 의 두 정점 중 하나이다.&lt;/p&gt;</description></item><item><title>백준 11725 트리의 부모 찾기</title><link>https://log.j2234.cc/posts/2022-tistory/096-%EB%B0%B1%EC%A4%80-11725-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EB%B6%80%EB%AA%A8-%EC%B0%BE%EA%B8%B0/</link><pubDate>Wed, 11 May 2022 11:26:40 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/096-%EB%B0%B1%EC%A4%80-11725-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EB%B6%80%EB%AA%A8-%EC%B0%BE%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11725" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11725&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11725번: 트리의 부모 찾기루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;1을 시작으로 dfs든 bfs든 하면서 parent를 업데이트해준다.&lt;/p&gt;
&lt;p&gt;#dfs&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import syssys.setrecursionlimit(10**6)input=sys.stdin.readlinedef dfs(node=1):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for next_node in arr[node]: if parent[next_node]==-1:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; parent[next_node]=node dfs(next_node)n=int(input())
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parent=[-1 for _ in range(n+1)]arr=[[]for _ in range(n+1)]for _ in range(n-1):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a,b=map(int,input().split()) arr[a].append(b) arr[b].append(a)dfs()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;for p in parent[2:]: print(p)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;#bfs&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysfrom collections import dequeinput=sys.stdin.readlinedef bfs(root=1):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; que=deque([root]) while que: node=que.popleft()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for next_node in arr[node]: if parent[next_node]==-1:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; parent[next_node]=node que.append(next_node) 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n=int(input())parent=[-1 for _ in range(n+1)]arr=[[]for _ in range(n+1)]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;for _ in range(n-1): a,b=map(int,input().split()) arr[a].append(b)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; arr[b].append(a)bfs()for p in parent[2:]: print(p)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 2250 트리의 높이와 너비</title><link>https://log.j2234.cc/posts/2022-tistory/095-%EB%B0%B1%EC%A4%80-2250-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EB%86%92%EC%9D%B4%EC%99%80-%EB%84%88%EB%B9%84/</link><pubDate>Tue, 10 May 2022 13:28:26 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/095-%EB%B0%B1%EC%A4%80-2250-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EB%86%92%EC%9D%B4%EC%99%80-%EB%84%88%EB%B9%84/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2250" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2250&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2250번: 트리의 높이와 너비첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;와 진짜 나한테는 개어렵다.&lt;/p&gt;
&lt;p&gt;다른사람의 풀이를 참고했다.&lt;/p&gt;
&lt;p&gt;먼져, 정보를 받아서 tree를 구성한다.&lt;/p&gt;
&lt;p&gt;root가주어지지 않기에, 각각의 트리에 parent를 -1로 초기화시켜놓고,&lt;/p&gt;
&lt;p&gt;각각의 자식노드들의 parent를 업데이트한다.&lt;/p&gt;
&lt;p&gt;이후 트리에서 parent가 -1인 노드가 root이다.&lt;/p&gt;
&lt;p&gt;루트에서 중위순회를 시작한다. 이때 레벨정보를 넘겨줘야한다.&lt;/p&gt;
&lt;p&gt;레벨정보는 root일때 1이고, 한단계 들어갈때마다 1씩 증가시킨다.&lt;/p&gt;</description></item><item><title>백준 2580 스도쿠</title><link>https://log.j2234.cc/posts/2022-tistory/094-%EB%B0%B1%EC%A4%80-2580-%EC%8A%A4%EB%8F%84%EC%BF%A0/</link><pubDate>Mon, 09 May 2022 12:52:54 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/094-%EB%B0%B1%EC%A4%80-2580-%EC%8A%A4%EB%8F%84%EC%BF%A0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2580" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2580&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2580번: 스도쿠스도쿠는 18세기 스위스 수학자가 만든 &amp;lsquo;라틴 사각형&amp;rsquo;이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루www.acmicpc.net&lt;/p&gt;
&lt;p&gt;스도쿠를 받으면서, 공백의 위치만 따로 기억한다.&lt;/p&gt;
&lt;p&gt;이후, 첫번째 공백부터 1~9의 숫자로 채우며, 가로,세로,3*3사각형을 검사한다.&lt;/p&gt;
&lt;p&gt;이후 되는경우만 밀고나간다.&lt;/p&gt;
&lt;p&gt;##코드##&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysinput=sys.stdin.readlinedef check(a,b,value): 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for i in range(9): #가로 if arr[a][i]==value:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return False #세로 if arr[i][b]==value:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return False #사각형 start_a=a//3*3 start_b=b//3*3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for i in range(start_a,start_a+3): for j in range(start_b,start_b+3):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if arr[i][j]==value: return False return True
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; def dfs(cnt=0): if cnt==len(blank): for ar in arr:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(* ar) exit() for i in range(1,10):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a,b=blank[cnt] #세로,가로 if check(a,b,i): arr[a][b]=i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dfs(cnt+1) arr[a][b]=0 returnarr=[] #스도쿠blank=[]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;for i in range(9): tmp=[*map(int,input().strip().split())] arr.append(tmp)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for j in range(9): if tmp[j]==0: blank.append((i,j))dfs()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;진짜 가면갈수록자괴감느낀다.&lt;/p&gt;</description></item><item><title>백준4179불!</title><link>https://log.j2234.cc/posts/2022-tistory/093-%EB%B0%B1%EC%A4%804179%EB%B6%88/</link><pubDate>Sat, 07 May 2022 15:18:44 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/093-%EB%B0%B1%EC%A4%804179%EB%B6%88/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/4179" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/4179&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4179번: 불!입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음부터 풀이기 보였다.&lt;/p&gt;
&lt;p&gt;모르는점은 불이랑 지훈이가 동시에도착하면 사냐 죽나였는데 죽는단다.&lt;/p&gt;
&lt;p&gt;move 하나를 잘못입력해서 30여분 날렸다.&lt;/p&gt;
&lt;p&gt;동시에 도착하면 죽으므로, 모든 불의 위치를 먼져 deque에 넣는다. 이때, (i,j,-1) 마지막값을 -1로해준다&lt;/p&gt;
&lt;p&gt;그후 지훈이의 위치를 넣는다. 마지막 값에 시간을 넣을거므로 0으로 해준다.&lt;/p&gt;</description></item><item><title>백준 2023 신기한 소수</title><link>https://log.j2234.cc/posts/2022-tistory/092-%EB%B0%B1%EC%A4%80-2023-%EC%8B%A0%EA%B8%B0%ED%95%9C-%EC%86%8C%EC%88%98/</link><pubDate>Thu, 05 May 2022 11:49:47 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/092-%EB%B0%B1%EC%A4%80-2023-%EC%8B%A0%EA%B8%B0%ED%95%9C-%EC%86%8C%EC%88%98/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2023" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2023&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2023번: 신기한 소수수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수www.acmicpc.net&lt;/p&gt;
&lt;p&gt;와 이전에 풀때 포기했던 문젠데, 백트래킹을 해보고 왔더니 정말 쉬운 문제였다.&lt;/p&gt;
&lt;p&gt;먼져, 첫자리는 소수여야하므로 2,3,5,7이외의 수는 없다.&lt;/p&gt;
&lt;p&gt;2,3,5,7을 시작으로 하는 n자리의 숫자를 찾으면 되는데,&lt;/p&gt;
&lt;p&gt;한단계씩 지나갈때마다 그 단계의 신기한 소수판별을 하고, 아니면 더이상 탐색하지 않는다.&lt;/p&gt;
&lt;p&gt;신기한 소수를 판별할 때, 그 자리만 판별한다.&lt;/p&gt;</description></item><item><title>백준 1991 트리 순회</title><link>https://log.j2234.cc/posts/2022-tistory/091-%EB%B0%B1%EC%A4%80-1991-%ED%8A%B8%EB%A6%AC-%EC%88%9C%ED%9A%8C/</link><pubDate>Wed, 04 May 2022 20:26:29 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/091-%EB%B0%B1%EC%A4%80-1991-%ED%8A%B8%EB%A6%AC-%EC%88%9C%ED%9A%8C/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1991" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1991&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1991번: 트리 순회첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파www.acmicpc.net&lt;/p&gt;
&lt;p&gt;트리를 처음 접했다.&lt;/p&gt;
&lt;p&gt;유튜브에서 트리구조 강의를 보고 풀었다.&lt;/p&gt;
&lt;p&gt;처음으로 클래스를 사용했다.&lt;/p&gt;
&lt;p&gt;계속보다보니 신기하다.&lt;/p&gt;
&lt;p&gt;전위순회= 루트-왼쪽-오른쪽&lt;/p&gt;
&lt;p&gt;중위순회=왼쪽-루트-오른쪽&lt;/p&gt;
&lt;p&gt;후위순회=왼쪽-오른쪽-루트&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysinput=sys.stdin.readlineclass Node():
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; def __init__(self,current_node,left_node,right_node):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; self.current=current_node self.left=left_node
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; self.right=right_nodedef 전위순회(node): print(node.current,end=&amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if node.left !=&amp;#39;.&amp;#39;: 전위순회(tree[node.left]) if node.right !=&amp;#39;.&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 전위순회(tree[node.right])def 중위순회(node): if node.left !=&amp;#39;.&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 중위순회(tree[node.left]) print(node.current,end=&amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if node.right !=&amp;#39;.&amp;#39;: 중위순회(tree[node.right])def 후위순회(node):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if node.left !=&amp;#39;.&amp;#39;: 후위순회(tree[node.left]) if node.right !=&amp;#39;.&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 후위순회(tree[node.right]) print(node.current,end=&amp;#39;&amp;#39;)n=int(input())
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tree={}for _ in range(n):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; current_node,left_node,right_node=input().strip().split()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tree[current_node]=Node(current_node,left_node,right_node)전위순회(tree[&amp;#34;A&amp;#34;])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;print()중위순회(tree[&amp;#34;A&amp;#34;])print()후위순회(tree[&amp;#34;A&amp;#34;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 1261 알고스팟</title><link>https://log.j2234.cc/posts/2022-tistory/090-%EB%B0%B1%EC%A4%80-1261-%EC%95%8C%EA%B3%A0%EC%8A%A4%ED%8C%9F/</link><pubDate>Tue, 03 May 2022 13:35:16 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/090-%EB%B0%B1%EC%A4%80-1261-%EC%95%8C%EA%B3%A0%EC%8A%A4%ED%8C%9F/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1261" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1261&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1261번: 알고스팟첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미www.acmicpc.net&lt;/p&gt;
&lt;p&gt;이래서 사람들이 비싼돈내고 알고리즘강의를 듣는구나 싶다.&lt;/p&gt;
&lt;p&gt;&amp;lsquo;가중치가 있는 경로찾기&amp;rsquo; 이다.&lt;/p&gt;
&lt;p&gt;벽을 지나갈때는 1의 가중치가, 아니면 가중치가 없다고 생각한다. 풀이는 bfs와 거의 같다.&lt;/p&gt;
&lt;p&gt;다른점은, 최대한 벽을 부수지 않아야되므로,&lt;/p&gt;
&lt;p&gt;1의 가중치가 있는점을 탐색하기 전에, 가중치가 없는 모든 노드를 탐색해야만 한다.&lt;/p&gt;</description></item><item><title>백준 9663 n-queen</title><link>https://log.j2234.cc/posts/2022-tistory/089-%EB%B0%B1%EC%A4%80-9663-n-queen/</link><pubDate>Mon, 02 May 2022 14:26:17 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/089-%EB%B0%B1%EC%A4%80-9663-n-queen/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/9663" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/9663&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9663번: N-QueenN-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;벽느낀다. ㅋㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;처음에는 2차원배열을 통해 풀었는데, 시간초과가 났다.&lt;/p&gt;
&lt;p&gt;다른사람의 풀이를 보고 힌트를 얻었다.&lt;/p&gt;
&lt;p&gt;dp[i]=j 의 뜻은, i번째 줄의 j번째 칸에 퀸을 놓는다는 소리이다.&lt;/p&gt;
&lt;p&gt;모든 열에는 퀸이 하나씩 들어가야 하므로, 0열부터 n가지의 경우를 모두 탐색한다.&lt;/p&gt;
&lt;p&gt;이후 그 다음 열을 순차적으로 탐색하며, 안되는 경우&lt;/p&gt;</description></item><item><title>백준 2293 동전1</title><link>https://log.j2234.cc/posts/2022-tistory/088-%EB%B0%B1%EC%A4%80-2293-%EB%8F%99%EC%A0%841/</link><pubDate>Sun, 01 May 2022 20:09:46 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/088-%EB%B0%B1%EC%A4%80-2293-%EB%8F%99%EC%A0%841/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2293" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2293&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2293번: 동전 1첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에 ㅈ밥으로생각했는데, 예상외로 어려웠다.&lt;/p&gt;
&lt;p&gt;먼져 동전을 저장하고, dp배열을 생성한다.&lt;/p&gt;
&lt;p&gt;여기서 내가 이해가 안됬던 부분은, 사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다. 라는 문장이다&lt;/p&gt;
&lt;p&gt;예로 동전이 1,2 가 있다면,&lt;/p&gt;
&lt;p&gt;3을만들수 있는 경우는 1+1+1 , 1+2, 2+1 ,3 총 4가지이다.&lt;/p&gt;</description></item><item><title>백준 14226 이모티콘</title><link>https://log.j2234.cc/posts/2022-tistory/087-%EB%B0%B1%EC%A4%80-14226-%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98/</link><pubDate>Sat, 30 Apr 2022 20:59:16 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/087-%EB%B0%B1%EC%A4%80-14226-%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14226" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14226&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14226번: 이모티콘영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만www.acmicpc.net&lt;/p&gt;
&lt;p&gt;거의 정답보고풀었다.&lt;/p&gt;
&lt;p&gt;주의할점은 , 개수만 생각하면 안된다는 것이다.&lt;/p&gt;
&lt;p&gt;백준 질문계시판에서 본 글인데, 우리가 임의의 숫자까지 갈 수 있는 최적의 경로가, 정답까지의 최적의 경로라고는 할 수 없다.&lt;a href="https://www.acmicpc.net/board/view/30100" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/board/view/30100&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;보고 머리가 띵했다.&lt;/p&gt;
&lt;p&gt;먼져 2차원배열의방식이 있다.&lt;/p&gt;
&lt;p&gt;dp[i][j]=i를만들때 클립보드가 j인 경우까지 드는 최소시간을 뜻한다.&lt;/p&gt;
&lt;p&gt;3가지 경우로 bfs를 진행하면 된다.&lt;/p&gt;</description></item><item><title>백준 13913 숨바꼭질4</title><link>https://log.j2234.cc/posts/2022-tistory/086-%EB%B0%B1%EC%A4%80-13913-%EC%88%A8%EB%B0%94%EA%BC%AD%EC%A7%884/</link><pubDate>Fri, 29 Apr 2022 20:04:51 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/086-%EB%B0%B1%EC%A4%80-13913-%EC%88%A8%EB%B0%94%EA%BC%AD%EC%A7%884/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/13913" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/13913&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;13913번: 숨바꼭질 4수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일www.acmicpc.net&lt;/p&gt;
&lt;p&gt;dp로생각했었는데, 사실 bfs였다.&lt;/p&gt;
&lt;p&gt;먼져, -1로 채워진 빈 배열을 만들고, 현재위치를 0으로 초기화시켜준다.&lt;/p&gt;
&lt;p&gt;이후 현재위치에서 x+1,x-1,x*2로 확장하며 bfs를 진행한다.&lt;/p&gt;
&lt;p&gt;마지막 경로를 알기 위해 배열을 하나 더 만들고, 이 배열에 현재위치의 전위치를 기억시켜준다.&lt;/p&gt;
&lt;p&gt;만일 k에 도달했으면, k까지의 시간을 출력하고,&lt;/p&gt;</description></item><item><title>백준 2146 다리 만들기</title><link>https://log.j2234.cc/posts/2022-tistory/085-%EB%B0%B1%EC%A4%80-2146-%EB%8B%A4%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0/</link><pubDate>Fri, 29 Apr 2022 19:04:15 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/085-%EB%B0%B1%EC%A4%80-2146-%EB%8B%A4%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2146" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2146&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2146번: 다리 만들기여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다www.acmicpc.net&lt;/p&gt;
&lt;p&gt;어제 이걸못풀어서 접을까 생각했다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;일단, 모든 섬을 구분한다. (bfs1)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;섬의 가장자리(edge)좌표를 모두 구한다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;edge를 바탕으로 (bfs2) 를 진행하며, 바다를 그 섬으로 메워나간다&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;bridge배열을 만들어서, 메운 위치에 1씩 +하며 메운 점 갯수를 센다.&lt;/p&gt;
&lt;p&gt;메워나가다가, 만일 자기 섬도 아니고 바다도 아닌 다른 섬을 만나면 이제 다리가 이어진것이다.&lt;/p&gt;</description></item><item><title>백준 16947 서울 지하철 2호선 (언젠간수정예정)</title><link>https://log.j2234.cc/posts/2022-tistory/084-%EB%B0%B1%EC%A4%80-16947-%EC%84%9C%EC%9A%B8-%EC%A7%80%ED%95%98%EC%B2%A0-2%ED%98%B8%EC%84%A0-%EC%96%B8%EC%A0%A0%EA%B0%84%EC%88%98%EC%A0%95%EC%98%88%EC%A0%95/</link><pubDate>Thu, 28 Apr 2022 00:33:58 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/084-%EB%B0%B1%EC%A4%80-16947-%EC%84%9C%EC%9A%B8-%EC%A7%80%ED%95%98%EC%B2%A0-2%ED%98%B8%EC%84%A0-%EC%96%B8%EC%A0%A0%EA%B0%84%EC%88%98%EC%A0%95%EC%98%88%EC%A0%95/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/16947" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/16947&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16947번: 서울 지하철 2호선첫째 줄에 역의 개수 N(3 ≤ N ≤ 3,000)이 주어진다. 둘째 줄부터 N개의 줄에는 역과 역을 연결하는 구간의 정보가 주어진다. 같은 구간이 여러 번 주어지는 경우는 없고, 역은 1번부터 N번까지 번호www.acmicpc.net&lt;/p&gt;
&lt;p&gt;존나열심히풀었다. 결국맞았다.&lt;/p&gt;
&lt;p&gt;근데 기분이썩는다.&lt;/p&gt;
&lt;p&gt;내 풀이방식&lt;/p&gt;
&lt;p&gt;그래프를 계속 돌면서, 시작한 위치로 돌아오는 경우(싸이클인 경우)를 찾는다.&lt;/p&gt;
&lt;p&gt;찾으면서, 만일 cycle이 아니면 방문처리를 풀고, 맞으면 모두 방문처리한다.&lt;/p&gt;
&lt;p&gt;이후, answer을 만들고&lt;/p&gt;
&lt;p&gt;순환선에서 밖이랑 연결된 정점은 간선이 3 이상일 것이므로,&lt;/p&gt;</description></item><item><title>벡준 16929 two dots</title><link>https://log.j2234.cc/posts/2022-tistory/083-%EB%B2%A1%EC%A4%80-16929-two-dots/</link><pubDate>Tue, 26 Apr 2022 13:11:51 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/083-%EB%B2%A1%EC%A4%80-16929-two-dots/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/16929" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/16929&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16929번: Two Dots첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문www.acmicpc.net&lt;/p&gt;
&lt;p&gt;사이클이 있는지를 확인하는 문제&lt;/p&gt;
&lt;p&gt;처음엔, 진짜 무식한 방식으로 접근했다.&lt;/p&gt;
&lt;p&gt;arr의 모든 점에 대하여 dfs 탐색을 하는데, &amp;ldquo;깊이가 2 를 넘은 상태에서, 원래의 점과 만나는 경우&amp;rdquo; 를 성공조건으로 삼았다.&lt;/p&gt;
&lt;p&gt;답은 맞게 나왔는데, 시간이 100ms넘게 걸렸다.&lt;/p&gt;
&lt;p&gt;그 후, 다시 생각을 해보니,&lt;/p&gt;</description></item><item><title>백준 14500 테트로미노</title><link>https://log.j2234.cc/posts/2022-tistory/082-%EB%B0%B1%EC%A4%80-14500-%ED%85%8C%ED%8A%B8%EB%A1%9C%EB%AF%B8%EB%85%B8/</link><pubDate>Mon, 25 Apr 2022 13:03:50 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/082-%EB%B0%B1%EC%A4%80-14500-%ED%85%8C%ED%8A%B8%EB%A1%9C%EB%AF%B8%EB%85%B8/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14500" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14500&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14500번: 테트로미노폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변www.acmicpc.net&lt;/p&gt;
&lt;p&gt;머리가 나쁘면 손이 고생한다.&lt;/p&gt;
&lt;p&gt;1.가장 직관적인 풀이&lt;/p&gt;
&lt;p&gt;모든 경우의수를 다 벡터에 넣고, 이를 반복하면서 구한다.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;조금머리쓴거&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;잘 생각해보면 엿을(ㅗ) 을 제외한 모든 경우의 수는, 깊이가 4인 dfs이다.&lt;/p&gt;
&lt;p&gt;따라서 각 점에 대하여 깊이가 4인 dfs의 최댓값을 구하고, 총 4방향의 가능한 엿에 대해 최댓값을 구한다.&lt;/p&gt;</description></item><item><title>백준 1707 이분 그래프</title><link>https://log.j2234.cc/posts/2022-tistory/081-%EB%B0%B1%EC%A4%80-1707-%EC%9D%B4%EB%B6%84-%EA%B7%B8%EB%9E%98%ED%94%84/</link><pubDate>Sat, 23 Apr 2022 21:14:34 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/081-%EB%B0%B1%EC%A4%80-1707-%EC%9D%B4%EB%B6%84-%EA%B7%B8%EB%9E%98%ED%94%84/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1707" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1707&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1707번: 이분 그래프입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에www.acmicpc.net&lt;/p&gt;
&lt;p&gt;뭔 개소린지 모르겠어서 인터넷을 찾아보았다.&lt;/p&gt;
&lt;p&gt;이분그래프는&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="889"
 height="201"
 src="https://log.j2234.cc/posts/2022-tistory/081-%EB%B0%B1%EC%A4%80-1707-%EC%9D%B4%EB%B6%84-%EA%B7%B8%EB%9E%98%ED%94%84/img/image-01_hu_4e4ee2e0b3df4d2.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/081-%EB%B0%B1%EC%A4%80-1707-%EC%9D%B4%EB%B6%84-%EA%B7%B8%EB%9E%98%ED%94%84/img/image-01_hu_4e4ee2e0b3df4d2.webp 800w, https://log.j2234.cc/posts/2022-tistory/081-%EB%B0%B1%EC%A4%80-1707-%EC%9D%B4%EB%B6%84-%EA%B7%B8%EB%9E%98%ED%94%84/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/081-%EB%B0%B1%EC%A4%80-1707-%EC%9D%B4%EB%B6%84-%EA%B7%B8%EB%9E%98%ED%94%84/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;​이렇게 빨간색은 빨간색끼리 연걸 x, 검은색은 검은색끼리 연결 x 하는 그래프를 말한다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;인접한 두 점이 같은 색깔이라면, 이분그래프가 아니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;만일 어디에도 연결되지 않은 점이라면, 이는 빨간, 검정 두개다 될 수 있다.&lt;/p&gt;</description></item><item><title>백준 12865 평범한베낭</title><link>https://log.j2234.cc/posts/2022-tistory/080-%EB%B0%B1%EC%A4%80-12865-%ED%8F%89%EB%B2%94%ED%95%9C%EB%B2%A0%EB%82%AD/</link><pubDate>Fri, 22 Apr 2022 13:41:10 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/080-%EB%B0%B1%EC%A4%80-12865-%ED%8F%89%EB%B2%94%ED%95%9C%EB%B2%A0%EB%82%AD/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/12865" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/12865&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;12865번: 평범한 배낭첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)www.acmicpc.net&lt;/p&gt;
&lt;p&gt;첫 풀이&lt;/p&gt;
&lt;p&gt;2차원 배열을 이용해서 풀음&lt;/p&gt;
&lt;p&gt;dp[i][j]= i번째 물건까지 봤을때, 무계 j를 만족하는 가장 큰 가치&lt;/p&gt;
&lt;p&gt;소스&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysinput=sys.stdin.readlinen,k=map(int,input().split())
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wv=[[0,0]]+[[*map (int,input().split())]for _ in range(n)]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dp=[[0 for _ in range(k+1)]for _ in range(n+1)]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#dp[i][j]=i번째 물건까지 봤을때, 무계가 j인 배낭의 최대가치for i in range(1,n+1):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for j in range(1,k+1): if j-wv[i][0]&amp;gt;=0:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dp[i][j]=max(dp[i-1][j-wv[i][0]]+wv[i][1], dp[i-1][j])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; else: dp[i][j]=dp[i-1][j]print(dp[-1][-1])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;그런데 다른사람들 풀이를 보다 보니, 2배는 효율적인 알고리즘이 있었다.&lt;/p&gt;</description></item><item><title>백준 7562 나이트의 이동</title><link>https://log.j2234.cc/posts/2022-tistory/079-%EB%B0%B1%EC%A4%80-7562-%EB%82%98%EC%9D%B4%ED%8A%B8%EC%9D%98-%EC%9D%B4%EB%8F%99/</link><pubDate>Thu, 21 Apr 2022 21:19:24 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/079-%EB%B0%B1%EC%A4%80-7562-%EB%82%98%EC%9D%B4%ED%8A%B8%EC%9D%98-%EC%9D%B4%EB%8F%99/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/7562" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/7562&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7562번: 나이트의 이동체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수www.acmicpc.net&lt;/p&gt;
&lt;p&gt;그냥 bfs문제임&lt;/p&gt;
&lt;p&gt;근데에러나서한참고심했음&lt;/p&gt;
&lt;p&gt;그냥 생각해야되는건, deque를 전역변수로 썼을때, deque에 아직 처리되지않은것들이 남아있다는거임&lt;/p&gt;
&lt;p&gt;그것만생각하면 쉬움&lt;/p&gt;
&lt;p&gt;##코드##&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysfrom collections import dequeinput=sys.stdin.readline
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;moves=[(-2,1),(-2,-1),(-1,2),(-1,-2),(1,2),(1,-2),(2,-1),(2,1)]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def bfs(a,b,l,goal_i,goal_j): s.append((a,b,0)) arr[a][b]=1 while s:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; i,j,v=s.popleft() for move in moves: aa,bb=move
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ti,tj=i+aa,j+bb if ti==goal_i and tj==goal_j:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(v+1) return
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if 0&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;=ti&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;l&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;l&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;]==&lt;/span&gt;&lt;span class="na"&gt;0:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;]=&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt; &lt;span class="na"&gt;s&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;((&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;int&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="err"&gt;()))&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;deque()&lt;/span&gt; &lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;int(input())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;[[0&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="err"&gt;)]&lt;/span&gt;&lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="err"&gt;)]&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;map(int,input().split())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;goal_i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;goal_j&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;map(int,input().split())&lt;/span&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;=goal_i&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;=goal_j:&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;continue&lt;/span&gt; &lt;span class="na"&gt;bfs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;goal_i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;goal_j&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 14888 연산자 끼워넣기</title><link>https://log.j2234.cc/posts/2022-tistory/078-%EB%B0%B1%EC%A4%80-14888-%EC%97%B0%EC%82%B0%EC%9E%90-%EB%81%BC%EC%9B%8C%EB%84%A3%EA%B8%B0/</link><pubDate>Thu, 21 Apr 2022 15:34:43 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/078-%EB%B0%B1%EC%A4%80-14888-%EC%97%B0%EC%82%B0%EC%9E%90-%EB%81%BC%EC%9B%8C%EB%84%A3%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14888" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14888&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14888번: 연산자 끼워넣기첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, &amp;hellip;, AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에 permu어쩌구를 통해 모든 기호의 배열을 구해서 풀었다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from itertools import permutationsimport sysinput=sys.stdin.readline
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n=int(input())a=[*map(int,input().split())]q,w,e,r=map(int,input().split())
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmp_sign=&amp;#39;+&amp;#39;*q+&amp;#39;-&amp;#39;*w+&amp;#39;*&amp;#39;*e+&amp;#39;/&amp;#39;*rsigns=list(permutations(tmp_sign,n-1))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;signs=list(set(signs))max_answer=-1000000000min_answer=1000000000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;for sign in signs: answer=a[0] for i in range(n-1): 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if sign[i]==&amp;#39;+&amp;#39;: answer+=a[i+1] elif sign[i]==&amp;#39;-&amp;#39;: 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; answer-=a[i+1] elif sign[i]==&amp;#39;*&amp;#39;: answer*=a[i+1]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; elif sign[i]==&amp;#39;/&amp;#39;: # answer//=a[i+1]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if answer&amp;gt;=0: answer//=a[i+1] else:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; answer= -(-answer//a[i+1]) min_answer=min(min_answer,answer)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; max_answer=max(max_answer,answer)print(max_answer,min_answer,sep=&amp;#39;\n&amp;#39;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;근데 다른 풀이를 보니 그럴거없이&lt;/p&gt;</description></item><item><title>백준 17114 하이퍼 토마토</title><link>https://log.j2234.cc/posts/2022-tistory/077-%EB%B0%B1%EC%A4%80-17114-%ED%95%98%EC%9D%B4%ED%8D%BC-%ED%86%A0%EB%A7%88%ED%86%A0/</link><pubDate>Wed, 20 Apr 2022 19:30:05 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/077-%EB%B0%B1%EC%A4%80-17114-%ED%95%98%EC%9D%B4%ED%8D%BC-%ED%86%A0%EB%A7%88%ED%86%A0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/17114" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/17114&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;17114번: 하이퍼 토마토첫 줄에는 문제의 설명에서 창고의 크기를 나타내는 자연수 m, n, o, p, q, r, s, t, u, v, w가 주어진다. 단, 1 ≤ mnopqrstuvw ≤ 106 이다. 둘째 줄부터는 창고에 저장된 토마토들의 정보가 주어진다. 창www.acmicpc.net&lt;/p&gt;
&lt;p&gt;토마토3&lt;/p&gt;
&lt;p&gt;ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;오기생겨서 1시간은 쓴듯하다.&lt;/p&gt;
&lt;p&gt;다 아는 개념이여도, 변수가많아지니 헷갈린다. 변수명 아무렇게나 짓다가 변수겹처서 틀린것도 셀 수 없다.&lt;/p&gt;
&lt;p&gt;그냥 재미용&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move1=[1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move2=[0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move3=[0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move4=[0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move5=[0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move6=[0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move7=[0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move8=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move9=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move10=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;move11=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# def bfs(m, n, o, p, q, r, s, t, u, v, w):def bfs(): while que: 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ww,vv,uu,tt,ss,rr,qq,pp,oo,nn,mm,value=que.popleft()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for i in range(22): mmm= mm+move1[i]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; nnn= nn+move2[i] ooo= oo+move3[i]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ppp= pp+move4[i] qqq= qq+move5[i]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rrr= rr+move6[i] sss= ss+move7[i]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ttt= tt+move8[i] uuu= uu+move9[i]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vvv= vv+move10[i] www= ww+move11[i] 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if 0&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;=mmm&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;m&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;nnn&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;ooo&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;o&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;ppp&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;p&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;qqq&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;q&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;rrr&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;r&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;sss&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;s&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;ttt&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;t&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;uuu&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;u&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;vvv&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;www&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;w&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;www&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;vvv&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;uuu&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ttt&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;sss&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;rrr&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;qqq&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ppp&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ooo&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;nnn&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;mmm&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="err"&gt;==&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;que&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;([&lt;/span&gt;&lt;span class="na"&gt;www&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;vvv&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;uuu&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;ttt&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;sss&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;rrr&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;qqq&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;ppp&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;ooo&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;nnn&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;mmm&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;www&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;vvv&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;uuu&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ttt&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;sss&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;rrr&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;qqq&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ppp&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ooo&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;nnn&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;mmm&lt;/span&gt;&lt;span class="err"&gt;]=&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;-1&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;ww&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;vv&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;uu&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;u&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;tt&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;t&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;ss&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;s&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;rr&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;r&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;qq&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;pp&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;p&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;oo&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;o&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;nn&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;mm&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;m&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ww&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;vv&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;uu&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tt&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ss&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;rr&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;qq&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;pp&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;oo&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;nn&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;mm&lt;/span&gt;&lt;span class="err"&gt;]==&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;-1&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;return&lt;/span&gt; &lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;import&lt;/span&gt; &lt;span class="na"&gt;sysinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;sys.stdin.readlinefrom&lt;/span&gt; &lt;span class="na"&gt;collections&lt;/span&gt; &lt;span class="na"&gt;import&lt;/span&gt; &lt;span class="na"&gt;deque&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;m&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;o&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;p&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;r&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;s&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;t&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;u&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;map(int,input().split())arr=[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;[[[[[[[[[&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="err"&gt;().&lt;/span&gt;&lt;span class="na"&gt;split&lt;/span&gt;&lt;span class="err"&gt;())&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;o&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;p&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;r&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;s&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;t&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;u&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;]&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="na"&gt;que&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;deque()for&lt;/span&gt; &lt;span class="na"&gt;ww&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;vv&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;uu&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;u&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;tt&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;t&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;ss&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;s&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;rr&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;r&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;qq&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;pp&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;p&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;oo&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;o&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;nn&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;mm&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;m&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;,&lt;/span&gt;&lt;span class="na"&gt;ww&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;vv&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;uu&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;tt&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;ss&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;rr&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;qq&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;pp&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;oo&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;nn&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;mm&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ww&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;vv&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;uu&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tt&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ss&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;rr&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;qq&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;pp&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;oo&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;nn&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;mm&lt;/span&gt;&lt;span class="err"&gt;]==&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;que&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;([&lt;/span&gt;&lt;span class="na"&gt;ww&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;vv&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;uu&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;tt&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;ss&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;rr&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;qq&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;pp&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;oo&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;nn&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;mm&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ww&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;vv&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;uu&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tt&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;ss&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;rr&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;qq&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;pp&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;oo&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;nn&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;mm&lt;/span&gt;&lt;span class="err"&gt;]=&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;-1&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;bfs&lt;/span&gt;&lt;span class="err"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;이렇게짜면 답은 맞지만 파이썬이 견디질 못한다.&lt;/p&gt;</description></item><item><title>백준 7569 토마토2</title><link>https://log.j2234.cc/posts/2022-tistory/076-%EB%B0%B1%EC%A4%80-7569-%ED%86%A0%EB%A7%88%ED%86%A02/</link><pubDate>Wed, 20 Apr 2022 12:26:37 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/076-%EB%B0%B1%EC%A4%80-7569-%ED%86%A0%EB%A7%88%ED%86%A02/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/7569" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/7569&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7569번: 토마토첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,www.acmicpc.net&lt;/p&gt;
&lt;p&gt;전의 토마토와 완전히 똑같은 방식이다.&lt;/p&gt;
&lt;p&gt;다만, 이번에는 z축이 추가됬다.&lt;/p&gt;
&lt;p&gt;i,j,k로 인덱싱하고,&lt;/p&gt;
&lt;p&gt;움직이는방향을 [[-1,0,0],[0,-1,0],[0,0,-1],[1,0,0],[0,1,0],[0,0,1]]&lt;/p&gt;
&lt;p&gt;6방향으로 bfs를 진행하면 된다.&lt;/p&gt;
&lt;p&gt;진행할때마다 얼마나 날짜가 지났는지까지 세주면 완벽&lt;/p&gt;
&lt;p&gt;마지막에, 하나씩탐색하다가 0이 있으면 -1출력하고 종료&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysinput=sys.stdin.readlinefrom collections import deque
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;moves=[[-1,0,0],[0,-1,0],[0,0,-1],[1,0,0],[0,1,0],[0,0,1]]def bfs(q): day=0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; while q: i,j,k,v=q.popleft() for move in moves:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a,b,c=move ti=a+i tj=b+j tk=c+k
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if 0&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;=ti&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;tk&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;m&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tk&lt;/span&gt;&lt;span class="err"&gt;]==&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;([&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;tk&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;])&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tj&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tk&lt;/span&gt;&lt;span class="err"&gt;]=&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;-1&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;j&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;k&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;m&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;k&lt;/span&gt;&lt;span class="err"&gt;]==&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;-1&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;return&lt;/span&gt; &lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;m&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;map(int,input().split())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;[[list(input().strip().split())for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)]&lt;/span&gt;&lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="err"&gt;)]&lt;/span&gt;&lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;deque()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;0for&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;j&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;k&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;m&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;k&lt;/span&gt;&lt;span class="err"&gt;]==&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;((&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;k&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;k&lt;/span&gt;&lt;span class="err"&gt;]=&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;-1&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt; &lt;span class="na"&gt;bfs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 2178 미로 탐색</title><link>https://log.j2234.cc/posts/2022-tistory/075-%EB%B0%B1%EC%A4%80-2178-%EB%AF%B8%EB%A1%9C-%ED%83%90%EC%83%89/</link><pubDate>Tue, 19 Apr 2022 20:32:12 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/075-%EB%B0%B1%EC%A4%80-2178-%EB%AF%B8%EB%A1%9C-%ED%83%90%EC%83%89/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2178" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2178&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2178번: 미로 탐색첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;그냥 전형적인 bfs문제&lt;/p&gt;
&lt;p&gt;bfs를 진행하면서 level까지 업데이트하고,&lt;/p&gt;
&lt;p&gt;n-1,m-1에 도달하면, level+1을 출력&lt;/p&gt;
&lt;p&gt;##코드##&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dequeimport&lt;/span&gt; &lt;span class="n"&gt;sysinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlinedef&lt;/span&gt; &lt;span class="n"&gt;bfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;0&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;popleft&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;move&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;moves&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;move&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tmp_i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;tmp_j&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;tmp_i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;tmp_j&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tmp_i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;tmp_j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# print(tmp_i,tmp_j,v)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tmp_i&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;tmp_j&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;tmp_i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;tmp_j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tmp_i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;tmp_j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;0&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="n"&gt;moves&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bfs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 2667 단지번호붙이기</title><link>https://log.j2234.cc/posts/2022-tistory/074-%EB%B0%B1%EC%A4%80-2667-%EB%8B%A8%EC%A7%80%EB%B2%88%ED%98%B8%EB%B6%99%EC%9D%B4%EA%B8%B0/</link><pubDate>Tue, 19 Apr 2022 13:07:47 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/074-%EB%B0%B1%EC%A4%80-2667-%EB%8B%A8%EC%A7%80%EB%B2%88%ED%98%B8%EB%B6%99%EC%9D%B4%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2667" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2667&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2667번: 단지번호붙이기&amp;lt;그림 1&amp;gt;과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여www.acmicpc.net&lt;/p&gt;
&lt;p&gt;흔한 탐색문제&lt;/p&gt;
&lt;p&gt;bfs로풀음&lt;/p&gt;
&lt;p&gt;2차원 배열 apartment를 돌면서,&lt;/p&gt;
&lt;p&gt;만약 apartment[i][j[]가 &amp;lsquo;1&amp;rsquo;인 경우에 bfs를 실행한다.&lt;/p&gt;
&lt;p&gt;여기서 한번에 몇집이나 탐색하는지만 세어주면 된다.&lt;/p&gt;
&lt;p&gt;##코드##&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysinput=sys.stdin.readlinefrom collections import deque#bfs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;moves=[[-1,0],[1,0],[0,-1],[0,1]]def bfs(i,j): s=deque() s.append([i,j])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; apartment[i][j]=0 cnt=1 while s: i,j=s.popleft()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for move in moves: a,b=move tmp_i,tmp_j=i+a,j+b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # print(tmp_i,tmp_j)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (0&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;=tmp_i&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;and&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="na"&gt;tmp_j&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;and&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;apartment&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;tmp_i&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tmp_j&lt;/span&gt;&lt;span class="err"&gt;]==&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;s&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;([&lt;/span&gt;&lt;span class="na"&gt;tmp_i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;tmp_j&lt;/span&gt;&lt;span class="err"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;apartment&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;tmp_i&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;tmp_j&lt;/span&gt;&lt;span class="err"&gt;]=&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt; &lt;span class="na"&gt;cnt&lt;/span&gt;&lt;span class="err"&gt;+=&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt; &lt;span class="na"&gt;return&lt;/span&gt; &lt;span class="na"&gt;cnt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;int(input())apartment=[list(input())for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)]&lt;/span&gt;&lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;j&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;apartment&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;]!=&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;bfs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt;&lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="err"&gt;()&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;len&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;l&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt;&lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;ll&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;l:&lt;/span&gt; &lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;ll&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 13023 ABCDE</title><link>https://log.j2234.cc/posts/2022-tistory/073-%EB%B0%B1%EC%A4%80-13023-abcde/</link><pubDate>Mon, 18 Apr 2022 13:01:34 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/073-%EB%B0%B1%EC%A4%80-13023-abcde/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/13023" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/13023&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;13023번: ABCDE문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음 읽었을 때는 뭔 개소린진 모르겠었는데, 검색해보니 아주 간단한 문제였다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A는 B와 친구다.&lt;/li&gt;
&lt;li&gt;B는 C와 친구다.&lt;/li&gt;
&lt;li&gt;C는 D와 친구다.&lt;/li&gt;
&lt;li&gt;D는 E와 친구다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;를 만족하는지 찾는다는 뜻은,&lt;/p&gt;
&lt;p&gt;a부터 시작해서 깊이가 4 (총 5개) 인 배열이 있는지 묻는 것이다.&lt;/p&gt;
&lt;p&gt;먼져, input을 받아 그래프를 만든다. (친구비를 내지 않는이상 쌍방향그래프일거다)&lt;/p&gt;
&lt;p&gt;친구관계가없는 찐따는 당연히 포함되지 않을 것이므로,&lt;/p&gt;
&lt;p&gt;친구관계가 하나라도 존재하는 정점을 모두 돌면서, 깊이가 4인 배열을 찾는다.&lt;/p&gt;</description></item><item><title>백준 11724 연결 요소의 개수</title><link>https://log.j2234.cc/posts/2022-tistory/072-%EB%B0%B1%EC%A4%80-11724-%EC%97%B0%EA%B2%B0-%EC%9A%94%EC%86%8C%EC%9D%98-%EA%B0%9C%EC%88%98/</link><pubDate>Sun, 17 Apr 2022 19:40:30 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/072-%EB%B0%B1%EC%A4%80-11724-%EC%97%B0%EA%B2%B0-%EC%9A%94%EC%86%8C%EC%9D%98-%EA%B0%9C%EC%88%98/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11724" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11724&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11724번: 연결 요소의 개수첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주www.acmicpc.net&lt;/p&gt;
&lt;p&gt;bfs와 dfs중 하나를 선택해서 풀면 됨&lt;/p&gt;
&lt;p&gt;먼져 visited를 만든다.&lt;/p&gt;
&lt;p&gt;이후 모든 정점에 대하여 방문을 하지 않은 노드에서 탐색을 수행한다. 이때마다 1씩 정답을&lt;/p&gt;
&lt;p&gt;증가시킨다.&lt;/p&gt;
&lt;p&gt;주의할 점&lt;/p&gt;</description></item><item><title>백준 11723 집합</title><link>https://log.j2234.cc/posts/2022-tistory/071-%EB%B0%B1%EC%A4%80-11723-%EC%A7%91%ED%95%A9/</link><pubDate>Sat, 16 Apr 2022 14:08:16 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/071-%EB%B0%B1%EC%A4%80-11723-%EC%A7%91%ED%95%A9/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11723" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11723&lt;/a&gt;`&lt;/p&gt;
&lt;p&gt;11723번: 집합첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;와 이거때문에 하루종일 고민했다.&lt;/p&gt;
&lt;p&gt;간단하게 set을 이용해서 풀수도 있다. 다만 비트마스킹을 체험해보고싶었다.&lt;/p&gt;
&lt;p&gt;우리는 s를 집합이아니라, 2비트 숫자로 이용해서 풀거다.&lt;/p&gt;
&lt;p&gt;x라는 숫자가 집합에 있다는것은 , s의 x번째가 1이라는 것이다. 당연히 없으면 0&lt;/p&gt;
&lt;p&gt;만일 {1,3}이라면&lt;/p&gt;
&lt;p&gt;s=0b1010 #0없음, 1있음, 2없음, 3있음&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;그리고, 문제의조건에 따라, 0은쓸일이없다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;명령&lt;/p&gt;
&lt;p&gt;**add x:**&lt;strong&gt;집합에 x를 추가한다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>백준 1182 부분수열의 합</title><link>https://log.j2234.cc/posts/2022-tistory/070-%EB%B0%B1%EC%A4%80-1182-%EB%B6%80%EB%B6%84%EC%88%98%EC%97%B4%EC%9D%98-%ED%95%A9/</link><pubDate>Fri, 15 Apr 2022 14:35:59 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/070-%EB%B0%B1%EC%A4%80-1182-%EB%B6%80%EB%B6%84%EC%88%98%EC%97%B4%EC%9D%98-%ED%95%A9/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1182" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1182&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1182번: 부분수열의 합첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;풀이 1:&lt;/p&gt;
&lt;p&gt;dfs로 모든 수열을 구한다음, 0이되는경우를 센다&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n,s=map(int,input().split())nums=[* map(int,input().split())]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;visit=[False for _ in range(n)]cnt=0tmp=[]def dfs(start=0): global cnt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if tmp: if sum(tmp)==s: cnt+=1 if len(tmp)==n:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return for i in range(start,len(nums)): if not visit[i]:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tmp.append(nums[i]) dfs(i+1) tmp.pop()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; visitdfs()print(cnt)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;풀이2:&lt;/p&gt;</description></item><item><title>백준 2529 부등호</title><link>https://log.j2234.cc/posts/2022-tistory/069-%EB%B0%B1%EC%A4%80-2529-%EB%B6%80%EB%93%B1%ED%98%B8/</link><pubDate>Wed, 13 Apr 2022 22:25:26 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/069-%EB%B0%B1%EC%A4%80-2529-%EB%B6%80%EB%93%B1%ED%98%B8/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2529" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2529&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2529번: 부등호여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력www.acmicpc.net&lt;/p&gt;
&lt;p&gt;글작성하다가날라가서 빡친다.&lt;/p&gt;
&lt;p&gt;문자열로만비교함&lt;/p&gt;
&lt;p&gt;배열을 dfs로 확장하다가,&lt;/p&gt;
&lt;p&gt;배열이 2 이상이면:&lt;/p&gt;
&lt;p&gt;배열의[-1][-2] 가 부등호[배열수-2)와 같지 않으면 가지친다.&lt;/p&gt;
&lt;p&gt;k+1까지 살아남은 배열을 모두 리스트에 넣고,&lt;/p&gt;
&lt;p&gt;가장작은값은 [0], 가장큰값은[-1]이 된다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sysinput=sys.stdin.readlinek=int(input())sign=input().split()ans_list=[]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;str_range=[str(x) for x in range(10)]def dfs(tmp): global min_ans
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; global max_ans if len(tmp)&amp;gt;1:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if sign[len(tmp)-2]==&amp;#39;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&amp;#39; and tmp[-2] &amp;gt; tmp[-1]: return
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if sign[len(tmp)-2]==&amp;#39;&amp;gt;&amp;#39; and tmp[-2] &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nt"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;-1&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;return&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;len&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;)==&lt;/span&gt;&lt;span class="na"&gt;k&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="na"&gt;1:&lt;/span&gt; &lt;span class="na"&gt;ans_list&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;(&amp;#39;&amp;#39;.&lt;/span&gt;&lt;span class="na"&gt;join&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt; &lt;span class="na"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;str_range:&lt;/span&gt; &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt; &lt;span class="na"&gt;not&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;tmp:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;dfs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pop&lt;/span&gt;&lt;span class="err"&gt;()&lt;/span&gt; &lt;span class="na"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;dfs&lt;/span&gt;&lt;span class="err"&gt;([])&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;ans_list&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;-1&lt;/span&gt;&lt;span class="err"&gt;],&lt;/span&gt;&lt;span class="na"&gt;ans_list&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="err"&gt;],&lt;/span&gt;&lt;span class="na"&gt;sep&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 14889 스타트와 링크</title><link>https://log.j2234.cc/posts/2022-tistory/068-%EB%B0%B1%EC%A4%80-14889-%EC%8A%A4%ED%83%80%ED%8A%B8%EC%99%80-%EB%A7%81%ED%81%AC/</link><pubDate>Wed, 13 Apr 2022 00:37:37 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/068-%EB%B0%B1%EC%A4%80-14889-%EC%8A%A4%ED%83%80%ED%8A%B8%EC%99%80-%EB%A7%81%ED%81%AC/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14889" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14889&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14889번: 스타트와 링크예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;맨처음에 itertools로풀었다.&lt;/p&gt;
&lt;p&gt;굳이 모든 콤비에 대하여 다 구할 필요 없이,&lt;/p&gt;
&lt;p&gt;콤비의 반만 계산하면 나머지는 스타트와 링크가 바뀐 경우이므로,&lt;/p&gt;
&lt;p&gt;반만 계산한다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from itertools import combinationsimport sysinput=sys.stdin.readline
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n=int(input())arr=[]for _ in range(n):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; arr.append([*map(int,input().split())])all_people=[x for x in range(n)]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;start_teams=list(combinations(all_people,n//2))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;start_teams=start_teams[:len(start_teams)//2]all_people=set(all_people)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;answer=1e+10for start in start_teams: link=list(set(start)^all_people)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; start_score=0 link_score=0 for i in range(n//2):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for j in range(n//2): start_score+=arr[start[i]][start[j]]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; link_score+=arr[link[i]][link[j]] tmp=abs(start_score-link_score)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if tmp&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;answer:&lt;/span&gt; &lt;span class="na"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;tmpprint(answer)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;del&gt;문제는 dfs로 풀 때 정답코드를 변수명만 다르게해서 배껴도 문제가 생긴다는 점이다.&lt;/del&gt;&lt;/p&gt;</description></item><item><title>백준 14051 퇴사</title><link>https://log.j2234.cc/posts/2022-tistory/067-%EB%B0%B1%EC%A4%80-14051-%ED%87%B4%EC%82%AC/</link><pubDate>Tue, 12 Apr 2022 17:45:12 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/067-%EB%B0%B1%EC%A4%80-14051-%ED%87%B4%EC%82%AC/</guid><description>&lt;p&gt;&lt;a href="https://fuckingcomputer.tistory.com/manage/newpost/?type=post&amp;amp;returnURL=%2Fmanage%2Fposts%2F" target="_blank" rel="noreferrer"&gt;https://fuckingcomputer.tistory.com/manage/newpost/?type=post&amp;amp;returnURL=%2Fmanage%2Fposts%2F&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TISTORY나를 표현하는 블로그를 만들어보세요.www.tistory.com&lt;/p&gt;
&lt;p&gt;실버2인데 개어려움&lt;/p&gt;
&lt;p&gt;기본적으로, 마지막날+1이어도 허용이 되므로, 마지막날+1을 만드는 아이디어가 중요하다.&lt;/p&gt;
&lt;p&gt;다시풀라고해도 풀수있을지모르겠다.&lt;/p&gt;
&lt;p&gt;2가지방법으로 풀 수 있다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;dfs로, 0부터 시작해서 포함안하는 경우와,&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;만일 포함가능하다면, 포함하는경우까지 생각해서 dfs를진행하고,&lt;/p&gt;
&lt;p&gt;마지막날+1까지 탐색했을때, 모든 경우의 수를 비교해 최대인 answer을 찾는다.&lt;/p&gt;
&lt;p&gt;##dfs코드##&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 포함안하고 그냥 넘어가는 경우 if index+arr[index][0]&amp;lt;=n:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;#포함하면 그다음가능한날짜##dfs 사용&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;#정답값for _ in range(n):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())])&lt;/span&gt;&lt;span class="n"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;2.Dp&lt;/p&gt;
&lt;p&gt;dp를 처음부터 해결해나간다는 고정관념을 버려야한다.&lt;/p&gt;
&lt;p&gt;앞서와 똑같은 이유로,마지막날을 해결하기 위해서 n+1의 dp 배열을 만든다.&lt;/p&gt;</description></item><item><title>백준 1759 암호 만들기</title><link>https://log.j2234.cc/posts/2022-tistory/066-%EB%B0%B1%EC%A4%80-1759-%EC%95%94%ED%98%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0/</link><pubDate>Mon, 11 Apr 2022 17:33:22 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/066-%EB%B0%B1%EC%A4%80-1759-%EC%95%94%ED%98%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1759" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1759&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1759번: 암호 만들기첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;알고리즘생각만했는데 알고보니 브루트포스였다.&lt;/p&gt;
&lt;p&gt;먼져, 입력으로 문자열을 정렬해서 받고, 모음의 갯수를 비교할 set(aeiou)를 만들어준다.&lt;/p&gt;
&lt;p&gt;dfs를 통하여 모든 조합을 구하고, 만일 조합과 aeiou의 set이 1 이상이고 l-1 미만인 경우만&lt;/p&gt;
&lt;p&gt;(모음이 1개 이상이고, 모음이 아닌게 2개 이상일 경우):&lt;/p&gt;
&lt;p&gt;조합을 출력한다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;aeiou&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;aeiou&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;set_password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;set_password&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;aeiou&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dfs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;returndfs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;##itertools사용코드##&lt;/p&gt;</description></item><item><title>백준 6603 로또</title><link>https://log.j2234.cc/posts/2022-tistory/065-%EB%B0%B1%EC%A4%80-6603-%EB%A1%9C%EB%98%90/</link><pubDate>Mon, 11 Apr 2022 13:49:41 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/065-%EB%B0%B1%EC%A4%80-6603-%EB%A1%9C%EB%98%90/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/6603" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/6603&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6603번: 로또입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 &amp;lt; k &amp;lt; 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로www.acmicpc.net&lt;/p&gt;
&lt;p&gt;그냥 구현하는문제인듯&lt;/p&gt;
&lt;p&gt;처음에한 뻘짓&lt;/p&gt;
&lt;p&gt;로또번호를 먼져 구하고, 그 다음에 모든경우의수 구하기&lt;/p&gt;
&lt;p&gt;머리가 나쁘면 손이고생함&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lotto_numbers=[]def make_lotto_numbers(start=0): if len(lotto_numbers)==k:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; make_lotto(lotto_numbers) return for i in range(start,k):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if t_case[i] not in lotto_numbers:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; lotto_numbers.append(t_case[i])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; make_lotto_numbers(start+1) lotto_numbers.pop() return
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lotto=[]def make_lotto(lotto_numbers,start=0): if len (lotto)==6:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(* lotto) return for i in range(start,k):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if lotto_numbers[i] not in lotto:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; lotto.append(lotto_numbers[i])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; make_lotto(lotto_numbers,i+1) lotto.pop() return
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;while True: tmp=[*map(int,input().split())] if tmp[0]==0:exit()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; k,t_case=tmp[0],tmp[1:] make_lotto_numbers() print()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;간단한 풀이&lt;/p&gt;</description></item><item><title>백준 10971 외판원 순회 2</title><link>https://log.j2234.cc/posts/2022-tistory/064-%EB%B0%B1%EC%A4%80-10971-%EC%99%B8%ED%8C%90%EC%9B%90-%EC%88%9C%ED%9A%8C-2/</link><pubDate>Mon, 11 Apr 2022 11:44:57 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/064-%EB%B0%B1%EC%A4%80-10971-%EC%99%B8%ED%8C%90%EC%9B%90-%EC%88%9C%ED%9A%8C-2/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/10971" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/10971&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10971번: 외판원 순회 2첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 jwww.acmicpc.net&lt;/p&gt;
&lt;p&gt;몇문제안풀어봐서그런가 dfs개념이 너무 어려웠다.&lt;/p&gt;
&lt;p&gt;먼져, 입력을 받는다.&lt;/p&gt;
&lt;p&gt;dfs함수를 정의하는데, 이때 {&lt;/p&gt;
&lt;p&gt;아직 방문x &amp;amp; 현재까지의 값이 answer보다 작음&amp;amp; arr[가장최근도시][갈도시]가 0이 아닌 경우에만&lt;/p&gt;
&lt;p&gt;dfs를 수행하고, 아니면 무시한다.}&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dfstmp=[]def dfs(start,next,v=0): #시작도시, 최근방문도시, 지금까지의 value
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; global answer #계속 업데이트할 정답값 if len (dfstmp)==n:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if arr[next][start]!=0: #마지막도시에서 첫도시로 못가는경우
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; answer=min(answer,v+arr[next][start]) for i in range(n):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if i not in dfstmp and arr[next][i]!=0 and v&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;answer:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="na"&gt;방문x&lt;/span&gt; &lt;span class="err"&gt;&amp;amp;&lt;/span&gt; &lt;span class="na"&gt;갈수있는길&lt;/span&gt; &lt;span class="err"&gt;&amp;amp;&lt;/span&gt; &lt;span class="na"&gt;정답보다&lt;/span&gt; &lt;span class="na"&gt;현재까지의v가&lt;/span&gt; &lt;span class="na"&gt;작을때만&lt;/span&gt; &lt;span class="na"&gt;수행&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;dfstmp&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;dfs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="err"&gt;][&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;dfstmp&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pop&lt;/span&gt;&lt;span class="err"&gt;()&lt;/span&gt; &lt;span class="na"&gt;return&lt;/span&gt; &lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;int(input())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;[[*map(int,input().split())]for&lt;/span&gt; &lt;span class="na"&gt;_&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)]&lt;/span&gt;&lt;span class="na"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1e+10&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="na"&gt;초깃값&lt;/span&gt; &lt;span class="na"&gt;큰&lt;/span&gt; &lt;span class="na"&gt;수&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt; &lt;span class="na"&gt;in&lt;/span&gt; &lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;:&lt;/span&gt; &lt;span class="na"&gt;dfstmp&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="na"&gt;각각의&lt;/span&gt; &lt;span class="na"&gt;도시를&lt;/span&gt; &lt;span class="na"&gt;시작으로&lt;/span&gt; &lt;span class="na"&gt;dfs수행&lt;/span&gt; &lt;span class="na"&gt;dfs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;dfstmp&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pop&lt;/span&gt;&lt;span class="err"&gt;()&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;answer&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 7576 토마토</title><link>https://log.j2234.cc/posts/2022-tistory/063-%EB%B0%B1%EC%A4%80-7576-%ED%86%A0%EB%A7%88%ED%86%A0/</link><pubDate>Sat, 09 Apr 2022 20:08:52 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/063-%EB%B0%B1%EC%A4%80-7576-%ED%86%A0%EB%A7%88%ED%86%A0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/7576" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/7576&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7576번: 토마토첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토www.acmicpc.net&lt;/p&gt;
&lt;p&gt;거의 처음으로풀어본 BFS문제라 좀 시행착오를 많이 겪었다.&lt;/p&gt;
&lt;p&gt;하다보면 나아지겠지&lt;/p&gt;
&lt;p&gt;먼져, 주어진 배열을 돌면서 stack에 원소가 1인 자릿값들을 넣는것부터 시작한다.&lt;/p&gt;
&lt;p&gt;토마토는 총 4방향으로 익기 시작하므로, moves=[[0,1],[0,-1],[1,0],[-1,0]] 를 선언해준다.&lt;/p&gt;
&lt;p&gt;이후 각각 BFS를 돌면서, 만일 원소가 -1이거나 1인 경우(이미 익은 경우) 를 제외하고, 계속 확장시킨다.&lt;/p&gt;</description></item><item><title>백준 1003 피보나치 함수</title><link>https://log.j2234.cc/posts/2022-tistory/062-%EB%B0%B1%EC%A4%80-1003-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%ED%95%A8%EC%88%98/</link><pubDate>Fri, 08 Apr 2022 20:25:47 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/062-%EB%B0%B1%EC%A4%80-1003-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%ED%95%A8%EC%88%98/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1003" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1003&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1003번: 피보나치 함수각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;dp감찾을려고 풀어본 문제&lt;/p&gt;
&lt;p&gt;공책에 한번 써보면 쉽게풀림&lt;/p&gt;
&lt;p&gt;2차원 배열로 품&lt;/p&gt;
&lt;p&gt;dp[n]=[dp[n-1][0]+dp[n-2][0],dp[n-1][1]+dp[n-2][1]]&lt;/p&gt;
&lt;p&gt;##코드&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dp=[[0,0]for _ in range(41)]dp[0],dp[1]=[1,0],[0,1]for i in range(2,41):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dp[i]=[dp[i-1][0]+dp[i-2][0],dp[i-1][1]+dp[i-2][1]] 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;for _ in range(int(input())): print(* dp[int(input())])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 10819 차이를 최대로</title><link>https://log.j2234.cc/posts/2022-tistory/061-%EB%B0%B1%EC%A4%80-10819-%EC%B0%A8%EC%9D%B4%EB%A5%BC-%EC%B5%9C%EB%8C%80%EB%A1%9C/</link><pubDate>Fri, 08 Apr 2022 17:16:00 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/061-%EB%B0%B1%EC%A4%80-10819-%EC%B0%A8%EC%9D%B4%EB%A5%BC-%EC%B5%9C%EB%8C%80%EB%A1%9C/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/10819" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/10819&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10819번: 차이를 최대로첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;오우야&lt;/p&gt;
&lt;p&gt;그냥 노가다문제이다.&lt;/p&gt;
&lt;p&gt;먼져, 배열에 들어있는 수로 만들수 있는, 길이가 n인 모든 배열을 구한다.&lt;/p&gt;
&lt;p&gt;그모든 배열에 대해서 |A[0] - A[1]| + |A[1] - A[2]| + &amp;hellip; + |A[N-2] - A[N-1]|를 구한다.&lt;/p&gt;
&lt;p&gt;최댓값을 찾는다.&lt;/p&gt;
&lt;p&gt;근데 거의 처음구현해봐서 좀 빡셌다.&lt;/p&gt;
&lt;p&gt;근데 노가다라서 어렵지는 않았다.&lt;/p&gt;</description></item><item><title>백준 10972 다음 순열</title><link>https://log.j2234.cc/posts/2022-tistory/060-%EB%B0%B1%EC%A4%80-10972-%EB%8B%A4%EC%9D%8C-%EC%88%9C%EC%97%B4/</link><pubDate>Fri, 08 Apr 2022 15:56:12 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/060-%EB%B0%B1%EC%A4%80-10972-%EB%8B%A4%EC%9D%8C-%EC%88%9C%EC%97%B4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/10972" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/10972&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10972번: 다음 순열첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;실버3이지만 최근에 푼 문제중에 가장 어려웠다.&lt;/p&gt;
&lt;p&gt;c++에서는 이를 함수하나로 쉽게 구할 수 있다한다.&lt;/p&gt;
&lt;p&gt;도저희 모르겠어서 구글링했다.&lt;/p&gt;
&lt;p&gt;알고리즘은 이렇다.&lt;/p&gt;
&lt;p&gt;수열의 뒤에서부터, i &amp;gt;i-1인 경우를 찾는다.&lt;/p&gt;
&lt;p&gt;i-1을 x, i-2를 y라 정하자&lt;/p&gt;
&lt;p&gt;찾은 후, 다시 뒤에서부터 x보다 큰 값을 찾아 swap해준다.&lt;/p&gt;
&lt;p&gt;이후, y전까지의 배열은 그대로 놔두고, [:i]&lt;/p&gt;
&lt;p&gt;y부터 끝까지의 배열을 정렬한다. sorted([i:])&lt;/p&gt;
&lt;p&gt;이 둘을 합치면 된다.&lt;/p&gt;</description></item><item><title>백준 2812 크게 만들기</title><link>https://log.j2234.cc/posts/2022-tistory/059-%EB%B0%B1%EC%A4%80-2812-%ED%81%AC%EA%B2%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0/</link><pubDate>Wed, 06 Apr 2022 19:37:02 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/059-%EB%B0%B1%EC%A4%80-2812-%ED%81%AC%EA%B2%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2812" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2812&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2812번: 크게 만들기N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;스택 알고리즘 강의를 들었던게 도움이 되었다.&lt;/p&gt;
&lt;p&gt;내 혼자힘으로 푼 몇안되는 골드문제중 1&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;숫자를 문자 리스트로받아 하나씩 떨어뜨려놓는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2.반복문을 돌면서, 앞에부터 1개씩 스택에 추가한다.&lt;/p&gt;
&lt;p&gt;!!! 만일 추가할 숫자가 스택의 마지막(-1)보다 작다면, 스택마지막이 추가할 숫자보다 클때까지, 혹은 스택이 없을때까지, 혹은 k가 0일때까지 pop()해준다.&lt;/p&gt;
&lt;p&gt;총 k개까지 제거할 수 있으므로, pop할때마다 k를 1씩 빼주고 0이 되면 종료한다.!!!&lt;/p&gt;</description></item><item><title>백준 15666 N과 M (12)</title><link>https://log.j2234.cc/posts/2022-tistory/058-%EB%B0%B1%EC%A4%80-15666-n%EA%B3%BC-m-12/</link><pubDate>Wed, 06 Apr 2022 12:17:38 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/058-%EB%B0%B1%EC%A4%80-15666-n%EA%B3%BC-m-12/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/15666" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/15666&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;15666번: N과 M (12)한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해www.acmicpc.net&lt;/p&gt;
&lt;p&gt;비슷한 문제가 너무 많아서 이것만 풀었다.&lt;/p&gt;
&lt;p&gt;지금 깨달았는데, 이것도 dfs문제인거 같다.&lt;/p&gt;
&lt;p&gt;풀이는따로안적어야지&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;answer=[]def mn12(start=0): if len(answer)==m: print(* answer)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return for i in range(start,len(n_list)):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; answer.append(n_list[i]) mn12(i) answer.pop()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n,m=map(int,input().split())
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n_list=sorted(list(set([* map(int,input().split())])))mn12()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 15652 N과 M (4)</title><link>https://log.j2234.cc/posts/2022-tistory/057-%EB%B0%B1%EC%A4%80-15652-n%EA%B3%BC-m-4/</link><pubDate>Wed, 06 Apr 2022 12:05:03 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/057-%EB%B0%B1%EC%A4%80-15652-n%EA%B3%BC-m-4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/15652" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/15652&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;15652번: N과 M (4)한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해www.acmicpc.net&lt;/p&gt;
&lt;p&gt;설명할게있나?&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;answer=[]def nm4(start=1): if len(answer)==m: print (*answer)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return for i in range(start,n+1): answer.append(i)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; nm4(i) answer.pop()n,m=map(int,input().split())nm4()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 6064 카잉 달력</title><link>https://log.j2234.cc/posts/2022-tistory/056-%EB%B0%B1%EC%A4%80-6064-%EC%B9%B4%EC%9E%89-%EB%8B%AC%EB%A0%A5/</link><pubDate>Tue, 05 Apr 2022 13:51:34 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/056-%EB%B0%B1%EC%A4%80-6064-%EC%B9%B4%EC%9E%89-%EB%8B%AC%EB%A0%A5/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/6064" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/6064&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6064번: 카잉 달력입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;살짝 어려웠다.&lt;/p&gt;
&lt;p&gt;x의 값을 고정시켜놓는다는 아이디어가 중요하다.&lt;/p&gt;
&lt;p&gt;x는 m%x이므로, x에 아무리 m을 더해도 x값은 같다.&lt;/p&gt;
&lt;p&gt;x에 m을 계속 더하면서, x%n이 y%n(0일경우도대비)이 되는 x값을 구한다.&lt;/p&gt;
&lt;p&gt;만일 x가 m*n보다 커진다면, 이는 무한루프이므로 -1을 출력한다.&lt;/p&gt;
&lt;p&gt;##처음코드##&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;for _ in range(int(input())): m,n,x,y=map(int,input().split()) pivot=x%m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if pivot==0:pivot=m tmp=pivot while True: a=tmp%n
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if not a: a=n if a==y: print(tmp) break
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tmp+=m if tmp&amp;gt;(m*n): print(-1) break&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;##함수사용 깔끔 코드##&lt;/p&gt;</description></item><item><title>백준 1260 DFS와BFS</title><link>https://log.j2234.cc/posts/2022-tistory/055-%EB%B0%B1%EC%A4%80-1260-dfs%EC%99%80bfs/</link><pubDate>Mon, 04 Apr 2022 14:41:07 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/055-%EB%B0%B1%EC%A4%80-1260-dfs%EC%99%80bfs/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1260" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1260&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1260번: DFS와 BFS첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사www.acmicpc.net&lt;/p&gt;
&lt;p&gt;문제 자체는 아무런트릭이 없지만 그래프 탐색 알고리즘을 먼져 공부해야 풀 수 있는 문제&lt;/p&gt;
&lt;p&gt;깊이 우선 탐색(BFS -Depth-First Search)&lt;/p&gt;
&lt;p&gt;은 말 그대로 깊이를 우선하는 탐색이다.&lt;/p&gt;
&lt;p&gt;재귀함수를 이용하여 구현하며, 가장 깊은곳까지 탐색한 후 더이상의 노드가 없을 때,&lt;/p&gt;</description></item><item><title>백준 2565 전깃줄</title><link>https://log.j2234.cc/posts/2022-tistory/054-%EB%B0%B1%EC%A4%80-2565-%EC%A0%84%EA%B9%83%EC%A4%84/</link><pubDate>Mon, 04 Apr 2022 12:12:42 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/054-%EB%B0%B1%EC%A4%80-2565-%EC%A0%84%EA%B9%83%EC%A4%84/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2565" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2565&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2565번: 전깃줄첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는www.acmicpc.net&lt;/p&gt;
&lt;p&gt;예전에 비슷한 문제를 읽어봐서 쉽게 풀 수 있었다.&lt;/p&gt;
&lt;p&gt;문제는 헷갈리지만, 이를 요약하면,&lt;/p&gt;
&lt;p&gt;&amp;lsquo;가장 긴 부분 증가수열을 A를 찾아라&amp;rsquo; 로 요약할 수 있다.&lt;/p&gt;
&lt;p&gt;이후 전체 전깃줄에서 A에 속하지 않은 전깃줄을 모두 잘라내면 되므로&lt;/p&gt;
&lt;p&gt;전체길이-가장 긴 부분증가수열의 길이 가 답이다&lt;/p&gt;
&lt;p&gt;%%코드%%&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n=int(input())elect=sorted([list(map(int,input().split()))for _ in range(n)])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dp=[1 for _ in range(n)]for i in range(1,n): for j in range(i):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if elect[i][1]&amp;gt;elect[j][1]: tmp=dp[j]+1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if tmp&amp;gt;dp[i]: dp[i]=tmpmax_dp=max(dp)print(n-max_dp)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;모르는 알고리즘이면 유추하느라 고생깨나 했을거같다.&lt;/p&gt;</description></item><item><title>백준 11170 0의 개수</title><link>https://log.j2234.cc/posts/2022-tistory/053-%EB%B0%B1%EC%A4%80-11170-0%EC%9D%98-%EA%B0%9C%EC%88%98/</link><pubDate>Sun, 03 Apr 2022 16:06:04 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/053-%EB%B0%B1%EC%A4%80-11170-0%EC%9D%98-%EA%B0%9C%EC%88%98/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;t=int(input())for _ in range(t): answer=0 n,m=map(int ,input().split())
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for i in range(n,m+1): for j in str(i): if j==&amp;#39;0&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; answer+=1 print(answer)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11170" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11170&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11170번: 0의 개수N부터 M까지의 수들을 종이에 적었을 때 종이에 적힌 0들을 세는 프로그램을 작성하라. 예를 들어, N, M이 각각 0, 10일 때 0을 세면 0에 하나, 10에 하나가 있으므로 답은 2이다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;브루트포스&lt;/p&gt;
&lt;p&gt;걍 0세서&lt;/p&gt;
&lt;p&gt;구하면됨&lt;/p&gt;
&lt;p&gt;끝&lt;/p&gt;
&lt;p&gt;##코드##&lt;/p&gt;</description></item><item><title>백준 1748 수 이어쓰기 1</title><link>https://log.j2234.cc/posts/2022-tistory/052-%EB%B0%B1%EC%A4%80-1748-%EC%88%98-%EC%9D%B4%EC%96%B4%EC%93%B0%EA%B8%B0-1/</link><pubDate>Sat, 02 Apr 2022 20:23:30 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/052-%EB%B0%B1%EC%A4%80-1748-%EC%88%98-%EC%9D%B4%EC%96%B4%EC%93%B0%EA%B8%B0-1/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1748" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1748&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1748번: 수 이어 쓰기 1첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;웬진모르겠지만 브루트포스에 섞여있어서,&lt;/p&gt;
&lt;p&gt;1부터 n까지 모든 수의 len(str())을 더해서 풀었는데, 시간초과가 났다.&lt;/p&gt;
&lt;p&gt;그래서방법을 갈구하다가,&lt;/p&gt;
&lt;p&gt;자리의 규칙을 찾아냈다.&lt;/p&gt;
&lt;p&gt;1+2+&amp;hellip;.+9=9 (10^0)&lt;em&gt;(9&lt;/em&gt;1)&lt;/p&gt;
&lt;p&gt;10+11&amp;hellip;..+9=180 (10^1)&lt;em&gt;(9&lt;/em&gt;2)&lt;/p&gt;
&lt;p&gt;101+102+&amp;hellip;..(999)=2700 (10^2)&lt;em&gt;(9&lt;/em&gt;3)&lt;/p&gt;
&lt;p&gt;예를 들어 n이 998이라면, 3자리이므로&lt;/p&gt;
&lt;p&gt;먼져 999까지의 모든 숫자를 더해준다 9+180+2700=2889&lt;/p&gt;
&lt;p&gt;여기서 999와 998의 차이를 구한다&lt;/p&gt;
&lt;p&gt;999 (10^3-1) - 998=1&lt;/p&gt;
&lt;p&gt;그후, 이 차이에 있는 숫자들은 모두 3자리이므로,&lt;/p&gt;
&lt;p&gt;999까지 모두 생각한 결과에서, 차이에 있는 숫자들의 갯수 * 3을 빼준다.&lt;/p&gt;</description></item><item><title>백준 1107 리모컨</title><link>https://log.j2234.cc/posts/2022-tistory/051-%EB%B0%B1%EC%A4%80-1107-%EB%A6%AC%EB%AA%A8%EC%BB%A8/</link><pubDate>Sat, 02 Apr 2022 15:07:44 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/051-%EB%B0%B1%EC%A4%80-1107-%EB%A6%AC%EB%AA%A8%EC%BB%A8/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1107" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1107&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1107번: 리모컨첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼www.acmicpc.net&lt;/p&gt;
&lt;p&gt;풀이방법이 도저히 생각이 안나서 힌트를 얻었더니 그냥 노가다문제였다.&lt;/p&gt;
&lt;p&gt;그냥 1부터 500000*2의 수까지 모두 돌면서, 만들수 있으면 n과의 거리를 구하고, 만들수없으면 넘어간다.&lt;/p&gt;
&lt;p&gt;앞의 조건 &amp;lsquo;고장난버튼이있는 경우에는 셋제줄에 고장난버튼이 주어진다&amp;rsquo; 때문에 고생했다.&lt;/p&gt;
&lt;p&gt;고장난버튼이 0일때 입력을 받으면 eof에러가 나므로, 이경우만 예외처리해주면 된다.&lt;/p&gt;</description></item><item><title>백준 1476 날짜 계산</title><link>https://log.j2234.cc/posts/2022-tistory/050-%EB%B0%B1%EC%A4%80-1476-%EB%82%A0%EC%A7%9C-%EA%B3%84%EC%82%B0/</link><pubDate>Sat, 02 Apr 2022 13:10:16 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/050-%EB%B0%B1%EC%A4%80-1476-%EB%82%A0%EC%A7%9C-%EA%B3%84%EC%82%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1476" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1476&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1476번: 날짜 계산준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타www.acmicpc.net&lt;/p&gt;
&lt;p&gt;문제는 긴데 요약하면 너무 간단하다.&lt;/p&gt;
&lt;p&gt;year%15가 e, year%28이 s, year%19가 m인&lt;/p&gt;
&lt;p&gt;year을 찾으면된다.&lt;/p&gt;
&lt;p&gt;만일 15의 배수이면, 0이되므로 0일때만 예외처리해주면됨&lt;/p&gt;</description></item><item><title>백준 3085 사탕 게임</title><link>https://log.j2234.cc/posts/2022-tistory/049-%EB%B0%B1%EC%A4%80-3085-%EC%82%AC%ED%83%95-%EA%B2%8C%EC%9E%84/</link><pubDate>Fri, 01 Apr 2022 14:38:25 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/049-%EB%B0%B1%EC%A4%80-3085-%EC%82%AC%ED%83%95-%EA%B2%8C%EC%9E%84/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/3085" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/3085&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3085번: 사탕 게임예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;와 나는 알고리즘생각하느라 잠을못잘뻔했는데&lt;/p&gt;
&lt;p&gt;알고보니 그딴거없이 하나씩 다 해보는게 브루트포스였다.&lt;/p&gt;
&lt;p&gt;먼져, 2차원 보드에서 연속되는 값의 최댓값을 셀 함수 check(board) 를 만든다.&lt;/p&gt;
&lt;p&gt;모든 행, 열 을 비교하며 가장 많이 연속되는 값의 개수를 리턴한다..&lt;/p&gt;
&lt;p&gt;메인에서&lt;/p&gt;
&lt;p&gt;우리는 굳이 4방향을 다 바꿀 필요 없이, 각 원소의 오른쪽과 아래만 바꾸면 모든 경우를 다 시험 가능하다.&lt;/p&gt;
&lt;p&gt;각 행, 열의 마지막 원소는 바꿀 필요 없으므로 예외처리를 한다.&lt;/p&gt;</description></item><item><title>백준 1920 수 찾기</title><link>https://log.j2234.cc/posts/2022-tistory/048-%EB%B0%B1%EC%A4%80-1920-%EC%88%98-%EC%B0%BE%EA%B8%B0/</link><pubDate>Thu, 31 Mar 2022 15:07:01 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/048-%EB%B0%B1%EC%A4%80-1920-%EC%88%98-%EC%B0%BE%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1920" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1920&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1920번: 수 찾기첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들www.acmicpc.net&lt;/p&gt;
&lt;p&gt;진짜 기초개념인 이분탐색 문제였는데, 정신없는상테해서하느라 30분은 헤멘 듯 하다.&lt;/p&gt;
&lt;p&gt;따로 설명은 안하겠다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pivot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pivot&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pivot&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;bs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;pivot&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;bs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;pivot&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())])&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;mm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 17404 RGB거리 2</title><link>https://log.j2234.cc/posts/2022-tistory/047-%EB%B0%B1%EC%A4%80-17404-rgb%EA%B1%B0%EB%A6%AC-2/</link><pubDate>Wed, 30 Mar 2022 12:28:19 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/047-%EB%B0%B1%EC%A4%80-17404-rgb%EA%B1%B0%EB%A6%AC-2/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/17404" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/17404&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;17404번: RGB거리 2첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에 엄청 헤멨다.&lt;/p&gt;
&lt;p&gt;처음 집을 칠하는 경우가 3가지니 3가지 경우의 수를 두고 dp를 구하는 것까진 생각했으나, 코드가 너무 복잡했다.&lt;/p&gt;
&lt;p&gt;처음 집 0을 칠하는 경우를 예로 들면&lt;/p&gt;
&lt;p&gt;두번째 집에서는 0을 칠하지 못하므로 이를 제외한경우의 수를 구하는데&amp;hellip;&amp;hellip;&amp;hellip;..&lt;/p&gt;</description></item><item><title>백준 13398 연속합 2</title><link>https://log.j2234.cc/posts/2022-tistory/046-%EB%B0%B1%EC%A4%80-13398-%EC%97%B0%EC%86%8D%ED%95%A9-2/</link><pubDate>Tue, 29 Mar 2022 13:30:41 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/046-%EB%B0%B1%EC%A4%80-13398-%EC%97%B0%EC%86%8D%ED%95%A9-2/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/13398" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/13398&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;13398번: 연속합 2첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;도저히 나의 편협한 사고방식으로는 이해되지 않아&lt;/p&gt;
&lt;p&gt;힌트를 얻었다. 생각보다 간단하다.&lt;/p&gt;
&lt;p&gt;먼져,수열 a를 받는다.&lt;/p&gt;
&lt;p&gt;그후, 2차원 dp배열을 생성한다.&lt;/p&gt;
&lt;p&gt;dp[i][0]은 i를 포함하는 수열 중 가장 큰 수열의 합이다.&lt;/p&gt;
&lt;p&gt;dp[i][1]은 i를 포함하는 수열에서 하나를 뺐을 때 가장 큰 수열의 합이다.&lt;/p&gt;
&lt;p&gt;dp[i][0]은 그냥 그 전의값이 0보다 클 때만 더하고, 아니면 a[i]를 반환하면 된다.&lt;/p&gt;</description></item><item><title>백준 11054 가장 긴 바이토닉 부분 수열</title><link>https://log.j2234.cc/posts/2022-tistory/045-%EB%B0%B1%EC%A4%80-11054-%EA%B0%80%EC%9E%A5-%EA%B8%B4-%EB%B0%94%EC%9D%B4%ED%86%A0%EB%8B%89-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4/</link><pubDate>Mon, 28 Mar 2022 12:56:02 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/045-%EB%B0%B1%EC%A4%80-11054-%EA%B0%80%EC%9E%A5-%EA%B8%B4-%EB%B0%94%EC%9D%B4%ED%86%A0%EB%8B%89-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11054" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11054&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11054번: 가장 긴 바이토닉 부분 수열첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)www.acmicpc.net&lt;/p&gt;
&lt;p&gt;엄청끙끙대다가 접근방식을 봤는데 생각보다 너무 간단했다.&lt;/p&gt;
&lt;p&gt;수열 a의 모든 원소 i에 대해서,&lt;/p&gt;
&lt;p&gt;a[i]까지의 증가하는 수열과a[j]까지의 감소하는 수열을 구한다.&lt;/p&gt;
&lt;p&gt;이후 이 둘을 더하고 1을빼주면 된다.(a가 중복되므로)&lt;/p&gt;
&lt;p&gt;나는 그냥 반복을 2번돌려서 풀었다.&lt;/p&gt;
&lt;p&gt;증가하는 수열을 모두 구한 후에, 감소하는 수열을 모두 구했다.&lt;/p&gt;</description></item><item><title>백준 4358 생태학</title><link>https://log.j2234.cc/posts/2022-tistory/044-%EB%B0%B1%EC%A4%80-4358-%EC%83%9D%ED%83%9C%ED%95%99/</link><pubDate>Mon, 28 Mar 2022 00:58:24 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/044-%EB%B0%B1%EC%A4%80-4358-%EC%83%9D%ED%83%9C%ED%95%99/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/4358" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/4358&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4358번: 생태학프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어www.acmicpc.net&lt;/p&gt;
&lt;p&gt;이전에 이럴때 dict를활용하는 문제를 풀어서 쉬웠다.&lt;/p&gt;
&lt;p&gt;각각의 입력을 받고, dict에있으면 값에 1을 더해주고, 없으면 값을 1로 생성한다.&lt;/p&gt;
&lt;p&gt;입력이없으면 멈춘다.&lt;/p&gt;
&lt;p&gt;사전순을 위해 dict를 정렬해주고, print하면된다. (value는 모든 value의 합으로 나눠주고 100을 곱해준다)&lt;/p&gt;
&lt;p&gt;단하나까다로웠던게, 파이썬에서는 round가 정확하지 않다.&lt;/p&gt;
&lt;p&gt;따라서 :.4f를 이용해서 출력해야한다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readline&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;all&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;all&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;.4f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 11047 동전 0</title><link>https://log.j2234.cc/posts/2022-tistory/043-%EB%B0%B1%EC%A4%80-11047-%EB%8F%99%EC%A0%84-0/</link><pubDate>Sun, 27 Mar 2022 20:13:15 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/043-%EB%B0%B1%EC%A4%80-11047-%EB%8F%99%EC%A0%84-0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11047" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11047&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11047번: 동전 0첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)www.acmicpc.net&lt;/p&gt;
&lt;p&gt;dp만풀다가 푸니깐 힐링된다.&lt;/p&gt;
&lt;p&gt;k=돈&lt;/p&gt;
&lt;p&gt;cnt=횟수&lt;/p&gt;
&lt;p&gt;먼져, 동전의 가치를 리스트로 저장해준다.&lt;/p&gt;
&lt;p&gt;그리고, 가장 큰 동전이 k보다 작을때까지 pop해준다.&lt;/p&gt;
&lt;p&gt;그후, (k//가장큰 동전) 을 cnt에 추가해주고 (동전을 몇번사용했는가)&lt;/p&gt;
&lt;p&gt;(k%가장큰동전)을 k로 선언한다. (동전을 최대한 쓰고 남은 돈)&lt;/p&gt;</description></item><item><title>백준 2156 포도주 시식</title><link>https://log.j2234.cc/posts/2022-tistory/042-%EB%B0%B1%EC%A4%80-2156-%ED%8F%AC%EB%8F%84%EC%A3%BC-%EC%8B%9C%EC%8B%9D/</link><pubDate>Sun, 27 Mar 2022 18:20:28 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/042-%EB%B0%B1%EC%A4%80-2156-%ED%8F%AC%EB%8F%84%EC%A3%BC-%EC%8B%9C%EC%8B%9D/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2156" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2156&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2156번: 포도주 시식효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규www.acmicpc.net&lt;/p&gt;
&lt;p&gt;어려웠다.&lt;/p&gt;
&lt;p&gt;g[i]는 포도주의 양&lt;/p&gt;
&lt;p&gt;dp[i] 는 i를 마지막으로 마셨을 때 최대인 포도주값이다.&lt;/p&gt;
&lt;p&gt;맨 처음에 당연히 i-3+i-1과 i-2를 비교하면 된다고 생각했지만,&lt;/p&gt;
&lt;p&gt;사실 i-4+i-1이 i-3+i-1보다 클 수 있다.&lt;/p&gt;
&lt;p&gt;ex)&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Column 1&lt;/th&gt;
 &lt;th&gt;Column 2&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;7 2 2 1 1 2 2 1 &lt;em&gt;(마지막 잔을 안 마시는 경우)&lt;/em&gt;&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;질문을 찾아보다가 &lt;a href="https://raejoonee.tistory.com/15" target="_blank" rel="noreferrer"&gt;https://raejoonee.tistory.com/15&lt;/a&gt;를 보고 반례를 찾을 수 있었다.&lt;/p&gt;</description></item><item><title>백준 12096 (넌센스)</title><link>https://log.j2234.cc/posts/2022-tistory/041-%EB%B0%B1%EC%A4%80-12096-%EB%84%8C%EC%84%BC%EC%8A%A4/</link><pubDate>Sat, 26 Mar 2022 20:33:23 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/041-%EB%B0%B1%EC%A4%80-12096-%EB%84%8C%EC%84%BC%EC%8A%A4/</guid><description>&lt;p&gt;ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;html을 열면 링크를 통해 들어갈 수 있다.&lt;/p&gt;
&lt;p&gt;그 후 문제의 html을 분석해보면&lt;/p&gt;
&lt;!-- 66y47KCc7J2YIOygleuLteydgA== --&gt;
&lt;!-- 7JWM66Ck7KSEIOyImCDsl4bri6Q= --&gt;
&lt;!-- 7ZWY7KeA66eMIO2ejO2KuOuKlCDsnojri6Q= --&gt;
&lt;!-- 7Z6M7Yq464qUIGh0dHBzOi8vc3RhcnRsaW5rLmlvLyDsl5Ag7J6I64qUIOOFiOOFjuOFguOFjg== --&gt;
&lt;p&gt;의 주석을을 발결할 수 있고&lt;/p&gt;
&lt;p&gt;각각 base64로 디코딩하면&lt;/p&gt;
&lt;p&gt;문제의정답은&lt;/p&gt;
&lt;p&gt;알려줄수없다.&lt;/p&gt;
&lt;p&gt;하지만 힌트는 있다.&lt;/p&gt;
&lt;p&gt;힌트는 &lt;a href="https://startlink.io/" target="_blank" rel="noreferrer"&gt;https://startlink.io/&lt;/a&gt; 에 있는 ㅈㅎㅂㅎ&lt;/p&gt;
&lt;p&gt;가 된다.&lt;/p&gt;
&lt;p&gt;ㅈㅎㅂㅎ는 전화번호였다.&lt;/p&gt;
&lt;p&gt;맨밑에전화번호를입력하면된다.&lt;/p&gt;</description></item><item><title>백준 1990 소수인펠린드롬</title><link>https://log.j2234.cc/posts/2022-tistory/040-%EB%B0%B1%EC%A4%80-1990-%EC%86%8C%EC%88%98%EC%9D%B8%ED%8E%A0%EB%A6%B0%EB%93%9C%EB%A1%AC/</link><pubDate>Sat, 26 Mar 2022 13:46:46 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/040-%EB%B0%B1%EC%A4%80-1990-%EC%86%8C%EC%88%98%EC%9D%B8%ED%8E%A0%EB%A6%B0%EB%93%9C%EB%A1%AC/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1990" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1990&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1990번: 소수인팰린드롬151은 소수이면서 동시에 팰린드롬이기 때문에 소수인 팰린드롬이다. 팰린드롬이란 앞으로 읽어나 뒤로 읽으나 같은 수를 말한다. 예를 들어 1234는 앞으로 읽으면 1234지만, 뒤로 읽으면 4321이 되www.acmicpc.net&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;진짜 씨발 ㅈ같은 문제였다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;처음에는 &amp;lsquo;골드치고 웰케 쉽지&amp;rsquo; 했는데 역시나 함정이 숨어있었다.&lt;/p&gt;
&lt;p&gt;가장 먼저, 체로 풀었는데 시간초과가 났다.&lt;/p&gt;
&lt;p&gt;그래서 a부터 b까지의 모든 펠린드롬을 n 구하고, 이를 int(n**0.5)+1 까지의 모든 수로 나눠서 판별했다.&lt;/p&gt;
&lt;p&gt;역시 시간초과가 났다.&lt;/p&gt;
&lt;p&gt;여기서부터 별짓을 다해봤다.&lt;/p&gt;
&lt;p&gt;짝수중에 소수는 2밖에 없으므로, 2로 먼져 나눠보고 3부터 2씩 증가시켜서 나눠보고,&lt;/p&gt;</description></item><item><title>백준 11722 가장 긴 감소하는 부분 수열</title><link>https://log.j2234.cc/posts/2022-tistory/039-%EB%B0%B1%EC%A4%80-11722-%EA%B0%80%EC%9E%A5-%EA%B8%B4-%EA%B0%90%EC%86%8C%ED%95%98%EB%8A%94-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4/</link><pubDate>Fri, 25 Mar 2022 18:33:56 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/039-%EB%B0%B1%EC%A4%80-11722-%EA%B0%80%EC%9E%A5-%EA%B8%B4-%EA%B0%90%EC%86%8C%ED%95%98%EB%8A%94-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11722" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11722&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11722번: 가장 긴 감소하는 부분 수열수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10}www.acmicpc.net&lt;/p&gt;
&lt;p&gt;&amp;lsquo;가장 긴 증가하는 부분 수열&amp;rsquo; 의 반대로만 하면 된다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())]&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt; &lt;span class="n"&gt;max_len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;max_len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="n"&gt;max_len&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 11055 가장 큰 증가 부분 수열</title><link>https://log.j2234.cc/posts/2022-tistory/038-%EB%B0%B1%EC%A4%80-11055-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%A6%9D%EA%B0%80-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4/</link><pubDate>Fri, 25 Mar 2022 18:05:05 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/038-%EB%B0%B1%EC%A4%80-11055-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%A6%9D%EA%B0%80-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11055" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11055&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11055번: 가장 큰 증가 부분 수열수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수www.acmicpc.net&lt;/p&gt;
&lt;p&gt;역시 dp&lt;/p&gt;
&lt;p&gt;수열 A를 받는다.&lt;/p&gt;
&lt;p&gt;A를 베껴 dp를 만든다.&lt;/p&gt;
&lt;p&gt;dp[i]=A[i]를 끝으로 하는 수열의 가장 긴 길이이다.&lt;/p&gt;
&lt;p&gt;A[i]부터 왼쪽으로 탐색하면서&lt;/p&gt;
&lt;p&gt;A[i]보다 작은 값들중 가장 큰 A[?]를 구하고&lt;/p&gt;</description></item><item><title>백준 1932 정수 삼각형</title><link>https://log.j2234.cc/posts/2022-tistory/037-%EB%B0%B1%EC%A4%80-1932-%EC%A0%95%EC%88%98-%EC%82%BC%EA%B0%81%ED%98%95/</link><pubDate>Fri, 25 Mar 2022 17:35:33 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/037-%EB%B0%B1%EC%A4%80-1932-%EC%A0%95%EC%88%98-%EC%82%BC%EA%B0%81%ED%98%95/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1932" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1932&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1932번: 정수 삼각형첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음보는 구조라 당황했는데 dp개념만 알면 간단하다&lt;/p&gt;
&lt;p&gt;좀만 들여다보면 규칙이 나온다&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;점화식&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dp[i][j]=&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;j가 0이라면: dp[i][j]+=&lt;strong&gt;dp[i-1][j]&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;j가 마지막수라면 : dp[i][j] += dp[i-1][j-1]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;else: dp[i][j] += max(dp[i-1][j-1]. dp[i-1][j])&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;마지막에 최댓값만 구해주면 된다&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])):&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 9465 스티커</title><link>https://log.j2234.cc/posts/2022-tistory/036-%EB%B0%B1%EC%A4%80-9465-%EC%8A%A4%ED%8B%B0%EC%BB%A4/</link><pubDate>Fri, 25 Mar 2022 14:22:24 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/036-%EB%B0%B1%EC%A4%80-9465-%EC%8A%A4%ED%8B%B0%EC%BB%A4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/9465" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/9465&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9465번: 스티커첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의www.acmicpc.net&lt;/p&gt;
&lt;p&gt;이번엔 세로로 dp를 돌려봤다.&lt;/p&gt;
&lt;p&gt;dp[0][i]=i번째의 위에 있는 스티커를 뗄 때의 최댓값&lt;/p&gt;
&lt;p&gt;dp[0][i]=i번째의 아래 있는 스티커를 뗄 때의 최댓값&lt;/p&gt;
&lt;p&gt;여기서 dp[0][i]를 뗄러면 dp[1][i-1]의 스티커를 뗐거나, dp[?][j-1]을 아예안 똈거나 둘 중하나이다.&lt;/p&gt;
&lt;p&gt;그럼 dp[?][i-2]의 최댓값과, dp[1][i-1]을 비교하여 이중 최댓값에 스티커의 값을 더해주면 된다.&lt;/p&gt;</description></item><item><title>백준 1309 동물원</title><link>https://log.j2234.cc/posts/2022-tistory/035-%EB%B0%B1%EC%A4%80-1309-%EB%8F%99%EB%AC%BC%EC%9B%90/</link><pubDate>Thu, 24 Mar 2022 16:36:55 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/035-%EB%B0%B1%EC%A4%80-1309-%EB%8F%99%EB%AC%BC%EC%9B%90/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1309" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1309&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1309번: 동물원첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;역시 식만 잘 잡으면 됨&lt;/p&gt;
&lt;p&gt;칸이 2개 있으므로, 총 3가지 경우가 있음&lt;/p&gt;
&lt;p&gt;안넣는경우, 왼쪽, 오른쪽&lt;/p&gt;
&lt;p&gt;이를 dp[?][0],dp[?][0],dp[?][0] 로 정의함&lt;/p&gt;
&lt;p&gt;맨 첫줄은 다 한가지 경우만 있으므로 1임&lt;/p&gt;
&lt;p&gt;여서생각을 해보면&lt;/p&gt;
&lt;p&gt;맨 마지막줄에 아무것도 안넣을려면, 그 전에 어케됬든 상관 x&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dp[i][0]=sum(dp[i-1])&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;왼쪽에 넣을려면, 그 전줄에 안넣거나 오른쪽에 넣어야됨&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dp[i][0]=dp[i-1][0]+dp[i-1][2]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;오른쪽에 넣을러면, 안넣거나 왼쪽&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dp[i][0]=dp[i-1][0]+dp[i-1][1]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;메손실을 방지하기위해 더할때마다 %9901을 하고,&lt;/p&gt;
&lt;p&gt;dp[i]를 모두 더해주면 됨&lt;/p&gt;
&lt;p&gt;여기서 dp[i][1]과 dp[i][2]는 모두 같으므로&lt;/p&gt;</description></item><item><title>백준 15998 1,2,3 더하기 3</title><link>https://log.j2234.cc/posts/2022-tistory/034-%EB%B0%B1%EC%A4%80-15998-123-%EB%8D%94%ED%95%98%EA%B8%B0-3/</link><pubDate>Thu, 24 Mar 2022 14:36:43 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/034-%EB%B0%B1%EC%A4%80-15998-123-%EB%8D%94%ED%95%98%EA%B8%B0-3/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/15988" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/15988&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;15988번: 1, 2, 3 더하기 3각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;이전의 1,2,3더하기와 완전히 같은 문제다.&lt;/p&gt;
&lt;p&gt;다른점이 있다면 dp의 길이가 1000001이라는 건데,&lt;/p&gt;
&lt;p&gt;짜피 계산은 컴퓨터가하니 알 바 아니고&lt;/p&gt;
&lt;p&gt;dp를 구할때마다 %m (문제조건)&lt;/p&gt;
&lt;p&gt;만 해주면 쉽게 풀린다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000000009&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000001&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#dp[i]=i자리 수를 1,2,3의 합으로 나타내는 방법dp[1]=1dp[2]=2dp[3]=4for i in range(4,len(dp)):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;mfor&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 1149 RGB거리</title><link>https://log.j2234.cc/posts/2022-tistory/033-%EB%B0%B1%EC%A4%80-1149-rgb%EA%B1%B0%EB%A6%AC/</link><pubDate>Thu, 24 Mar 2022 14:19:07 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/033-%EB%B0%B1%EC%A4%80-1149-rgb%EA%B1%B0%EB%A6%AC/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1149" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1149&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1149번: RGB거리첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나www.acmicpc.net&lt;/p&gt;
&lt;p&gt;dp 문제는 일단 식만 세우면 해결되는듯하다. 식세우기가어렵지만..&lt;/p&gt;
&lt;p&gt;먼져 cost로 각 집을 칠하는 값을 구해놓는다.&lt;/p&gt;
&lt;p&gt;그후 dp를 돌릴 배열을 선언한다.&lt;/p&gt;
&lt;p&gt;dp[1]은 아무 제약이 없으므로, cost[1]과 같다.&lt;/p&gt;
&lt;p&gt;dp[i][j]는 i번째의 집을 j색(0,1,2)으로 칠할 때의 최소비용을 뜻한다.&lt;/p&gt;
&lt;p&gt;우리는 두 집을 같은 색으로 칠할 수 없으므로,&lt;/p&gt;</description></item><item><title>백준 2225 합분해</title><link>https://log.j2234.cc/posts/2022-tistory/032-%EB%B0%B1%EC%A4%80-2225-%ED%95%A9%EB%B6%84%ED%95%B4/</link><pubDate>Thu, 24 Mar 2022 11:50:47 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/032-%EB%B0%B1%EC%A4%80-2225-%ED%95%A9%EB%B6%84%ED%95%B4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2225" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2225&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2225번: 합분해첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;살짝 꼬아서 낸 dp문제 원리는 오르막수와 같음&lt;/p&gt;
&lt;p&gt;dp[i][j]는 i개의 정수를 더해서 j가 되는 경우의 수로 정의한다.&lt;/p&gt;
&lt;p&gt;먼져, 직관적으로 0은 제외히고&lt;/p&gt;
&lt;p&gt;모든 dp[1][j]와 dp[i][0]는 모두 1이라는걸 알 수 있다. (한가지경우박에 없음)&lt;/p&gt;
&lt;p&gt;3,5를 예로 들면,&lt;/p&gt;
&lt;p&gt;dp[3][5]는 3개를 더해서 5가 되는 경우의 수이다.&lt;/p&gt;
&lt;p&gt;이는 dp[2][0] (마지막에 5를 더하는 경우)&lt;/p&gt;
&lt;p&gt;dp[2][1](마지막에 5-1을 더하는 경우)&lt;/p&gt;
&lt;p&gt;dp[2][2](마지막에 5-2를 더하는 경우)&lt;/p&gt;
&lt;p&gt;dp[2][3](마지막에 5-3을더하는 경우)&lt;/p&gt;
&lt;p&gt;dp[2][4])마지막에 5-4를 더하는 경우)&lt;/p&gt;</description></item><item><title>백준 11057 오르막 수</title><link>https://log.j2234.cc/posts/2022-tistory/031-%EB%B0%B1%EC%A4%80-11057-%EC%98%A4%EB%A5%B4%EB%A7%89-%EC%88%98/</link><pubDate>Thu, 24 Mar 2022 10:25:51 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/031-%EB%B0%B1%EC%A4%80-11057-%EC%98%A4%EB%A5%B4%EB%A7%89-%EC%88%98/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11057" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11057&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11057번: 오르막 수오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수www.acmicpc.net&lt;/p&gt;
&lt;p&gt;10884 쉬운 계단수에서 한단계 진화한 문제다.&lt;/p&gt;
&lt;p&gt;2차원 배열을 생성하여 풀었다.&lt;/p&gt;
&lt;p&gt;dp[i][j]는 길이가 i인 끝자리가 j로 끝나는 오르막 수의 개수를 의미한다.&lt;/p&gt;
&lt;p&gt;첫번째는 0이니깐 비워놓고,&lt;/p&gt;
&lt;p&gt;모든 한자리수는 오르막수이기 때문에 dp[1][0~9] 는 모두 1이다.&lt;/p&gt;
&lt;p&gt;2자리수부터가 문제인데,&lt;/p&gt;
&lt;p&gt;dp[2][0]은 00 하나밖에 존재할 수 없다.&lt;/p&gt;</description></item><item><title>백준 1699 제곱수의 합</title><link>https://log.j2234.cc/posts/2022-tistory/030-%EB%B0%B1%EC%A4%80-1699-%EC%A0%9C%EA%B3%B1%EC%88%98%EC%9D%98-%ED%95%A9/</link><pubDate>Tue, 22 Mar 2022 21:40:30 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/030-%EB%B0%B1%EC%A4%80-1699-%EC%A0%9C%EA%B3%B1%EC%88%98%EC%9D%98-%ED%95%A9/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1699" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1699&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1699번: 제곱수의 합어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다www.acmicpc.net&lt;/p&gt;
&lt;p&gt;의외로 정말 어려웠던 문제였다.&lt;/p&gt;
&lt;p&gt;푼 방법&lt;/p&gt;
&lt;p&gt;먼저, n까지의 제곱수를 구현해 놓는다.&lt;/p&gt;
&lt;p&gt;그다음 n까지의 리스트를 선언한다.&lt;/p&gt;
&lt;p&gt;반복문을 통해 리스트를 돌면서,&lt;/p&gt;
&lt;p&gt;만일 i가 제곱수이면, 값에 1을 넣는다.&lt;/p&gt;
&lt;p&gt;만일 i가 제곱수가 아니면, i보다 작은 모든 제곱수에 대하여&lt;/p&gt;
&lt;p&gt;(i-제곱수) + 1 을 구하고, ## 제곱수j에서 i를 만드는 최솟값 + 제곱수는 항상 1&lt;/p&gt;</description></item><item><title>백준 1912 연속합</title><link>https://log.j2234.cc/posts/2022-tistory/029-%EB%B0%B1%EC%A4%80-1912-%EC%97%B0%EC%86%8D%ED%95%A9/</link><pubDate>Tue, 22 Mar 2022 16:48:38 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/029-%EB%B0%B1%EC%A4%80-1912-%EC%97%B0%EC%86%8D%ED%95%A9/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1912" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1912&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1912번: 연속합첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;그냥 평범한 dp&lt;/p&gt;
&lt;p&gt;n[i]는 n[i]를 끝값으로 하는 가장 큰 수&lt;/p&gt;
&lt;p&gt;%%점화식%%&lt;/p&gt;
&lt;p&gt;n[i]={&lt;/p&gt;
&lt;p&gt;n[i-1]&amp;lt;=0 -&amp;gt; n[i]&lt;/p&gt;
&lt;p&gt;n[i-1]&amp;gt;0 -&amp;gt; n[i]+n[i-1]&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;만약 그전수가 0보다 작다면, 더해봤자 손해이므로 그냥 n[i]반환&lt;/p&gt;
&lt;p&gt;0보다 크다면, 그전에수에n[i]를 더한값 반환&lt;/p&gt;
&lt;p&gt;배열을 1개만 써도 상관없음&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;num_list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;max_list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;num_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;last_cnt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;max_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;#이전의 숫자 if last_cnt&amp;lt;=0:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;max_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;num_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;max_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;num_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;last_cnt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_list&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;골드찍었다!&lt;/p&gt;</description></item><item><title>백준 14002 가장 긴 증가하는 부분 수열 4</title><link>https://log.j2234.cc/posts/2022-tistory/028-%EB%B0%B1%EC%A4%80-14002-%EA%B0%80%EC%9E%A5-%EA%B8%B4-%EC%A6%9D%EA%B0%80%ED%95%98%EB%8A%94-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4-4/</link><pubDate>Tue, 22 Mar 2022 12:35:43 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/028-%EB%B0%B1%EC%A4%80-14002-%EA%B0%80%EC%9E%A5-%EA%B8%B4-%EC%A6%9D%EA%B0%80%ED%95%98%EB%8A%94-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4-4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/14002" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/14002&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14002번: 가장 긴 증가하는 부분 수열 4수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이www.acmicpc.net&lt;/p&gt;
&lt;p&gt;바로 전에 풀었던 가장 긴 증가하는 부분 수열처럼, 길이는 걍 DP돌려서 풀면 된다.&lt;/p&gt;
&lt;p&gt;근데 어떻게 수열을 하나씩 출력할까?&lt;/p&gt;
&lt;p&gt;나는 b를 각각 입력값에 대해[0,1]로 만들었다.&lt;/p&gt;</description></item><item><title>백준 11053 가장 긴 증가하는 부분 수열</title><link>https://log.j2234.cc/posts/2022-tistory/027-%EB%B0%B1%EC%A4%80-11053-%EA%B0%80%EC%9E%A5-%EA%B8%B4-%EC%A6%9D%EA%B0%80%ED%95%98%EB%8A%94-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4/</link><pubDate>Mon, 21 Mar 2022 19:50:51 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/027-%EB%B0%B1%EC%A4%80-11053-%EA%B0%80%EC%9E%A5-%EA%B8%B4-%EC%A6%9D%EA%B0%80%ED%95%98%EB%8A%94-%EB%B6%80%EB%B6%84-%EC%88%98%EC%97%B4/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11053" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11053&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11053번: 가장 긴 증가하는 부분 수열수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이www.acmicpc.net&lt;/p&gt;
&lt;p&gt;%%풀이%%&lt;/p&gt;
&lt;p&gt;a는 입력받은 값을 저장하는 배열,&lt;/p&gt;
&lt;p&gt;b는&lt;/p&gt;
&lt;p&gt;a[i]&lt;/p&gt;
&lt;p&gt;n[i]를 구하려면 n[0]부터 n[i-1] 중 n[i]보다 작은 수 중의 최댓값+=1이다.&lt;/p&gt;
&lt;p&gt;즉, n[i]의 왼쪽에있는 수를 비교하여 n[i]보다 작은 수를 찾고,&lt;/p&gt;</description></item><item><title>백준 2193 이친수</title><link>https://log.j2234.cc/posts/2022-tistory/026-%EB%B0%B1%EC%A4%80-2193-%EC%9D%B4%EC%B9%9C%EC%88%98/</link><pubDate>Sun, 20 Mar 2022 22:01:30 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/026-%EB%B0%B1%EC%A4%80-2193-%EC%9D%B4%EC%B9%9C%EC%88%98/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/2193" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/2193&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2193번: 이친수0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않www.acmicpc.net&lt;/p&gt;
&lt;p&gt;dp문제를 풀다보면 해결방안이 보인다.&lt;/p&gt;
&lt;p&gt;이친수는 2가지 경우가 있다. 0로끝나는경우, 1으로끝나는 경우&lt;/p&gt;
&lt;p&gt;0으로 끝나는 경우에는, 뒤에 0이오던 1이오던 상관없다&lt;/p&gt;
&lt;p&gt;1로 끝나는 경우에는, 뒤에 0만 와야한다.&lt;/p&gt;
&lt;p&gt;이를 식으로 표현하면&lt;/p&gt;
&lt;p&gt;(배열은 각각 2개의원소를 가지고 있는 2차원 배열)&lt;/p&gt;
&lt;p&gt;l[i][0]=i번쩨 자릿수가 0으로끝나는경우&lt;/p&gt;
&lt;p&gt;l[i][1]=i번째 자릿수가 1로 끝나는 경우&lt;/p&gt;</description></item><item><title>백준 15990 1,2,3 더하기5</title><link>https://log.j2234.cc/posts/2022-tistory/025-%EB%B0%B1%EC%A4%80-15990-123-%EB%8D%94%ED%95%98%EA%B8%B05/</link><pubDate>Sun, 20 Mar 2022 20:49:03 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/025-%EB%B0%B1%EC%A4%80-15990-123-%EB%8D%94%ED%95%98%EA%B8%B05/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/15990" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/15990&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;15990번: 1, 2, 3 더하기 5각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음에 보자마자 너무 막막했다.&lt;/p&gt;
&lt;p&gt;살짝 힌트를 얻어서 풀었다.&lt;/p&gt;
&lt;p&gt;이전 dp문제와는 달리, 배열을 [0,0,0,0]이 들어있는 2차원 배열로 만든다&lt;/p&gt;
&lt;p&gt;[[0,0,0,0],[0,0,0,0]&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;.]&lt;/p&gt;
&lt;p&gt;여기서 l[i][0]은 i를 만드는 경우의 수(정답),&lt;/p&gt;
&lt;p&gt;l[i][1] 마지막이 1일때 i를 만드는 경우의수&lt;/p&gt;
&lt;p&gt;l[i][2]마지막이 2일때 i를 만드는 경우의수&lt;/p&gt;
&lt;p&gt;l[i][3]마지막이 3일때 i를 만드는 경우의수&lt;/p&gt;
&lt;p&gt;를 뜻한다.&lt;/p&gt;
&lt;p&gt;만일 l[i][1]을 구하고 싶다면, 마지막에 1을 더해야 하므로 l[i-1]에서 1을 더해야 한다.&lt;/p&gt;</description></item><item><title>백준 16194 카드 구매하기 2</title><link>https://log.j2234.cc/posts/2022-tistory/024-%EB%B0%B1%EC%A4%80-16194-%EC%B9%B4%EB%93%9C-%EA%B5%AC%EB%A7%A4%ED%95%98%EA%B8%B0-2/</link><pubDate>Sun, 20 Mar 2022 19:06:24 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/024-%EB%B0%B1%EC%A4%80-16194-%EC%B9%B4%EB%93%9C-%EA%B5%AC%EB%A7%A4%ED%95%98%EA%B8%B0-2/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;카드 구매하기 정확히 반대로하면됨&lt;/p&gt;</description></item><item><title>백준 11052 카드 구매하기</title><link>https://log.j2234.cc/posts/2022-tistory/023-%EB%B0%B1%EC%A4%80-11052-%EC%B9%B4%EB%93%9C-%EA%B5%AC%EB%A7%A4%ED%95%98%EA%B8%B0/</link><pubDate>Sat, 19 Mar 2022 16:15:12 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/023-%EB%B0%B1%EC%A4%80-11052-%EC%B9%B4%EB%93%9C-%EA%B5%AC%EB%A7%A4%ED%95%98%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11052" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11052&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11052번: 카드 구매하기첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)www.acmicpc.net&lt;/p&gt;
&lt;p&gt;1.0번째 인덱스를 제외하고 n+1길이의 배열에 각각 p[i]값을 입력한다&lt;/p&gt;
&lt;p&gt;l[4]를 예로 들자면&lt;/p&gt;
&lt;p&gt;l[4] 현재 p[4]이므로&lt;/p&gt;
&lt;p&gt;현재의 l[4]와 (l[3]+l[1]), (l[2]+l[2]), (l[1]+l[3]) 중의 최댓값이 l[4]가 된다.&lt;/p&gt;
&lt;p&gt;이를 점화식으로 쓰면&lt;/p&gt;
&lt;p&gt;l[i]=max( l[i],(l[i-1]+l[i]),(l[i-2]+l[2]),&amp;hellip;..(l[i-n]+l[0]) ) 이다.&lt;/p&gt;
&lt;p&gt;조금더 생각해보면&lt;/p&gt;
&lt;p&gt;l[i-n]+l[n]은 l[n]+l[i]와 같은 결과를 가지므로&lt;/p&gt;
&lt;p&gt;l//2+1 까지만 비교해줘도 답을 알수 있다.&lt;/p&gt;</description></item><item><title>백준 9095 1,2,3더하기</title><link>https://log.j2234.cc/posts/2022-tistory/022-%EB%B0%B1%EC%A4%80-9095-123%EB%8D%94%ED%95%98%EA%B8%B0/</link><pubDate>Sat, 19 Mar 2022 14:56:19 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/022-%EB%B0%B1%EC%A4%80-9095-123%EB%8D%94%ED%95%98%EA%B8%B0/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/9095" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/9095&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9095번: 1, 2, 3 더하기각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;일단 규칙을찾는다&lt;/p&gt;
&lt;p&gt;(n)=n을 만드는 경우의 수&lt;/p&gt;
&lt;p&gt;(1)= (1)&lt;/p&gt;
&lt;p&gt;(2)=2 (1+1,2)&lt;/p&gt;
&lt;p&gt;(3)=4 (1+1+1,1+2,2+1,3)&lt;/p&gt;
&lt;p&gt;(4)=7 (1+1+1+1,1+1+2,1+2+1,2+2+1,2+2,1+3,3+1)&lt;/p&gt;
&lt;p&gt;n이 4일때&lt;/p&gt;
&lt;p&gt;n(1)에서 3을만들어야되므로 n(3), 4가지&lt;/p&gt;
&lt;p&gt;n(2)에서 2를만들어야되므로 n(2) 2가지&lt;/p&gt;
&lt;p&gt;n(3)에서 1을만들어야되므로 n(1)1가지&lt;/p&gt;
&lt;p&gt;경우의수가 있다.&lt;/p&gt;
&lt;p&gt;그러므로, n[i]=n[i-1]+n[i-2]+n[i-3] n[1]=1, n[2]=2, n[3]=3&lt;/p&gt;
&lt;p&gt;의 점화식이 생긴다.&lt;/p&gt;
&lt;p&gt;이를 배열에 넣고 dp돌리면 된다.&lt;/p&gt;</description></item><item><title>백준 11727 2xn타일링 2</title><link>https://log.j2234.cc/posts/2022-tistory/021-%EB%B0%B1%EC%A4%80-11727-2xn%ED%83%80%EC%9D%BC%EB%A7%81-2/</link><pubDate>Sat, 19 Mar 2022 14:19:39 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/021-%EB%B0%B1%EC%A4%80-11727-2xn%ED%83%80%EC%9D%BC%EB%A7%81-2/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11727" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11727&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11727번: 2×n 타일링 22×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;2xn 타일링 1과 비슷한 문제이다.&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="240"
 height="320"
 src="https://log.j2234.cc/posts/2022-tistory/021-%EB%B0%B1%EC%A4%80-11727-2xn%ED%83%80%EC%9D%BC%EB%A7%81-2/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/021-%EB%B0%B1%EC%A4%80-11727-2xn%ED%83%80%EC%9D%BC%EB%A7%81-2/img/image-01.webp 800w, https://log.j2234.cc/posts/2022-tistory/021-%EB%B0%B1%EC%A4%80-11727-2xn%ED%83%80%EC%9D%BC%EB%A7%81-2/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/021-%EB%B0%B1%EC%A4%80-11727-2xn%ED%83%80%EC%9D%BC%EB%A7%81-2/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;n[i]=n[i-2]*2+n[i-1]이라는 점화식을 세울 수 있다.&lt;/p&gt;
&lt;p&gt;왜?&lt;/p&gt;
&lt;p&gt;i번째를 채우기 위해서는&lt;/p&gt;
&lt;p&gt;i-1번째의 경우에서 2*1 타일 1개를 채우는 방법과,&lt;/p&gt;
&lt;p&gt;i-2번째의 경우에서 1&lt;em&gt;2 2개로채우는 방법, 2&lt;/em&gt;2 1개로 채우는 2가지 방법이 있기 때문이다.&lt;/p&gt;
&lt;p&gt;i-1번째의 경우는 그대로, i-2경우에는 각각 2개의 경우이므로 *2를 해주면 된다.&lt;/p&gt;</description></item><item><title>백준 11726 2xn 타일링</title><link>https://log.j2234.cc/posts/2022-tistory/020-%EB%B0%B1%EC%A4%80-11726-2xn-%ED%83%80%EC%9D%BC%EB%A7%81/</link><pubDate>Fri, 18 Mar 2022 23:24:45 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/020-%EB%B0%B1%EC%A4%80-11726-2xn-%ED%83%80%EC%9D%BC%EB%A7%81/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/11726" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/11726&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11726번: 2×n 타일링2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;원리만 알면 구현하기 매우 쉽다.&lt;/p&gt;
&lt;p&gt;맨 처음 손으로 써보았다.&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="240"
 height="320"
 src="https://log.j2234.cc/posts/2022-tistory/020-%EB%B0%B1%EC%A4%80-11726-2xn-%ED%83%80%EC%9D%BC%EB%A7%81/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/020-%EB%B0%B1%EC%A4%80-11726-2xn-%ED%83%80%EC%9D%BC%EB%A7%81/img/image-01.webp 800w, https://log.j2234.cc/posts/2022-tistory/020-%EB%B0%B1%EC%A4%80-11726-2xn-%ED%83%80%EC%9D%BC%EB%A7%81/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/020-%EB%B0%B1%EC%A4%80-11726-2xn-%ED%83%80%EC%9D%BC%EB%A7%81/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;간단하게 n[i]=n[i-1]+n[i-2] 의 점화식 즉 피보나치 수열이 나온다.&lt;/p&gt;
&lt;p&gt;중요한건 왜 그런가이다&lt;/p&gt;
&lt;p&gt;!!!!!!!!!!!!!&lt;/p&gt;
&lt;p&gt;n[4]를 예로 들겠다.&lt;/p&gt;
&lt;p&gt;n[4]를 만드는 방법은&lt;/p&gt;
&lt;p&gt;n[3]의 모든 경우의 수에서 2*1블럭 1개를 가장 오른쪽에 채우는 방법과,&lt;/p&gt;</description></item><item><title>백준 10884 쉬운 계단수</title><link>https://log.j2234.cc/posts/2022-tistory/019-%EB%B0%B1%EC%A4%80-10884-%EC%89%AC%EC%9A%B4-%EA%B3%84%EB%8B%A8%EC%88%98/</link><pubDate>Fri, 18 Mar 2022 22:41:38 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/019-%EB%B0%B1%EC%A4%80-10884-%EC%89%AC%EC%9A%B4-%EA%B3%84%EB%8B%A8%EC%88%98/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;1000000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/10844" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/10844&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10844번: 쉬운 계단 수첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;하나씩 손으로&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="320"
 height="240"
 src="https://log.j2234.cc/posts/2022-tistory/019-%EB%B0%B1%EC%A4%80-10884-%EC%89%AC%EC%9A%B4-%EA%B3%84%EB%8B%A8%EC%88%98/img/image-01.webp"
 srcset="https://log.j2234.cc/posts/2022-tistory/019-%EB%B0%B1%EC%A4%80-10884-%EC%89%AC%EC%9A%B4-%EA%B3%84%EB%8B%A8%EC%88%98/img/image-01.webp 800w, https://log.j2234.cc/posts/2022-tistory/019-%EB%B0%B1%EC%A4%80-10884-%EC%89%AC%EC%9A%B4-%EA%B3%84%EB%8B%A8%EC%88%98/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/2022-tistory/019-%EB%B0%B1%EC%A4%80-10884-%EC%89%AC%EC%9A%B4-%EA%B3%84%EB%8B%A8%EC%88%98/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;p&gt;써보다보면 규칙이 보인다.&lt;/p&gt;
&lt;p&gt;arr[i][j]는 [i]자리의 끝이[j]인 계단수의 개수이다.&lt;/p&gt;
&lt;p&gt;처음엔 0을 제외한 모든수가 계단수이므로&lt;/p&gt;
&lt;p&gt;[0.1.1.1.1.1.1.1.1.1]이다.&lt;/p&gt;
&lt;p&gt;두번째에는[1,1,2,2,2,2,2,2,1]이다.&lt;/p&gt;
&lt;p&gt;이를 반복하면&lt;/p&gt;
&lt;p&gt;arr[i][j]=arr[i-1][j-1] + arr[i-1][j+1]이라는 식을 찾을 수 있다.&lt;/p&gt;
&lt;p&gt;파이썬에서 indexerror방지를 위해서 j가 0 또는 9일때만 예외를 설정하여&lt;/p&gt;
&lt;p&gt;0일때는 그 전의 1의값만, 9일때는 그 전의 8의값만 더해주면&lt;/p&gt;</description></item><item><title>백 준 1764 듣보잡</title><link>https://log.j2234.cc/posts/2022-tistory/018-%EB%B0%B1-%EC%A4%80-1764-%EB%93%A3%EB%B3%B4%EC%9E%A1/</link><pubDate>Thu, 17 Mar 2022 12:07:43 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/018-%EB%B0%B1-%EC%A4%80-1764-%EB%93%A3%EB%B3%B4%EC%9E%A1/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1764" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1764&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1764번: 듣보잡첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;그냥 리스트에서 하나씩 비교하면 시간때문에 못 풀고,&lt;/p&gt;
&lt;p&gt;dict으로 검색하거나&lt;/p&gt;
&lt;p&gt;set로 바꿔 공집합을 이용하면된다&lt;/p&gt;
&lt;p&gt;풀이1 (dict)&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;ds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ds&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;awn&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;awn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;풀이2(set)&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sysinput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlinen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;awn&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;awn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 17087 숨바꼭질6</title><link>https://log.j2234.cc/posts/2022-tistory/017-%EB%B0%B1%EC%A4%80-17087-%EC%88%A8%EB%B0%94%EA%BC%AD%EC%A7%886/</link><pubDate>Mon, 14 Mar 2022 19:29:54 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/017-%EB%B0%B1%EC%A4%80-17087-%EC%88%A8%EB%B0%94%EA%BC%AD%EC%A7%886/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/17087" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/17087&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;17087번: 숨바꼭질 6수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, &amp;hellip;, AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이www.acmicpc.net&lt;/p&gt;
&lt;p&gt;gcd함수 선언&lt;/p&gt;
&lt;p&gt;동생위치를 동생위치-형위치의 절댓값으로 바꾼다&lt;/p&gt;
&lt;p&gt;동생위치를 2개씩 계속 gcd를 돌린다&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;gcd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;gcd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;gcd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 1463 1로 만들기</title><link>https://log.j2234.cc/posts/2022-tistory/016-%EB%B0%B1%EC%A4%80-1463-1%EB%A1%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0/</link><pubDate>Mon, 14 Mar 2022 16:43:58 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/016-%EB%B0%B1%EC%A4%80-1463-1%EB%A1%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1463" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1463&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1463번: 1로 만들기첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;처음 구현해본 dp라 처음에는 헤멨는데&lt;/p&gt;
&lt;p&gt;원리만 알고 나니깐 너무 간단하다.&lt;/p&gt;
&lt;p&gt;상향식 접근?&lt;/p&gt;
&lt;p&gt;처음부터 1씩 더해가며 각각의 값을 업데이트하면 된다.&lt;/p&gt;
&lt;p&gt;사실 2,3을 업데이트할 필요도 없음&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;cnt_list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;##첫번째는 안쓸거니깐 x+1개의 리스트 만들기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cnt_list&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt; &lt;span class="c1"&gt;###0,1,2,3을 제외하고 dp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cnt_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;#1을 빼서 바로 전 수로 만드는 경우 if i%3==0: &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cnt_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;## 3으로 나누었을때의 경우의 수는, 이를 3으로 나눴을때의 경우의 수 +1 if i%2==0:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cnt_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;##위와 동 ##최솟값만 남기고&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cnt_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="c1"&gt;#최솟값 업데이트print(cnt_list[x])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>9613. GCD 합</title><link>https://log.j2234.cc/posts/2022-tistory/015-9613.-gcd-%ED%95%A9/</link><pubDate>Sun, 13 Mar 2022 20:04:59 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/015-9613.-gcd-%ED%95%A9/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/9613" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/9613&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9613번: GCD 합첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 &amp;lt; n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진www.acmicpc.net&lt;/p&gt;
&lt;p&gt;진짜 쉬운 문제인데 각 줄의 첫번째가 n이라는걸 간과해서 시간을 오래 잡아먹었다.&lt;/p&gt;
&lt;p&gt;배열에 2가지를 넣는 경우의 수를 구하고, 이의 최소공배수를 각각 구한다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;combinationsdef&lt;/span&gt; &lt;span class="n"&gt;gcd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;combinations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="n"&gt;gcd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 6588 골드바흐의 추측</title><link>https://log.j2234.cc/posts/2022-tistory/014-%EB%B0%B1%EC%A4%80-6588-%EA%B3%A8%EB%93%9C%EB%B0%94%ED%9D%90%EC%9D%98-%EC%B6%94%EC%B8%A1/</link><pubDate>Sat, 12 Mar 2022 21:39:39 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/014-%EB%B0%B1%EC%A4%80-6588-%EA%B3%A8%EB%93%9C%EB%B0%94%ED%9D%90%EC%9D%98-%EC%B6%94%EC%B8%A1/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/6588" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/6588&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6588번: 골드바흐의 추측각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰www.acmicpc.net&lt;/p&gt;
&lt;p&gt;간단한문제&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;소수를 구한다(체로구현)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;n을 1과 n-1부터 시작해서, 각각1 씩 올려가며확인&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;둘다소수이면 종료&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sosu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sosu&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sosu&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sosu&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sosu&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sosu&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;sosu&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt; = &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt; + &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;-=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 1918 후위 표기식</title><link>https://log.j2234.cc/posts/2022-tistory/013-%EB%B0%B1%EC%A4%80-1918-%ED%9B%84%EC%9C%84-%ED%91%9C%EA%B8%B0%EC%8B%9D/</link><pubDate>Sat, 12 Mar 2022 18:20:25 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/013-%EB%B0%B1%EC%A4%80-1918-%ED%9B%84%EC%9C%84-%ED%91%9C%EA%B8%B0%EC%8B%9D/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1918" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1918&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1918번: 후위 표기식첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의www.acmicpc.net&lt;/p&gt;
&lt;p&gt;진짜 ㅈ 같은 문제다.&lt;/p&gt;
&lt;p&gt;애초에 후위표기식 개념이 헷갈려서 한참 해멨다.&lt;/p&gt;
&lt;p&gt;%%주의%%&lt;/p&gt;
&lt;p&gt;만일 곱하기나 나누기면, stack의 출구가 곱하기나 나누기가 아닐때까지 pop해주고(answer에 추가)&lt;/p&gt;
&lt;p&gt;부호를 더해준다.&lt;/p&gt;
&lt;p&gt;여기서 한참해멧는데, 예제에는 이런식이 없어서 생각도 못했었다.&lt;/p&gt;
&lt;p&gt;!! 더하기나 빼기는 곱하기나 나누기를 모두 계산한 후에 계산하기 때문에, 스택에 남아있어야 한다.!!!&lt;/p&gt;</description></item><item><title>백준 1935 후위 표기식 2</title><link>https://log.j2234.cc/posts/2022-tistory/012-%EB%B0%B1%EC%A4%80-1935-%ED%9B%84%EC%9C%84-%ED%91%9C%EA%B8%B0%EC%8B%9D-2/</link><pubDate>Fri, 11 Mar 2022 21:03:15 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/012-%EB%B0%B1%EC%A4%80-1935-%ED%9B%84%EC%9C%84-%ED%91%9C%EA%B8%B0%EC%8B%9D-2/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1935" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1935&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1935번: 후위 표기식2첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이www.acmicpc.net&lt;/p&gt;
&lt;p&gt;진짜 후위표기식이 뭔지만 찾아보고 혼자 푼 문제라 쾌감이 째진다 ㅎㅎ&lt;/p&gt;
&lt;p&gt;단어열이 표현되는 abc_list를 통해 num_list에 접근해서 진짜 값을 알아내는 식으로 숫자를 넣었고,&lt;/p&gt;
&lt;p&gt;그다음부터는 그냥 연산자가 나올때까지 stack에 넣고&lt;/p&gt;
&lt;p&gt;연산자가 나올때마다 stack에서 2개를 pop해주고&lt;/p&gt;
&lt;p&gt;두번째를 a, 첫번째를 b로 정한뒤 연산을 수행하고&lt;/p&gt;
&lt;p&gt;결과를 다시 스택에 넣는다.&lt;/p&gt;</description></item><item><title>백준 17299 오등큰수 G3</title><link>https://log.j2234.cc/posts/2022-tistory/011-%EB%B0%B1%EC%A4%80-17299-%EC%98%A4%EB%93%B1%ED%81%B0%EC%88%98-g3/</link><pubDate>Fri, 11 Mar 2022 14:46:45 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/011-%EB%B0%B1%EC%A4%80-17299-%EC%98%A4%EB%93%B1%ED%81%B0%EC%88%98-g3/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/17299" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/17299&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;17298 오큰수와 매우 비슷한 문제다. 오큰수는 그냥 원소의크기만 비교했다면, 오등큰수는 Counter[원소] 의 크기를 비교하면 된다.&lt;/p&gt;
&lt;p&gt;첫풀이&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Countern&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="c1"&gt;#정답c=Counter(a) #카운터로 빈도수 세기s=list()for i in range(n):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]:&lt;/span&gt; &lt;span class="c1"&gt;##만약 스택의 마지막의 빈도수가 새로운 빈도수보다 적을때까지&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;#싹다처내고 b[r]=a[i] #정답인덱스에 오동큰수 업데이트 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;#원소값과 원소자릿값 묶어서 넣기 print(* b) #정답싹다꺼내기&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;좀더 깔끔하게 바꾼거&lt;/p&gt;
&lt;p&gt;굳이 원소가 들어가지않고, c[원소] 즉 빈도수가 들어있어도 상관없다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Countern&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="c1"&gt;#정답c=Counter(a) #카운터로 빈도수 세기s=list()for i in range(n):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="c1"&gt;#a[i]의 빈도수&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;##만약 스택의 마지막의 빈도수가 새로운 빈도수보다 적을때까지&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;#싹다처내고 b[r]=a[i] #정답인덱스에 오동큰수 업데이트 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;#원소의 빈도수와 원소자릿값 묶어서 넣기 print(* b) #정답싹다꺼내기&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 17298 오큰수</title><link>https://log.j2234.cc/posts/2022-tistory/010-%EB%B0%B1%EC%A4%80-17298-%EC%98%A4%ED%81%B0%EC%88%98/</link><pubDate>Fri, 11 Mar 2022 13:22:22 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/010-%EB%B0%B1%EC%A4%80-17298-%EC%98%A4%ED%81%B0%EC%88%98/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/17298" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/17298&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;17298번: 오큰수첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, &amp;hellip;, AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.www.acmicpc.net&lt;/p&gt;
&lt;p&gt;골드치고 쉽다고 생각했는데 역시나였다.&lt;/p&gt;
&lt;p&gt;처음에 값이 중복될수 있다는 생각을 못하고 삽질을 많이 했다.&lt;/p&gt;

&lt;h3 class="relative group"&gt;
 &lt;div id="" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;기본값 -1이 n개 들어있는 정답을 만들어 준다.&lt;/p&gt;
&lt;p&gt;stack에 처음숫자를 넣고 (스택에 추가할때 속도를 위해 원소값과 원소의 자릿값을 같이 묶어 넣는다)&lt;/p&gt;</description></item><item><title>백준 10799 쇠막대기</title><link>https://log.j2234.cc/posts/2022-tistory/009-%EB%B0%B1%EC%A4%80-10799-%EC%87%A0%EB%A7%89%EB%8C%80%EA%B8%B0/</link><pubDate>Thu, 10 Mar 2022 23:02:28 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/009-%EB%B0%B1%EC%A4%80-10799-%EC%87%A0%EB%A7%89%EB%8C%80%EA%B8%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/10799" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/10799&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10799번: 쇠막대기여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저www.acmicpc.net&lt;/p&gt;
&lt;p&gt;문제는 간단한데 문제가 뭔소린지 이해하기가 어려웠다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;(&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;(&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;(&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#레이저일경우&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;#레이저의시작을 제거하고&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#잘린막대기의 갯수를 더한다 else: #막대기일경우&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;#막대기의 끝을 더하고 stack.pop() #막대기를빼줌print(answer)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 17413. 단어뒤집기2</title><link>https://log.j2234.cc/posts/2022-tistory/008-%EB%B0%B1%EC%A4%80-17413.-%EB%8B%A8%EC%96%B4%EB%92%A4%EC%A7%91%EA%B8%B02/</link><pubDate>Thu, 10 Mar 2022 11:48:01 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/008-%EB%B0%B1%EC%A4%80-17413.-%EB%8B%A8%EC%96%B4%EB%92%A4%EC%A7%91%EA%B8%B02/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/17413" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/17413&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="c1"&gt;##정답모을거stack1=[] ## 그냥단어모을거stack2=[] ## 태그모을거for i in s:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;##태그가시작되면 while stack1: ##그전에 있던 단어를 거꾸로 정답에 입력&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="n"&gt;stack2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;##태그 입력&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;##태그가끝나면 stack2.append(i)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;stack2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;##태그를 하나씩 정답에 입력 answer.append(stack2.pop(0))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stack2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="c1"&gt;#초기화 elif stack2: #태그가진행중이면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stack2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#태그에 계속입력 elif i!=&amp;#39; &amp;#39;: #태그가 없고 단어가들어오면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stack1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#만일 단어의 끝이면 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;stack1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#단어를 거꾸로입력하고 answer.append(stack1.pop())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#공백하나추가while stack1: #남은단어있으면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;#거꾸로해서 추가print(&amp;#39;&amp;#39;.join(answer))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;생각해보니깐 꼭 리스트를 안말들어도&lt;/p&gt;
&lt;p&gt;단어더하기식으로해도됨!&lt;/p&gt;</description></item><item><title>백준 1158: 요세프스 문제</title><link>https://log.j2234.cc/posts/2022-tistory/007-%EB%B0%B1%EC%A4%80-1158-%EC%9A%94%EC%84%B8%ED%94%84%EC%8A%A4-%EB%AC%B8%EC%A0%9C/</link><pubDate>Tue, 08 Mar 2022 23:44:01 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/007-%EB%B0%B1%EC%A4%80-1158-%EC%9A%94%EC%84%B8%ED%94%84%EC%8A%A4-%EB%AC%B8%EC%A0%9C/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1158" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1158&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1158번: 요세푸스 문제첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)www.acmicpc.net&lt;/p&gt;
&lt;p&gt;진짜 쉬운 문제인데 그래도 집중안하면 답이 안나온다.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#처음에 리스트가 0부터 시작하니깐 빠지고, 그 다음부턴 리스트가 1개씩 없어지니깐 빠짐&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;파이썬의 deque를 이용한 방법&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dequen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#음수이므로 앞의값들을 잘라내고 뒤에 붙여넣는다. answer.append(l.popleft())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sep&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>백준 1406. 에디터</title><link>https://log.j2234.cc/posts/2022-tistory/006-%EB%B0%B1%EC%A4%80-1406.-%EC%97%90%EB%94%94%ED%84%B0/</link><pubDate>Mon, 07 Mar 2022 14:37:55 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/006-%EB%B0%B1%EC%A4%80-1406.-%EC%97%90%EB%94%94%ED%84%B0/</guid><description>&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/1406" target="_blank" rel="noreferrer"&gt;https://www.acmicpc.net/problem/1406&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;처음에는 하나하나 노가다로 풀었는데, 그러면 무조건 시간초과가 나오게 된다.&lt;/p&gt;
&lt;p&gt;해결방법은 스택이 2개있고 그 사이에 커서가 있다고 생각하는 것이다.&lt;/p&gt;
&lt;p&gt;만일 L이라면, 스택 1의 출력을 스택 2에 입력하면 된다 (스택 1이 비었으면 무시)&lt;/p&gt;
&lt;p&gt;만일 D라면, 스택 2의 출력을 스택 1에 입력하면 된다(스택2가 비었으면 무시)&lt;/p&gt;
&lt;p&gt;만일 B라면, 스택 1의 맨 위를 날리면 된다. (역시 비면 무시)&lt;/p&gt;
&lt;p&gt;만일 p라면, 스택 1에 새 문자를 추가하면 된다.&lt;/p&gt;
&lt;p&gt;풀이를 알고 나면 정말 간단한데 풀이가 떠올르지 않는다.&lt;/p&gt;</description></item><item><title>백준 1874. 스택 수열</title><link>https://log.j2234.cc/posts/2022-tistory/005-%EB%B0%B1%EC%A4%80-1874.-%EC%8A%A4%ED%83%9D-%EC%88%98%EC%97%B4/</link><pubDate>Mon, 07 Mar 2022 12:38:40 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/005-%EB%B0%B1%EC%A4%80-1874.-%EC%8A%A4%ED%83%9D-%EC%88%98%EC%97%B4/</guid><description>&lt;p&gt;스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.&lt;/p&gt;
&lt;p&gt;1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.&lt;/p&gt;</description></item><item><title>백준 9012 괄호</title><link>https://log.j2234.cc/posts/2022-tistory/004-%EB%B0%B1%EC%A4%80-9012-%EA%B4%84%ED%98%B8/</link><pubDate>Sun, 06 Mar 2022 22:12:24 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/004-%EB%B0%B1%EC%A4%80-9012-%EA%B4%84%ED%98%B8/</guid><description>&lt;p&gt;스택의 개념을 이용해서 &amp;lsquo;(&amp;lsquo;면 스택에 넣고 &amp;lsquo;)&amp;lsquo;면 스택에서 꺼내며, 꺼낼 &amp;lsquo;(&amp;lsquo;가 없거나 만일 끝났는데 &amp;lsquo;)가 있으면 vps가 아니다&lt;/p&gt;
&lt;p&gt;T=&lt;/p&gt;
&lt;p&gt;int&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;input&lt;/p&gt;
&lt;p&gt;())&lt;/p&gt;
&lt;p&gt;for&lt;/p&gt;
&lt;p&gt;_&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;range&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;T&lt;/p&gt;
&lt;p&gt;):&lt;/p&gt;
&lt;p&gt;l=&lt;/p&gt;
&lt;p&gt;[]&lt;/p&gt;
&lt;p&gt;a=&lt;/p&gt;
&lt;p&gt;input&lt;/p&gt;
&lt;p&gt;()&lt;/p&gt;
&lt;p&gt;answer=&lt;/p&gt;
&lt;p&gt;&amp;lsquo;YES&amp;rsquo;&lt;/p&gt;
&lt;p&gt;for&lt;/p&gt;
&lt;p&gt;i&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;a&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;if&lt;/p&gt;
&lt;p&gt;i==&lt;/p&gt;
&lt;p&gt;&amp;lsquo;(&amp;rsquo;&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;l.append&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;i&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;if&lt;/p&gt;
&lt;p&gt;i==&lt;/p&gt;
&lt;p&gt;&amp;lsquo;)&amp;rsquo;&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;try&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;l.pop&lt;/p&gt;
&lt;p&gt;()&lt;/p&gt;
&lt;p&gt;except&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;answer=&lt;/p&gt;
&lt;p&gt;&amp;lsquo;NO&amp;rsquo;&lt;/p&gt;
&lt;p&gt;break&lt;/p&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;answer&lt;/p&gt;
&lt;p&gt;if&lt;/p&gt;
&lt;p&gt;not&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;&amp;lsquo;NO&amp;rsquo;&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;</description></item><item><title>백준 10828: 스택</title><link>https://log.j2234.cc/posts/2022-tistory/003-%EB%B0%B1%EC%A4%80-10828-%EC%8A%A4%ED%83%9D/</link><pubDate>Sun, 06 Mar 2022 16:32:50 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/003-%EB%B0%B1%EC%A4%80-10828-%EC%8A%A4%ED%83%9D/</guid><description>&lt;p&gt;n=&lt;/p&gt;
&lt;p&gt;int&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;input&lt;/p&gt;
&lt;p&gt;())&lt;/p&gt;
&lt;p&gt;l=&lt;/p&gt;
&lt;p&gt;[]&lt;/p&gt;
&lt;p&gt;for&lt;/p&gt;
&lt;p&gt;_&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;range&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;n&lt;/p&gt;
&lt;p&gt;):&lt;/p&gt;
&lt;p&gt;order=&lt;/p&gt;
&lt;p&gt;input&lt;/p&gt;
&lt;p&gt;()&lt;/p&gt;
&lt;p&gt;if&lt;/p&gt;
&lt;p&gt;&amp;lsquo;push&amp;rsquo;&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;order&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;a&lt;/p&gt;
&lt;p&gt;,&lt;/p&gt;
&lt;p&gt;b=order.split&lt;/p&gt;
&lt;p&gt;()&lt;/p&gt;
&lt;p&gt;l.append&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;b&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;elif&lt;/p&gt;
&lt;p&gt;&amp;lsquo;pop&amp;rsquo;&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;order&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;if&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;p&gt;-1&lt;/p&gt;
&lt;p&gt;])&lt;/p&gt;
&lt;p&gt;del&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;p&gt;-1&lt;/p&gt;
&lt;p&gt;]&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;-1&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;elif&lt;/p&gt;
&lt;p&gt;&amp;lsquo;size&amp;rsquo;&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;order&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;len&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;))&lt;/p&gt;
&lt;p&gt;elif&lt;/p&gt;
&lt;p&gt;&amp;rsquo;empty'&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;order&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;if&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;0&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;elif&lt;/p&gt;
&lt;p&gt;&amp;rsquo;top'&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;order&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;if&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;p&gt;-1&lt;/p&gt;
&lt;p&gt;])&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;:&lt;/p&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;-1&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;</description></item><item><title>백준 1018</title><link>https://log.j2234.cc/posts/2022-tistory/002-%EB%B0%B1%EC%A4%80-1018/</link><pubDate>Sat, 05 Mar 2022 21:59:05 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/002-%EB%B0%B1%EC%A4%80-1018/</guid><description>&lt;p&gt;풀이 1&lt;/p&gt;
&lt;p&gt;n&lt;/p&gt;
&lt;p&gt;,&lt;/p&gt;
&lt;p&gt;m=&lt;/p&gt;
&lt;p&gt;map&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;int&lt;/p&gt;
&lt;p&gt;,&lt;/p&gt;
&lt;p&gt;input&lt;/p&gt;
&lt;p&gt;()&lt;/p&gt;
&lt;p&gt;.split&lt;/p&gt;
&lt;p&gt;())&lt;/p&gt;
&lt;p&gt;board=&lt;/p&gt;
&lt;p&gt;list&lt;/p&gt;
&lt;p&gt;()&lt;/p&gt;
&lt;p&gt;for&lt;/p&gt;
&lt;p&gt;i&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;range&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;n&lt;/p&gt;
&lt;p&gt;):&lt;/p&gt;
&lt;p&gt;board.append&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;input&lt;/p&gt;
&lt;p&gt;())&lt;/p&gt;
&lt;p&gt;min_numbers=&lt;/p&gt;
&lt;p&gt;[]&lt;/p&gt;
&lt;p&gt;for&lt;/p&gt;
&lt;p&gt;i&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;range&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;n&lt;/p&gt;
&lt;p&gt;-7&lt;/p&gt;
&lt;p&gt;):&lt;/p&gt;
&lt;p&gt;for&lt;/p&gt;
&lt;p&gt;j&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;range&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;m&lt;/p&gt;
&lt;p&gt;-7&lt;/p&gt;
&lt;p&gt;):&lt;/p&gt;
&lt;p&gt;cnt1 =&lt;/p&gt;
&lt;p&gt;0&lt;/p&gt;
&lt;p&gt;cnt2 =&lt;/p&gt;
&lt;p&gt;0&lt;/p&gt;
&lt;p&gt;for&lt;/p&gt;
&lt;p&gt;k&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;range&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;i&lt;/p&gt;
&lt;p&gt;,&lt;/p&gt;
&lt;p&gt;i+&lt;/p&gt;
&lt;p&gt;8&lt;/p&gt;
&lt;p&gt;):&lt;/p&gt;
&lt;p&gt;for&lt;/p&gt;
&lt;p&gt;l&lt;/p&gt;
&lt;p&gt;in&lt;/p&gt;
&lt;p&gt;range&lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt;j&lt;/p&gt;
&lt;p&gt;,&lt;/p&gt;
&lt;p&gt;j +&lt;/p&gt;
&lt;p&gt;8&lt;/p&gt;
&lt;p&gt;):&lt;/p&gt;

&lt;h2 class="relative group"&gt;체스판 규칙에 따라서
 &lt;div id="체스판-규칙에-따라서" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%b2%b4%ec%8a%a4%ed%8c%90-%ea%b7%9c%ec%b9%99%ec%97%90-%eb%94%b0%eb%9d%bc%ec%84%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h2 class="relative group"&gt;(k+ㅣ)%2가 0인 board[k][j]는 모두 a색이어야 하고
 &lt;div id="kㅣ2가-0인-boardkj는-모두-a색이어야-하고" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#k%e3%85%a32%ea%b0%80-0%ec%9d%b8-boardkj%eb%8a%94-%eb%aa%a8%eb%91%90-a%ec%83%89%ec%9d%b4%ec%96%b4%ec%95%bc-%ed%95%98%ea%b3%a0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h2 class="relative group"&gt;(k+ㅣ)%2가 1인 board[k][j]는 모두 b색이어야 한다.
 &lt;div id="kㅣ2가-1인-boardkj는-모두-b색이어야-한다" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#k%e3%85%a32%ea%b0%80-1%ec%9d%b8-boardkj%eb%8a%94-%eb%aa%a8%eb%91%90-b%ec%83%89%ec%9d%b4%ec%96%b4%ec%95%bc-%ed%95%9c%eb%8b%a4" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;if&lt;/p&gt;</description></item><item><title>환영합니다!</title><link>https://log.j2234.cc/posts/2022-tistory/001-%ED%99%98%EC%98%81%ED%95%A9%EB%8B%88%EB%8B%A4/</link><pubDate>Sat, 05 Mar 2022 21:45:45 +0000</pubDate><guid>https://log.j2234.cc/posts/2022-tistory/001-%ED%99%98%EC%98%81%ED%95%A9%EB%8B%88%EB%8B%A4/</guid><description>&lt;h1 class="relative group"&gt;블로그 시작
 &lt;div id="블로그-시작" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%b8%94%eb%a1%9c%ea%b7%b8-%ec%8b%9c%ec%9e%91" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;</description></item></channel></rss>