<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>어읽로꾸거</title>
    <link>https://postbarca.tistory.com/</link>
    <description>자유를 좋아해</description>
    <language>ko</language>
    <pubDate>Sat, 11 Apr 2026 11:20:10 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>어읽로꾸거</managingEditor>
    <image>
      <title>어읽로꾸거</title>
      <url>https://tistory1.daumcdn.net/tistory/3072591/attach/07c7b044da974ba6982fd759712ee9be</url>
      <link>https://postbarca.tistory.com</link>
    </image>
    <item>
      <title>왜 한국 사람은 스몰 토크를 안하나?</title>
      <link>https://postbarca.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27152&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.hada.io/topic?id=27152&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1772630710204&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;누구와도 대화하는 법, 그리고 왜 그래야 하는가 | GeekNews&quot; data-og-description=&quot;공공장소에서 누구에게든 말을 거는 행위 자체가 점점 사라지고 있으며 이것이 개인과 사회 전체에 심각한 영향을 미치고 있음스마트폰, 재택근무, 터치스크린 주문 키오스크, 제3의 공간(third s&quot; data-og-host=&quot;news.hada.io&quot; data-og-source-url=&quot;https://news.hada.io/topic?id=27152&quot; data-og-url=&quot;https://news.hada.io/topic?id=27152&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c43irs/dJMb89ybhrW/cGmlVntZIJSYqj2kfaDVg0/img.png?width=1200&amp;amp;height=630&amp;amp;face=204_290_669_419,https://scrap.kakaocdn.net/dn/cTX9tl/dJMb86OZxmr/zbc1jepS6I4TMDUT7qFTkk/img.png?width=1200&amp;amp;height=630&amp;amp;face=204_290_669_419&quot;&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27152&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://news.hada.io/topic?id=27152&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c43irs/dJMb89ybhrW/cGmlVntZIJSYqj2kfaDVg0/img.png?width=1200&amp;amp;height=630&amp;amp;face=204_290_669_419,https://scrap.kakaocdn.net/dn/cTX9tl/dJMb86OZxmr/zbc1jepS6I4TMDUT7qFTkk/img.png?width=1200&amp;amp;height=630&amp;amp;face=204_290_669_419');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;누구와도 대화하는 법, 그리고 왜 그래야 하는가 | GeekNews&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;공공장소에서 누구에게든 말을 거는 행위 자체가 점점 사라지고 있으며 이것이 개인과 사회 전체에 심각한 영향을 미치고 있음스마트폰, 재택근무, 터치스크린 주문 키오스크, 제3의 공간(third s&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;news.hada.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 글을 읽고 궁금해짐&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. '우리'와 '남'의 엄격한 구분&lt;br /&gt;한국 문화의 핵심 키워드 중 하나는 **'우리(In-group)'**입니다.&lt;br /&gt;아는 사람: 일단 관계가 형성되면 누구보다 가깝고 친절하게 대합니다.모르는 사람: 관계가 없는 '남'에게 말을 거는 것은 자칫 **침범(Intrusion)**으로 여겨질 수 있습니다. 서구권에서는 스몰 토크가 '나는 당신을 해칠 의도가 없는 친절한 사람입니다'라는 신호라면, 한국에서는 '조용히 해주는 것'이 상대의 개인 영역을 존중하는 예의로 통용되기도 합니다.&lt;br /&gt;2. 고맥락(High-context) 문화의 특성&lt;br /&gt;인류학자 에드워드 홀의 분류에 따르면 한국은 대표적인 고맥락 문화입니다.&lt;br /&gt;말하지 않아도 아는 것: 구구절절 말로 표현하기보다 분위기나 눈치로 파악하는 것을 선호합니다.침묵의 미덕: 유교적 영향으로 인해 말을 많이 하는 것보다 신중하고 과묵한 것을 진중하다고 여기는 정서가 남아 있습니다. &quot;말이 많으면 실언도 많다&quot;는 인식이 스몰 토크를 '불필요한 에너지 소모'로 느끼게 할 수 있죠.&lt;br /&gt;3. 체면과 '실례'에 대한 민감도&lt;br /&gt;한국인은 상대방에게 **'실례가 되지 않을까?'**를 먼저 고민하는 경향이 강합니다.&lt;br /&gt;낯선 사람에게 날씨나 가벼운 농담을 던졌을 때, 상대가 당황하거나 대답을 강요받는 느낌을 줄까 봐 아예 시작을 안 하는 경우가 많습니다.즉, 불친절해서 안 하는 게 아니라 **'민폐를 끼치지 않으려는 조심성'**이 스몰 토크를 가로막는 장벽이 되곤 합니다.&lt;br /&gt;4. 높은 인구 밀도와 '도시적 무관심'&lt;br /&gt;특히 서울 같은 대도시에서는 너무 많은 사람과 부딪히며 살다 보니, 모든 사람과 소통하려 하면 뇌가 금방 지쳐버립니다. 이를 사회학에서는 **'도시적 무관심(Civil Inattention)'**이라고 하는데, 서로를 투명 인간 취급해 주는 것이 오히려 서로의 프라이버시를 지켜주는 도시인의 생존 전략이 된 셈입니다.&lt;br /&gt;&lt;br /&gt;- Gemini 사고 모드의 답변 &quot;한국 사람들이 스몰 토크를 안하는 이유?&quot;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;사실 이런 생각을 해본적 없는데, 예상치 못하게 누군가랑 이야기를 갑자기 하게 되고 내 이야기를 남에게 혹은 남의 이야기를 내가 들으면 괜찮지 않을까 하는 생각이 들었다. 예를 들어, 어떤 날 사소하게라도 자랑하고 싶다거나 간단히 위로 받고 싶은 일 이 있으면, 가볍게 지나가는 옆 사람과 우연히 얘기를 하며 얘기를 하면 기분이 좀 더 좋아지지 않을까 하는 생각이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;보통 처음 보는 사람에게 친근함 까지는 아니겠지만 적어도 적대적이지 않을테니 가볍게 나누는 대화는 약간의 온기라도 사람들끼리 갖으면서 기분이 좋아지지 않을까. 어떻게 하면 사람들과 처음 보는 사람과 가볍게 스몰 토크를 할 수 있을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gemini 에게 물어보았다.&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;3&quot; data-ke-size=&quot;size26&quot;&gt;1. '지금, 여기' 공유하기 (The Anchor)&lt;/h2&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;'나와 상대가 동시에 겪고 있는 상황'을 언급 (지금 벌어지고 있는 일에 대해 가볍게 한마디)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,0&quot;&gt;엘리베이터:&lt;/b&gt; &quot;오늘 날씨가 진짜 갑자기 추워졌죠? 내일은 더 춥다더라고요.&quot;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,0&quot;&gt;카페 대기 줄:&lt;/b&gt; &quot;여기 점심시간엔 항상 사람이 많네요. 혹시 여기 커피 자주 드시나요?&quot;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,2,0&quot;&gt;식당:&lt;/b&gt; &quot;이 메뉴 맛있어 보이는데, 혹시 드셔보셨나요?&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-path-to-node=&quot;6&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-path-to-node=&quot;6,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0&quot;&gt;  핵심:&lt;/b&gt; 상대방이 '네/아니오'로 대답해도 무안하지 않은 주제로 시작하는 것이 포인트입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size26&quot;&gt;2. '칭찬 + 질문' 콤보 활용하기&lt;/h2&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size16&quot;&gt;사람은 본능적으로 자신에 대한 긍정적인 언급에 마음이 열림. &lt;b data-index-in-node=&quot;58&quot; data-path-to-node=&quot;8&quot;&gt;가벼운 질문&lt;/b&gt;을 덧붙여보세요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;9&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;가방 색감이 너무 예쁘네요! 혹시 어디서 구매하셨는지 여쭤봐도 될까요?&quot;&lt;/li&gt;
&lt;li&gt;&quot;와, 그 책 저도 읽어보고 싶던 건데 재미있나요?&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;13&quot; data-ke-size=&quot;size26&quot;&gt;3. '나'를 먼저 살짝 보여주기 (Self-Disclosure)&lt;/h2&gt;
&lt;p data-path-to-node=&quot;14&quot; data-ke-size=&quot;size16&quot;&gt;상대방의 경계심을 풀게 하려면 내가 먼저 아주 작은 정보나 감정을 공유하는 것이 효과적&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;15&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;제가 길치라 그런데, 혹시 이 근처에 지하철역이 어디쯤인지 아세요?&quot;&lt;/li&gt;
&lt;li&gt;&quot;오늘 첫 출근이라 너무 떨리네요. 혹시 이 근처 분위기는 보통 어떤가요?&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이렇게 추천해 주었다. 답변을 읽어보았는데 너무 미국식으로 스몰토크를 여는 느낌인거같긴 하네. 사실 한국 수준에선 길에서 만난 모르는 사람과 &quot;좋은 아침입니다&quot; 이런 식으로 인사만 하더라도 엄청난 스몰 토크인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;아침에 출근하려고 버스를 타는데, 우연히 3일 연속 같은 시간에 같은 버스를 탄 적이 있다. 거기에 어떤 아저씨가 항상 계속 타고 내렸는데, 그 아저씨는 매번 탈때마다 기사님께 큰 소리로 &quot;안녕하세요&quot; 라고 인사했고 내릴 때 마다 큰 소리로 &quot;감사합니다&quot; 라고 인사했다. 내릴 때는 뒷문이라서 버스 안에 사람들 다 들리게 큰 소리로 인사를 하고 내렸다. 한번은 그 인사를 듣고 웃음을 짓는 기사 아저씨를 거울로 봤었다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;그 모습을 볼 때, 뭔가 인사를 할줄 아는 멋진 아저씨라는 생각이 들었고 인사로 누군가에게 웃음을 지어준다는 생각이 들었다. 그 뒤로 나도 버스를 탈 때 마다 인사를 했다. 내릴 때도 사람이 많지 않으면 감사의 인사를 하고 내린다. (뒤에서 내리면 크게 말해야 해서)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;인사가 스몰 토크랑 무슨 관계가 있는지 생각해 보니까, 가볍게 사람들간의 온기를 나누면서 기분이 조금이라도 좋아진다면 그게 공통점이지 않을까 생각한다. 조금이라도 도움이 되면 좋겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tcULb/dJMcahjhset/7YHVaUDdyJjnpslZFwrsyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tcULb/dJMcahjhset/7YHVaUDdyJjnpslZFwrsyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tcULb/dJMcahjhset/7YHVaUDdyJjnpslZFwrsyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtcULb%2FdJMcahjhset%2F7YHVaUDdyJjnpslZFwrsyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>생각</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/107</guid>
      <comments>https://postbarca.tistory.com/107#entry107comment</comments>
      <pubDate>Wed, 4 Mar 2026 23:20:23 +0900</pubDate>
    </item>
    <item>
      <title>[어쩌면 해피엔딩 관람평] 화려하지 않아도 완벽한, 마치 '메시' 같았던 작품</title>
      <link>https://postbarca.tistory.com/105</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MPhGp/dJMcahCWMFr/ntoLbbAupaa5ocxzxdLHD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MPhGp/dJMcahCWMFr/ntoLbbAupaa5ocxzxdLHD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MPhGp/dJMcahCWMFr/ntoLbbAupaa5ocxzxdLHD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMPhGp%2FdJMcahCWMFr%2FntoLbbAupaa5ocxzxdLHD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;604&quot; height=&quot;805&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size26&quot;&gt;1. 관람 정보&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;관람 일시:&lt;/b&gt; 2025년 12월 13일 (토) 오후 2시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공연장:&lt;/b&gt; 두산아트센터 연강홀&lt;/li&gt;
&lt;li&gt;&lt;b&gt;좌석:&lt;/b&gt; 2층 맨 뒤 (시야 걱정했는데 생각보다 아주 잘 보였음)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오늘의 캐스트:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;올리버:&lt;/b&gt; 신성민&lt;/li&gt;
&lt;li&gt;&lt;b&gt;클레어:&lt;/b&gt; 박지연&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제임스:&lt;/b&gt; 이시안&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 들어가며: 자극적이지 않아서 더 끌리는 맛&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 햄버거 프랜차이즈 중 맥도날드를 선호한다. 다른 곳보다 덜 기름지고 덜 자극적이라 질리지 않기 때문이다. 이 뮤지컬이 딱 그랬다. 전반적인 감정선은 잔잔하고 담백하다. 하지만 그 잔잔함 속에서 사랑의 설렘과 슬픔을 폭발적으로 이끌어낸다는 점이 신기했다. 처음엔 다들 평온하게 보다가 중반부터 객석 곳곳에서 훌쩍이는 소리가 들려왔고, 나 역시 많이 울고 나왔다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 작품의 주요 매력 포인트&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;① 군더더기 없는 '메시' 같은 연출&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 작품을 보며 축구 선수 '메시'가 떠올랐다. 화려한 개인기나 쇼맨십 없이, 아주 간결한 드리블만으로 수비수들을 제치고 골을 넣는 느낌이랄까? 절제된 감정선과 간결한 스토리로 사랑의 본질을 완벽하게 표현했다. 등장인물이 많지 않고 이야기 구조가 복잡하지 않아 뮤지컬 입문자에게도 최고의 작품이다. 왜 수많은 상을 받았는지 납득이 가는 퀄리티였다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;② 아날로그 감성과 무대 미학&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피아노와 현악기로 이루어진 라이브 밴드 연주는 감성을 극대화했다. 영상, 소품, 배경 활용 또한 탁월했는데, 특히 무대 연출이 엄청나서 보는 내내 감탄했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 깊이 있는 사유: 사랑, 그 복합적인 감정에 대하여&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 뮤지컬은 사랑이 단순히 행복한 감정이 아니라, 행복과 슬픔이 공존하는 복합체임을 설명해 준다. 세상 모든 일이 그렇다. 일에는 성취감과 피로가 공존하고, 술에는 즐거움과 건강 손실이, 공부에는 지식과 지겨움이 함께한다. 사랑 역시 마찬가지다. 보통은 자발적으로 시작하기에 좋은 면만 보려 하고 슬픔이라는 단점을 간과하기 쉽다. 하지만 사랑은 좋은 것만 취하고 나쁜 것은 버릴 수 있는 게 아니다. 둘 다 가져가야 한다. 다만, 그럼에도 불구하고 좋은 점이 훨씬 크기에 우리는 사랑을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;사랑은 유한하다. 오늘의 나와 내일의 나는 다르기 때문이다. 그래서 '오늘의 나'일 동안 최선을 다해 사랑해야 하고, '내일의 나'는 또 그 시간 동안 최선을 다해야 한다.&lt;/p&gt;
&lt;h2 data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size26&quot;&gt;5. 결말에 대한 생각&lt;/h2&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;사람들은 흔히 '열린 결말'이라고 말하지만, 나는 결과가 정해진 하나의 명확한 결말이라고 느꼈다. 기억을 지웠지만, 운명처럼 서로를 다시 마주하게 된 그 순간. 거기서 이야기가 어떻게 전개될지는 아무도 모른다. 알 수 없는 미래임에도 불구하고 다시 서로를 향해 문을 열게 되는 것. 사랑은 결국 그런 것이라고 생각한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 총평 및 마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;사실 이 작품을 보게 된 가장 큰 이유는 토니상을 수상했기 때문이다. 처음 이 작품을 알게 된건 &lt;a href=&quot;https://www.youtube.com/watch?v=A8zgnGetL3o&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;슈카월드 유투브&lt;/a&gt;를 통해 알게 되었다. 세계적인 뮤지컬 상을 수상 했으니 꼭 봐야겠다는 생각이 들어 보게 되었다. 이전에 노벨 문학상을 받은 몇몇 작품을 읽어보았으나, 이해를 하기 어려워서 토니상 수상 작도 이해하기 어려우려나 걱정했는데, 전혀 걱정할게 아니였다. 정말 잘만들었다. 이보다 더 잘 만든 창작 뮤지컬을 또 만날 수 있을까 싶을 정도로 'GOAT(Greatest Of All Time)'였다. 배우들의 노래와 연기 또한 나무랄 데 없이 멋졌다. (농담 삼아 앞으로는 이 뮤지컬을 부를 때 &quot;2025년 제78회 미국 토니상(Tony Awards)에서 작품상, 연출상, 남우주연상, 극본상, 작곡/작사상, 무대 디자인상 등 총 6개 부문을 석권하며 K-뮤지컬의 위상을 높힌&quot; 이라는 수식어를 꼭 붙여 불러야겠다. ㅎㅎㅎ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 걸작을 만든 박천휴(작가), 윌 애런슨(작곡가) 콤비의 또 다른 작품인 뮤지컬 &amp;lt;일 테노레&amp;gt;가 있다고 한다. &amp;lt;어쩌면 해피엔딩&amp;gt;보다 감정의 폭이 더 크다고 하니 무조건 &amp;lt;일 테노레&amp;gt;를 봐야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;별점:&lt;/b&gt; ★★★★★ (인생 뮤지컬 등극)&lt;/p&gt;</description>
      <category>자유</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/105</guid>
      <comments>https://postbarca.tistory.com/105#entry105comment</comments>
      <pubDate>Sun, 14 Dec 2025 00:34:19 +0900</pubDate>
    </item>
    <item>
      <title>[갤럭시북3] Dolby Atmos 설정이 안보일때 해결법</title>
      <link>https://postbarca.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2월에 삼성 갤럭시북3프로 사서 쓰다가 최근에 무슨 업데이트를 했는데 그 이후로 Samsung Settings앱에서 Dolby Atmos 설정이 갑자기 안보이기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 말고 안된다는 의견을 몇몇 접할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결법을 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 장치 관리자에 가서 &lt;b&gt;사운드, 비디오 및 게임 컨트롤러 &lt;/b&gt;안에 있는 &lt;b&gt;Realtek(R) Audio&lt;/b&gt; 를 우클릭해서 속성을 들어가준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) &lt;b&gt;드라이버 - 디바이스 제거 - 창이 나타나면 드라이버 삭제하는거 체크박스 눌러주고 제거한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 제거후 재부팅한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 다시 켜지면 &lt;b&gt;Samsung Update &lt;/b&gt;들어가서 &lt;b&gt;사운드 드라이버&amp;nbsp;&lt;/b&gt;를 설치해준다. 설치 완료되면 재부팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 다시 &lt;b&gt;Samsung Settings&lt;/b&gt;앱 가면 다시 Dolby Atmos를 킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와!! 문제해결&lt;/p&gt;</description>
      <category>자유</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/98</guid>
      <comments>https://postbarca.tistory.com/98#entry98comment</comments>
      <pubDate>Tue, 11 Apr 2023 16:37:01 +0900</pubDate>
    </item>
    <item>
      <title>[CSS] z-index 가 작동하지 않을 때</title>
      <link>https://postbarca.tistory.com/87</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1693&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6GxwI/btrL4A1Ix5o/MqiM2t9QMZgKOmGXTKkt8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6GxwI/btrL4A1Ix5o/MqiM2t9QMZgKOmGXTKkt8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6GxwI/btrL4A1Ix5o/MqiM2t9QMZgKOmGXTKkt8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6GxwI%2FbtrL4A1Ix5o%2FMqiM2t9QMZgKOmGXTKkt8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;287&quot; height=&quot;405&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1693&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가끔 z-index가 왜 작동하지 않는 것 처럼 보이는 문제가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우 대부분의 경우 해결책은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;position 속성을 확인해보자(static이 아니어야 한다)&lt;/li&gt;
&lt;li&gt;부모 요소의 z-index가 다른 요소의 z-index보다 낮다면, 자식 요소가 아무리 z-index가 높아도 다른 요소에 의해서 가려진다. 부모 요소의 z-index를 확인해보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 대부분 1번, 가끔씩 2번 경우를 해결하면 정상적으로 작동하였다.&lt;/p&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/87</guid>
      <comments>https://postbarca.tistory.com/87#entry87comment</comments>
      <pubDate>Tue, 13 Sep 2022 18:54:47 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Celery Execution Pools 셀러리 풀에 관하여</title>
      <link>https://postbarca.tistory.com/76</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;어떤 외국 글 번역함&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀러리는 작업 큐입니다. 이 셀러리에 풀이라는 옵션이 있는 이게 뭘까&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;셀러리 워커&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀러리 워커는 작업을 하지 않는다. 워커는 자식 프로세스(혹은 스레드)들을 호출해서 실제 작업을 실행한다. 이 자식들은 &lt;b&gt;Execution Pool&amp;nbsp;&lt;/b&gt;이라고 한다. 이 자식 프로세스들의 개수가 셀러리가 동시에 처리하는 프로세스들의 수다. 더 많을수록 더 많이 동시에 작업함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이걸 정하는게 사실 엄청 복잡함. 얼마나 많이 실행할지에 대해서는 너가 프로세스를 쓰느냐 스레드를 쓰느냐에 따라서 달림. 그리고 프로세스를 쓸지 스레드를 쓸지는 니 작업이 뭐할지에 따라서 달림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;--pool (-P) 옵션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너는 --pool 옵션을 통해 프로세스와 스레드 중에서 고를수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래처럼 gevent를 쓰면, 100개의 그린 스레드를 생성한다 (pip에서 gevent설치해줘야함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(역자: 윈도우에선 풀옵션 지정 안하면 안돌아감 gevnet는 잘돌아가긴해 그냥 도커로 리눅스 쓰자)&lt;/p&gt;
&lt;pre id=&quot;code_1661350709979&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start celery worker with the gevent pool
~$ celery worker --app=worker.app --pool=gevent --concurrency=100&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그린 스레드&lt;/b&gt;가 뭘까? 이제 알아보자. 셀러리는 이런 풀 옵션들을 제공함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;prefork&lt;/li&gt;
&lt;li&gt;solo&lt;/li&gt;
&lt;li&gt;eventlet&lt;/li&gt;
&lt;li&gt;gevent&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션 안정해놓으면 셀러리가 기본으로 prefork씀&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Prefork&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prefork는 파이썬의 멀티프로세싱 패키지에 기반한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것은 파이썬의 GIL(&lt;a href=&quot;https://docs.python.org/dev/glossary.html#term-global-interpreter-lock&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.python.org/dev/glossary.html#term-global-interpreter-lock&lt;/a&gt;)을 우회하고 멀티프로세스를 신나게 즐기도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너는 CPU범위 내의 작업을 하고싶으면 이걸 쓰면 된다. CPU범위 내라는건 대부분의 시간을 CPU자원을 쓰는데 쓰는것을 말함. CPU가 빠르면 작업도 빨리끝나겠지이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이용 가능한 코어의 개수는 프로세스들의 동시작업 개수를 제한한다. CPU가 가능한 한 병렬로 돌아감. 그래서 셀러리 기본 concurrency 옵션이 기본적으로 CPU코어 개수만큼 지정됨.(따로 설정 안해주면)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU가 가능한만큼 동시에 돌아가는 prepork를 써보자&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Solo&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔로 얘는 좀 특별한애임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엄격히 말하며는 얘는 스레드나 프로세스 기반이 아님.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 엄격히말하면 예는 pool이 아니다 왜냐햐면 혼자니까.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 더더 엄격하기 말하면 얘는 워커가 직접 일 안한다는 사실까지도 반박해버림(워커가 자식안만들고 직접 일한다는 뜻)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얘는 워커에서 돌아간다. 이거는 뭐 오버헤드 이런게 없어서 빠르다. 하지만 일 진행중에 다른일이 또 큐에 들어오면 실행되는동안 좀 기다려야겠지. 대신 한번에 한개의 일만 함 순서대로&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Eventlet &amp;amp; Gevent&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 너가 외부 REST API에 수천개의 http요청을 날린다고 해보자. 대부분의 시간은 CPU를 안쓰면서 그냥 기다림. 이경우는 CPU에 병목현상이 아님. I/O에 대해 병목현상이 일어남 I/O가 끝나야 일이 끝남.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너가 1개의 자식 스레드로 돌리면 한번에 1개만 처리할수있음 근데 수천개하려면 오래걸림 그래서 더 많은 프로세스를 생성함 그런데 어느순간부터 프로세스를 더 생성하면 성능에 안좋아지는 수량이 있음. 프로세스 관리하는 오버헤드가 더 커져서 그럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런경우 스레드를 늘리는게 더 효율적임. 셀러리는 2개의 스레드 기반 셀러리 풀을 제공함 :&amp;nbsp;&lt;b&gt;eventlet / gevent&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 풀이 워커랑 같은 프로세스에 있음, 정확히는 두개 다 greenlet을 이용하고 스레드를 이용하지 않음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Greenlets - 그린 스레드라고 불림, 이것은 스레드를 주지만 스레드를 안씀. 이것은 커널에서 관리되는게 아니라 어플리케이션에서 관리됨. 스케줄러없이 특정시점에 서로 자원을 낭비함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것은 greenlet이 엄청난 숫자의 non-blocking 일을 할때 효과가 좋음. 너의 앱은 더 효율적으로 관리할 수 있음. 더 많은 숫자의 이런 일을 이렇게 관리하는 것은 운영체제가 스케줄링하는거보다 더 확장가능하다. gevent나 eventlet을 이용하면 램을 늘리지 않아도 성능이 늘어난다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Concurrency 옵션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;최고의 옵션을 고르기 전에, 너는 CPU위주 일인지 I/O위주 일인지를 먼저 봐야한다. CPU중심 일인 경우는 Prefork를 쓰는게 낫다. I/O일의 경우는 gevnet/eventlet을 쓰는게 낫다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;concurrency는 기본적으로 CPU개수에 맞게 설정된다. 이것 prefork에 맞는 설정이긴 하다. 그렇긴 한데 다른 많은 프로세스가 컴터에서 돌아가고 있으면 적당히 조정하는게 맞다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;기본 설정으로 gevent/eventlet을 쓰는건 바보같은 짓이다. 이거는 너의 CPU코어랑은 상관이 없으니 적당히 많이 쓰면 된다 한 500개정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;솔로풀의 경우엔 이거 옵션을 줄수있기는 한데 의미가 없음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그래서 결론적으로 항상 concurrency를 명시하는게 좋은거같음&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀러리는 2개의 컨셉을 지원한다: Prefork / Greenlets.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Prefork는 멀티프로세싱에 기반을 두고 CPU기반의 일할때(풀은 CPU코어에 맞게), Greenlets는 I/O기반의 일할때 써라(풀 몇백개 천개 이렇게 만들어라)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;원문&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.distributedpython.com/2018/10/26/celery-execution-pool/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.distributedpython.com/2018/10/26/celery-execution-pool/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1661350241843&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Celery Execution Pools: What is it all about? | distributedpython&quot; data-og-description=&quot;An introduction to prefork, solo, eventlet and gevent&quot; data-og-host=&quot;www.distributedpython.com&quot; data-og-source-url=&quot;https://www.distributedpython.com/2018/10/26/celery-execution-pool/&quot; data-og-url=&quot;https://www.distributedpython.com/2018/10/26/celery-execution-pool/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.distributedpython.com/2018/10/26/celery-execution-pool/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.distributedpython.com/2018/10/26/celery-execution-pool/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Celery Execution Pools: What is it all about? | distributedpython&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;An introduction to prefork, solo, eventlet and gevent&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.distributedpython.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/76</guid>
      <comments>https://postbarca.tistory.com/76#entry76comment</comments>
      <pubDate>Wed, 24 Aug 2022 23:59:42 +0900</pubDate>
    </item>
    <item>
      <title>[스팀] 스팀 계정 해킹당하고 난 뒤 복구 과정(이메일, 비밀번호 모두 변경되었을 경우)</title>
      <link>https://postbarca.tistory.com/74</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어느날부터 갑자기 스팀이 게임을 하는건 아니지만 자동 로그인이 안되어서 그냥 그런가보다 했는데 오늘 한번 로그인 해보니까 로그인이 안되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호만 바뀐줄 알고 이메일 인증 하려고하니까 이메일도 바뀌어있음...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 스팀 고객센터에다 문의를 넣었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고객센터 &amp;gt; 이메일로 검색 &amp;gt; 이메일 해당하는거 없어서 계정 아이디로 검색 &amp;gt; 아이디 로 로그인하기 &amp;gt; 비밀번호 입력 &amp;gt; 틀림 &amp;gt; 밑에 I forgot password 를 누르니 이런 페이지가 나옴.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMEuqw/btrAzbGZ8W2/aPhnUcxAe9vt6MpkZ1WLWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMEuqw/btrAzbGZ8W2/aPhnUcxAe9vt6MpkZ1WLWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMEuqw/btrAzbGZ8W2/aPhnUcxAe9vt6MpkZ1WLWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMEuqw%2FbtrAzbGZ8W2%2FaPhnUcxAe9vt6MpkZ1WLWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;791&quot; height=&quot;956&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;956&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 이제 자세히 쓰면 되는데 원래 쓰던 메일과 전화번호를 입력한다. 아마 이전에 해당 계정에서 무언가를 구매한 내역을 증명하는게 제일 중요한 일인것 같다. 그래서 여기에 성실히 내용을 쓰면 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경우 카드로 결제한 게임이 6~7년 전이라 카드 정보가 맞을리가 없어서 아무래도 최근에 결제한 토스가 주요한 열쇠가 될 것 같다. 우선 위의 간단한 정보 입력을 한 후 하단의 길게 쓰는 칸에 하소연을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;I am South Korean steam game player.&lt;br /&gt;I think my account was hacked in march 30 at out of korea. I got an email with unkown language in march 30. The mail's content was my account's email address is gonna change. But i didn't accessed my steam account at least 4 months.&lt;br /&gt;&lt;br /&gt;Here is my account's Info that I can remember.&lt;br /&gt;I bought Civilization V in late 2015 or early 2016 with MasterCard.&lt;br /&gt;I bought Football Manager 2018 with CD Key at 2018 january.&lt;br /&gt;I Bought Left4Dead2 with Korean payment system called &quot;TOSS&quot; and cost was 2000 korean won at 2021.&lt;br /&gt;...&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등등 대충 이런식으로 해킹된 경황과 계정에 대한 정보 및 게임 결제 한 방법에 대해서 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그후 이런식으로 답변이 왔다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Sorry to hear about this.&lt;br /&gt;&lt;br /&gt;Before we make changes and discuss further details, we need to verify some additional information regarding the purchases made on this account.&lt;br /&gt;&lt;br /&gt;In your next reply, please send us the following information about the Toss purchase on this Steam account:&lt;br /&gt;&lt;br /&gt;- Email receipt with transaction details&lt;br /&gt;- A screenshot of your payment method account, showing a non-altered, purchase receipt with transaction details made for this Steam account&lt;br /&gt;&lt;br /&gt;*Caution: Culture Voucher for mobile will only display transactions within the last month. You may need to use the web version to adjust the search date.&lt;br /&gt;&lt;br /&gt;Once we receive this information from you we can provide further assistance.&lt;br /&gt;&lt;br /&gt;Steam Support&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 말하면 토스결제와 관련된 이메일 영수증과 토스에서 결제한 영수증?을 달라고 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이메일(구매했을 시 도착하는 이메일)을 찾아서 스크린샷을 했고, 토스 앱에서 결제한 내역을 찾아서 스크린샷을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 다시 해당 스크린샷과 설명 조금(이메일영수증을 무슨 계정으로 언제 받았고 토스로 언제 결제되었다)을 보냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 답변&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Hello,&lt;br /&gt;&lt;br /&gt;It appears that the account was compromised. To prevent unauthorized access to the account, I recommend that you enable the&amp;nbsp;&lt;br /&gt;Steam Guard Mobile Authenticator&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;I've reset the account password and sent the new login information to the email address you've contacted us from. If the email is not received, please check the spam or trash folder.&lt;br /&gt;&lt;br /&gt;As with any security reset, the account will be unable to trade or buy/sell in the Community Market for 15 days.&lt;br /&gt;&lt;br /&gt;I recommend that you also review our&amp;nbsp;&lt;br /&gt;Account Security Recommendations.&lt;br /&gt;&lt;br /&gt;Thank you for contacting Steam Support&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 메일로 새로운 아이디와 비밀번호가 도착했고 로그인후 바로 비번을 바꿨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스팀은 일처리가 굉장히 빠른것 같다.&lt;/p&gt;</description>
      <category>자유</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/74</guid>
      <comments>https://postbarca.tistory.com/74#entry74comment</comments>
      <pubDate>Wed, 27 Apr 2022 19:31:42 +0900</pubDate>
    </item>
    <item>
      <title>[React] 가상화폐 모의투자 웹앱</title>
      <link>https://postbarca.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;React&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Typescript&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redux&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCSS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://december-ok.github.io/CoinTrade/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://december-ok.github.io/CoinTrade/&lt;/a&gt;&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/73</guid>
      <comments>https://postbarca.tistory.com/73#entry73comment</comments>
      <pubDate>Sun, 7 Nov 2021 03:15:21 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] 알아야 할 7가지 자료형</title>
      <link>https://postbarca.tistory.com/69</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://www.educative.io/blog/javascript-data-structures&quot;&gt;www.educative.io/blog/javascript-data-structures&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;p&gt;7 JavaScript data structures you must know&lt;/p&gt;
&lt;p&gt;Data structures are a foundational part of JS programming, whether you&amp;#39;re just starting out or you&amp;#39;ve been coding for years. Let&amp;#39;s look at the 7 data structures you should never forget.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.educative.io&quot;&gt;www.educative.io&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;](&lt;a href=&quot;https://www.educative.io/blog/javascript-data-structures&quot;&gt;https://www.educative.io/blog/javascript-data-structures&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;이 글을 거의 번역함 보면 그냥 어떤 언어든 다 맞는말인거 같은데 왜 궂이 JS?&lt;/p&gt;
&lt;h1&gt;Array&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;장점&lt;ul&gt;
&lt;li&gt;쉽게 만들수있음&lt;/li&gt;
&lt;li&gt;복잡한 자료구조를 위한 기초&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;/li&gt;
&lt;li&gt;응용&lt;ul&gt;
&lt;li&gt;기본적 스프레드 시트&lt;/li&gt;
&lt;li&gt;해쉬테이블&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Queue&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&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;/li&gt;
&lt;li&gt;&lt;p&gt;단점&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;오래된 것만 받을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&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;h1&gt;Linked List&lt;/h1&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;장점&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;효과적으로 추가/제거 가능&lt;/li&gt;
&lt;li&gt;Array 보다 덜 복잡하게 Restructing 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;단점&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Array 보다 많은 메모리 사용&lt;/li&gt;
&lt;li&gt;특정 순번 원소 탐색에 비효율적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;응용&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;알지 못하는 위치에 빠른 추가 제거가 필요한 구조&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Tree&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;장점&lt;ul&gt;
&lt;li&gt;수직적 관계의 저장에 이상적&lt;/li&gt;
&lt;li&gt;동적인 크기&lt;/li&gt;
&lt;li&gt;추가와 제거가 빠름&lt;/li&gt;
&lt;li&gt;BST에서 삽입된 노드는 연속적으로 이어진다&lt;/li&gt;
&lt;li&gt;BST는 검색에 효율적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;단점&lt;ul&gt;
&lt;li&gt;노드 재배열하기에 느림&lt;/li&gt;
&lt;li&gt;자식 노드는 부모 노드에 대한 정보가 없음(이건 만드는사람에 따라 다를텐데)&lt;/li&gt;
&lt;li&gt;BST는 해쉬테이블보다 느림&lt;/li&gt;
&lt;li&gt;BST는 균형이 맞지 않으면 선형시간이 걸림(Balanced BST가 좋지)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;응용&lt;ul&gt;
&lt;li&gt;파일 저장할때&lt;/li&gt;
&lt;li&gt;검색/순서를 나열할때 매우 휼륭함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Graphs&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;장점&lt;ul&gt;
&lt;li&gt;글자보다 빠르게 시각적으로 전달 가능&lt;/li&gt;
&lt;li&gt;다양한 숫자들의 모델의 관계를 전달할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;단점&lt;ul&gt;
&lt;li&gt;높은 수준에서, 글자를 이미지로 변환하는데 오래걸릴수 있음&lt;/li&gt;
&lt;li&gt;얼마나 많이 연결되어있는지 보기 힘들 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;응용&lt;ul&gt;
&lt;li&gt;네트워크 표현&lt;/li&gt;
&lt;li&gt;페북같은 SNS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Hash Tables (Map)&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;장점&lt;ul&gt;
&lt;li&gt;Key는 어떤 형태도 될 수 있음(배열은 숫자만 올 수 있음)&lt;/li&gt;
&lt;li&gt;매우 효과적인 검색 함수&lt;/li&gt;
&lt;li&gt;검색을 할때 일정한 회수의 연산&lt;/li&gt;
&lt;li&gt;추가와 제거에 일정한 비용이 듬&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;단점&lt;ul&gt;
&lt;li&gt;충돌 : 2개의 해쉬코드가 같거나 같은 값을 가리킬 경우 오류뜸&lt;/li&gt;
&lt;li&gt;이런 에러는 흔하고 해쉬 함수를 검사좀 해봐야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;응용&lt;ul&gt;
&lt;li&gt;데이터베이스 저장소&lt;/li&gt;
&lt;li&gt;이름으로 주소찾기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/69</guid>
      <comments>https://postbarca.tistory.com/69#entry69comment</comments>
      <pubDate>Mon, 9 Nov 2020 18:20:58 +0900</pubDate>
    </item>
    <item>
      <title>[개인프로젝트] Outstagram - 7</title>
      <link>https://postbarca.tistory.com/68</link>
      <description>&lt;p&gt;UserDetail부분을 좀 다듬었다 Css가 정말 재미있다 의미는 없지만&lt;/p&gt;
&lt;p&gt;추가적으로 User가 작성한 Post들을 불러와보자&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;683&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6GTvm/btqL9todMWg/Ei37PD7KOqS9jJIQ5HwC1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6GTvm/btqL9todMWg/Ei37PD7KOqS9jJIQ5HwC1K/img.png&quot; data-alt=&quot;와우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6GTvm/btqL9todMWg/Ei37PD7KOqS9jJIQ5HwC1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6GTvm%2FbtqL9todMWg%2FEi37PD7KOqS9jJIQ5HwC1K%2Fimg.png&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;683&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;와우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 페이지를 만들면서 Grid layout에 대해 잘 알게 되었다. 그리고 이제 더이상 Grid layout을 건들고싶지 않다. 다시는 보지말자&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Post에 들어갈걸 미리 다 정해놓고 하는게 나을것 같다.&lt;/p&gt;
&lt;p&gt;어떤 기능을 할건지는 미리 정해야겠다&lt;/p&gt;
&lt;p&gt;-post&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;othersController를 추가해줌&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;329&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bISWR2/btqL9tBGo6F/mz3VUFkaaiwvCoh3tegWLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bISWR2/btqL9tBGo6F/mz3VUFkaaiwvCoh3tegWLK/img.png&quot; data-alt=&quot;귀중한 함수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bISWR2/btqL9tBGo6F/mz3VUFkaaiwvCoh3tegWLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbISWR2%2FbtqL9tBGo6F%2Fmz3VUFkaaiwvCoh3tegWLK%2Fimg.png&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;329&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;귀중한 함수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;아까 하던 Post에 댓글을 추가해야할 때가 온것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;글 삭제 기능도 추가해야 한다.&lt;/p&gt;
&lt;p&gt;조만간...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/68</guid>
      <comments>https://postbarca.tistory.com/68#entry68comment</comments>
      <pubDate>Fri, 30 Oct 2020 11:13:22 +0900</pubDate>
    </item>
    <item>
      <title>[개인프로젝트] Outstagram - 6</title>
      <link>https://postbarca.tistory.com/67</link>
      <description>&lt;p&gt;아까 오전에 한건 좀 부족한거 같애서 좀 더함&lt;/p&gt;
&lt;p&gt;일단 home에서 보이는 테스트 데이터 보여주는걸 실제 데이터 보여주는걸로 바꿈&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;758&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJydBu/btqLYNUn35X/sSPCEeUxS0RwyD2Qwu0UKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJydBu/btqLYNUn35X/sSPCEeUxS0RwyD2Qwu0UKK/img.png&quot; data-alt=&quot;테스트데이터를 몰아내고 진짜 데이터를 옮긴 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJydBu/btqLYNUn35X/sSPCEeUxS0RwyD2Qwu0UKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJydBu%2FbtqLYNUn35X%2FsSPCEeUxS0RwyD2Qwu0UKK%2Fimg.png&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;758&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;테스트데이터를 몰아내고 진짜 데이터를 옮긴 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;잘 된듯 하다.&lt;/p&gt;
&lt;p&gt;이제 User 관련 View부분을 건들면 될 것 같다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;778&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3Cwzi/btqLZJxAOF1/S6KmMpqM4X3uiAvOGykeG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3Cwzi/btqLZJxAOF1/S6KmMpqM4X3uiAvOGykeG1/img.png&quot; data-alt=&quot;이것저것 추가하다보니까 생각하지 못한 기능들이 생각나 User모델을 좀 더 수정했다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3Cwzi/btqLZJxAOF1/S6KmMpqM4X3uiAvOGykeG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3Cwzi%2FbtqLZJxAOF1%2FS6KmMpqM4X3uiAvOGykeG1%2Fimg.png&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;778&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이것저것 추가하다보니까 생각하지 못한 기능들이 생각나 User모델을 좀 더 수정했다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;막상 하려니까 좀 알차게 채우고 싶어져서 이것저것 만들었다&lt;/p&gt;
&lt;p&gt;CSS안하니까 안이쁘다&lt;/p&gt;
&lt;p&gt;User 모델을 좀 수정했다.&lt;/p&gt;
&lt;p&gt;UserDetail페이지대략적인 구성 그리드 레이아웃을 쓰면 될 것 같다&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 80px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 42px;&quot; rowspan=&quot;2&quot;&gt;프로필사진&lt;/td&gt;
&lt;td style=&quot;width: 58.2558%; height: 22px;&quot; colspan=&quot;3&quot;&gt;이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 58.2558%; height: 20px;&quot; colspan=&quot;3&quot;&gt;Description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 18px;&quot;&gt;작성글&lt;/td&gt;
&lt;td style=&quot;width: 33.2558%; height: 18px;&quot; colspan=&quot;2&quot;&gt;댓글&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 18px;&quot;&gt;받은 좋아요 개수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;45&lt;/td&gt;
&lt;td style=&quot;width: 33.2558%; height: 20px;&quot; colspan=&quot;2&quot;&gt;242&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;999999&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;그 밑엔 Controller부분인데 여러가지 기능들이 있다&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;nbsp;&lt;/p&gt;
&lt;p&gt;생각보다 할게 많다&lt;/p&gt;
&lt;p&gt;군대에서 코딩하는게 은근 힘들다&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/67</guid>
      <comments>https://postbarca.tistory.com/67#entry67comment</comments>
      <pubDate>Tue, 27 Oct 2020 21:26:38 +0900</pubDate>
    </item>
    <item>
      <title>[개인프로젝트] Outstagram - 5</title>
      <link>https://postbarca.tistory.com/66</link>
      <description>&lt;p&gt;User 부분을 하기위해서 passport를 이용한다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[의식의 흐름]&lt;/p&gt;
&lt;p&gt;로그인? passport써야지 소셜로그인 아니니까 그냥 local&amp;nbsp; strategy써야지&lt;/p&gt;
&lt;p&gt;User랑 연동도 해야해 몽구스 쓰니까 passport local mongoose써야지&lt;/p&gt;
&lt;p&gt;쓰는 이유?&lt;/p&gt;
&lt;p&gt;로그인/가입/탈퇴 시 DB연동됨&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 중요하다고 느끼는점 : 각 3개의 모듈은 어떤 일을 하는지?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Passport는 위에서 어떤식으로 할지 지휘를 하고 세부사항은 써줘야함 (session도 관리함)&lt;/p&gt;
&lt;p&gt;Passport local은 아이디와 비밀번호를 이용해 로그인을 하는 모듈&lt;/p&gt;
&lt;p&gt;Passport local mongoose는 위의 패포로컬을 몽구스와 연동하여 DB 사용하기 쉽게 해주는 아주좋은 모듈&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;대략적으로 이정도로 정리할 수 있겠다&lt;/p&gt;
&lt;p&gt;여전히 좀 어려운거같은데? 아무튼&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 컨트롤러 만들러 가야지&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;204&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7RrE4/btqLVahQuaG/G1qkXg0ksbABEFL43z4joK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7RrE4/btqLVahQuaG/G1qkXg0ksbABEFL43z4joK/img.png&quot; data-alt=&quot;User가 Join 및 Login에 성공한 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7RrE4/btqLVahQuaG/G1qkXg0ksbABEFL43z4joK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7RrE4%2FbtqLVahQuaG%2FG1qkXg0ksbABEFL43z4joK%2Fimg.png&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;204&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;User가 Join 및 Login에 성공한 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;성공! 이제 이것 저것 하면 된다&lt;/p&gt;
&lt;h1 id=&quot;log-out&quot;&gt;Log Out&lt;/h1&gt;
&lt;p&gt;Passport exposes a&lt;span&gt;&amp;nbsp;&lt;/span&gt;logout()&lt;span&gt;&amp;nbsp;&lt;/span&gt;function on&lt;span&gt;&amp;nbsp;&lt;/span&gt;req&lt;span&gt;&amp;nbsp;&lt;/span&gt;(also aliased as&lt;span&gt;&amp;nbsp;&lt;/span&gt;logOut()) that can be called from any route handler which needs to terminate a login session. Invoking&lt;span&gt;&amp;nbsp;&lt;/span&gt;logout()&lt;span&gt;&amp;nbsp;&lt;/span&gt;will remove the&lt;span&gt;&amp;nbsp;&lt;/span&gt;req.user&lt;span&gt;&amp;nbsp;&lt;/span&gt;property and clear the login session (if any).&lt;/p&gt;
&lt;p&gt;app.get(&lt;span&gt;&lt;span&gt;'/logout'&lt;/span&gt;&lt;/span&gt;, &lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;req, res&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;{ req.logout(); res.redirect(&lt;span&gt;&lt;span&gt;'/'&lt;/span&gt;&lt;/span&gt;); });&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;로그아웃은 생각보다 간단하다 &lt;span style=&quot;color: #333333;&quot;&gt;req.logout(); 한줄이면 되네&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;757&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZvMzo/btqLNrZ2ONa/7RIHnuRNnixvTMoS37YtRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZvMzo/btqLNrZ2ONa/7RIHnuRNnixvTMoS37YtRk/img.png&quot; data-alt=&quot;User까지 적용된 Post&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZvMzo/btqLNrZ2ONa/7RIHnuRNnixvTMoS37YtRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZvMzo%2FbtqLNrZ2ONa%2F7RIHnuRNnixvTMoS37YtRk%2Fimg.png&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;757&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;User까지 적용된 Post&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이제 점심먹을거임 &lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/66</guid>
      <comments>https://postbarca.tistory.com/66#entry66comment</comments>
      <pubDate>Tue, 27 Oct 2020 11:02:24 +0900</pubDate>
    </item>
    <item>
      <title>[개인프로젝트] Outstagram - 4</title>
      <link>https://postbarca.tistory.com/65</link>
      <description>&lt;p&gt;User 부분과 로그인 부분을 완성하면 될것같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Passport를 이용할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://opentutorials.org/course/3402&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;opentutorials.org/course/3402&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603242036434&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;university&quot; data-og-title=&quot;Passport.js - 생활코딩&quot; data-og-description=&quot;수업소개 이 수업은 Node.js Express의 인증 미들웨어인 Passport.js의 사용법을 알려드리는 수업입니다.&amp;nbsp; 수업대상 로그인/로그아웃/접근제한과 같은 인증 기능을 구현하고 싶은 분에게 필요한 수업��&quot; data-og-host=&quot;opentutorials.org&quot; data-og-source-url=&quot;https://opentutorials.org/course/3402&quot; data-og-url=&quot;https://opentutorials.org/course/3402&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sGqBb/hyHWlHBSbx/ExlhI47hkSLwo3XPhwVOEk/img.png?width=1124&amp;amp;height=824&amp;amp;face=0_0_1124_824&quot;&gt;&lt;a href=&quot;https://opentutorials.org/course/3402&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opentutorials.org/course/3402&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sGqBb/hyHWlHBSbx/ExlhI47hkSLwo3XPhwVOEk/img.png?width=1124&amp;amp;height=824&amp;amp;face=0_0_1124_824');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Passport.js - 생활코딩&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;수업소개 이 수업은 Node.js Express의 인증 미들웨어인 Passport.js의 사용법을 알려드리는 수업입니다.&amp;nbsp; 수업대상 로그인/로그아웃/접근제한과 같은 인증 기능을 구현하고 싶은 분에게 필요한 수업��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;opentutorials.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;근데 이걸 듣기 위해&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://opentutorials.org/module/3648&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;opentutorials.org/module/3648&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603242059510&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;university&quot; data-og-title=&quot;WEB4 - Express-Session-Auth&quot; data-og-description=&quot;수업소개 이 수업은 Node.js 웹프래임웍인 Express에서 Session을 이용해 인증을 구현하는 방법을 알려드리는 수업입니다.&amp;nbsp; 수업대상 로그인/로그아웃/접근제한과 같은 인증 기능을 구현하고 싶은 분&quot; data-og-host=&quot;opentutorials.org&quot; data-og-source-url=&quot;https://opentutorials.org/module/3648&quot; data-og-url=&quot;https://opentutorials.org/module/3648&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://opentutorials.org/module/3648&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opentutorials.org/module/3648&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;WEB4 - Express-Session-Auth&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;수업소개 이 수업은 Node.js 웹프래임웍인 Express에서 Session을 이용해 인증을 구현하는 방법을 알려드리는 수업입니다.&amp;nbsp; 수업대상 로그인/로그아웃/접근제한과 같은 인증 기능을 구현하고 싶은 분&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;opentutorials.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;도 들었다&lt;/p&gt;
&lt;p&gt;근데 또 저걸 듣기 위해&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://opentutorials.org/module/3630/21744&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;opentutorials.org/module/3630&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603242076445&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;university&quot; data-og-title=&quot;쿠키 옵션 - Secure &amp;amp; HttpOnly - Node.js - Cookie &amp;amp; 인증&quot; data-og-description=&quot;수업소개 Secure는 웹브라우저와 웹서버가&amp;nbsp;https로 통신하는 경우만 웹브라우저가 쿠키를 서버로 전송하는 옵션입니다.&amp;nbsp; HttpOnly는 자바스크립트의 document.cookie를 이용해서 쿠키에 접속하는 것을 �&quot; data-og-host=&quot;opentutorials.org&quot; data-og-source-url=&quot;https://opentutorials.org/module/3630/21744&quot; data-og-url=&quot;https://opentutorials.org/module/3630/21744&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://opentutorials.org/module/3630/21744&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opentutorials.org/module/3630/21744&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;쿠키 옵션 - Secure &amp;amp; HttpOnly - Node.js - Cookie &amp;amp; 인증&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;수업소개 Secure는 웹브라우저와 웹서버가&amp;nbsp;https로 통신하는 경우만 웹브라우저가 쿠키를 서버로 전송하는 옵션입니다.&amp;nbsp; HttpOnly는 자바스크립트의 document.cookie를 이용해서 쿠키에 접속하는 것을 �&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;opentutorials.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;까지 들었다 &lt;s&gt;이게 끝임&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;쿠키 -&amp;gt; express-session-auth -&amp;gt; passport 순서로 들었다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;몰랏던 개념을 다시 짚는것 같아서 좋다&lt;/p&gt;
&lt;p&gt;생활코딩 잘 몰랐는데 좋은 사이트같다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/65</guid>
      <comments>https://postbarca.tistory.com/65#entry65comment</comments>
      <pubDate>Wed, 21 Oct 2020 11:16:38 +0900</pubDate>
    </item>
    <item>
      <title>[개인프로젝트] Outstagram - 3</title>
      <link>https://postbarca.tistory.com/64</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;814&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGAPGI/btqLlBmQQjK/PGlaSKt2iQUjgTVb25gMy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGAPGI/btqLlBmQQjK/PGlaSKt2iQUjgTVb25gMy0/img.png&quot; data-alt=&quot;모바일 용으로 CSS를 바꿨다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGAPGI/btqLlBmQQjK/PGlaSKt2iQUjgTVb25gMy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGAPGI%2FbtqLlBmQQjK%2FPGlaSKt2iQUjgTVb25gMy0%2Fimg.png&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;814&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모바일 용으로 CSS를 바꿨다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;사실상 CSS밖에 건든게 없다 하지만 거의 무에 가깝던 CSS실력을 많이 기른것 같다&lt;/p&gt;
&lt;p&gt;특히 사진 1:1 비율 고정시키는 object-fit: cover; 는 정말 기적에 가까운 기능을 보여줬다 행복했다&lt;/p&gt;
&lt;p&gt;만지다 보니까 다크모드에도 관심이 생겼다 SCSS의 기능을 잘 활용해야되는데 좀 잘 못한것 같다&lt;/p&gt;
&lt;p&gt;이제 더이상 CSS는 당분간 안하고 기능 구현에 집중할 것이다. 은근 중독성이 강하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;DB연동을 먼저 해야겠다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MongoDB가 편하니까 이거 쓸거임&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하기 싫어서 그렇지 하니까 금방함&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Models 총 3가지&lt;/p&gt;
&lt;p&gt;User, Post, Comment&lt;/p&gt;
&lt;p&gt;스키마와 모델은 어떤관계인가?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://backend-intro.vlpt.us/2/03.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;backend-intro.vlpt.us/2/03.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603104773838&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2-3. 데이터베이스 스키마와 모델 &amp;middot; GitBook&quot; data-og-description=&quot;2-3. 데이터베이스 스키마와 모델 2장의 서론에서는, MongoDB 는 고정적인 스키마를 갖지 않고 있다고 설명을 했습니다. 그런데 이번에 스키마를 미리 만든다니, 조금 헷갈리기도 하지요? 여기서 만&quot; data-og-host=&quot;backend-intro.vlpt.us&quot; data-og-source-url=&quot;https://backend-intro.vlpt.us/2/03.html&quot; data-og-url=&quot;https://backend-intro.vlpt.us/2/03.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://backend-intro.vlpt.us/2/03.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://backend-intro.vlpt.us/2/03.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;2-3. 데이터베이스 스키마와 모델 &amp;middot; GitBook&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2-3. 데이터베이스 스키마와 모델 2장의 서론에서는, MongoDB 는 고정적인 스키마를 갖지 않고 있다고 설명을 했습니다. 그런데 이번에 스키마를 미리 만든다니, 조금 헷갈리기도 하지요? 여기서 만&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;backend-intro.vlpt.us&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;스키마로 모델 인스턴스를 만든다고 합니다 ㅎ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Upload를 먼저 할껀데 그 전에 Multer를 깔아야되는데 그전에 Upload 페이지를 만들어야되는데&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Upload 페이지 만듬&lt;/p&gt;
&lt;p&gt;Multer설치함&lt;/p&gt;
&lt;p&gt;Upload 구현하고&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;post get 다 만듦&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;getPostDetail까지 완성...!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;581&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNGJ14/btqLhOU9oqq/KMIpL41IemTAlZdRUg2c41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNGJ14/btqLhOU9oqq/KMIpL41IemTAlZdRUg2c41/img.png&quot; data-alt=&quot;첫 정식으로 게시한 게시물&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNGJ14/btqLhOU9oqq/KMIpL41IemTAlZdRUg2c41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNGJ14%2FbtqLhOU9oqq%2FKMIpL41IemTAlZdRUg2c41%2Fimg.png&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;581&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;첫 정식으로 게시한 게시물&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;아직 User는 안만들어서 완전한 구현은 안됬는데 조금만 더하면 될듯!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;생각보다 금방된다&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/64</guid>
      <comments>https://postbarca.tistory.com/64#entry64comment</comments>
      <pubDate>Mon, 19 Oct 2020 21:30:24 +0900</pubDate>
    </item>
    <item>
      <title>Visual Studio Code 터미널이 새창으로 열릴때 해결법</title>
      <link>https://postbarca.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;integrated terminal 이 열리지 않을때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cmd 속성에서 레거시 모드를 해제하면 새창으로 뜨지 않고 내장으로 뜸&lt;/p&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/63</guid>
      <comments>https://postbarca.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 15 Oct 2020 08:19:42 +0900</pubDate>
    </item>
    <item>
      <title>[개인프로젝트] Outstagram - 2</title>
      <link>https://postbarca.tistory.com/62</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;갑자기 하고싶어서 &lt;/span&gt;Header부분 CSS를 짰다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;468&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uFDUq/btqKC9T7Xmf/fZi7QLx0Hz7Isxn59Qw2D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uFDUq/btqKC9T7Xmf/fZi7QLx0Hz7Isxn59Qw2D1/img.png&quot; data-alt=&quot;2시간걸림 SCSS 설정하느라&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uFDUq/btqKC9T7Xmf/fZi7QLx0Hz7Isxn59Qw2D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuFDUq%2FbtqKC9T7Xmf%2FfZi7QLx0Hz7Isxn59Qw2D1%2Fimg.png&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;468&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2시간걸림 SCSS 설정하느라&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그다음엔 각 Post에 들어갈 요소들을 생각했다&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;posts&lt;/span&gt;&lt;span&gt;&amp;nbsp;=&amp;nbsp;[&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;123123&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;author&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;'@messi'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;contentsType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&amp;nbsp;0&amp;nbsp;is&amp;nbsp;pictures,&amp;nbsp;1&amp;nbsp;is&amp;nbsp;video&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;contentFiles&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;[&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;'./contents/messi.jpg'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;article&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;'World&amp;nbsp;Best'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;likedUsers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;[&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;comments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;[&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;id, 글쓴이, 사진인지 영상인지, 포스팅 내용, 좋아요 누른사람들, 댓글 목록들&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;막무가내로 만들려고하니 복잡하다 조금 더 생각을 해야겠다.&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/62</guid>
      <comments>https://postbarca.tistory.com/62#entry62comment</comments>
      <pubDate>Tue, 13 Oct 2020 11:10:14 +0900</pubDate>
    </item>
    <item>
      <title>[개인프로젝트] Outstagram - 1</title>
      <link>https://postbarca.tistory.com/61</link>
      <description>&lt;p&gt;인스타그램 짝퉁 Outstagram을 만들꺼다. 여러가지 기능을 생각중이고 생각보다 간단해 보여서 만들어본다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Nodejs 세팅&amp;nbsp;&lt;/p&gt;
&lt;p&gt;개발환경 : VScode nodeJs MongoDB eslint 설치&lt;/p&gt;
&lt;p&gt;설치한 패키지&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p&gt;&lt;span&gt;&quot;dependencies&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;{&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;dotenv&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^8.2.0&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;express&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^4.17.1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;helmet&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^4.1.1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;morgan&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^1.10.0&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;},&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;devDependencies&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;{&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;@babel/core&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^7.11.6&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;@babel/node&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^7.10.5&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;@babel/preset-env&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^7.11.5&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;babel&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^6.23.0&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;eslint&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^7.11.0&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;eslint-config-standard&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^14.1.1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;eslint-plugin-import&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^2.22.1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;eslint-plugin-node&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^11.1.0&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;eslint-plugin-promise&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^4.2.1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;eslint-plugin-react&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^7.21.4&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;eslint-plugin-standard&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^4.0.1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;nodemon&quot;&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;^2.0.4&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;사이트의 대략적인 구조 및 개형을 생각중이다...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사이트 구조&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1602389201155&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// main
const HOME = '/'
const LOGIN = '/login'
const JOIN = '/join'
const LOGOUT = '/logout'
const SEARCH = '/search'

// User
const USERS = '/users'
const USER_DETAIL = '/:id'
const EDIT_PROFILE = '/edit-profile'
const CHANGE_PASSWORD = '/change-password'

// Post
const POSTS = '/posts'
const POST_DETAIL = '/:id'
const EDIT_POST = '/edit-post'

const routes = {
  home: HOME,
  login: LOGIN,
  join: JOIN,
  logout: LOGOUT,
  search: SEARCH,
  users: USERS,
  userDetail: USER_DETAIL,
  editProfile: EDIT_PROFILE,
  changePassword: CHANGE_PASSWORD,
  posts: POSTS,
  postDetail: POST_DETAIL,
  editPost: EDIT_POST
}

export default routes​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예상되는 개발 순서&lt;/p&gt;
&lt;p&gt;라우터 -&amp;gt; DB 모델 M -&amp;gt; PUG V -&amp;gt; Controller -&amp;gt;DB연동 -&amp;gt; 로그인 인증 -&amp;gt; CSS꾸미기&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/61</guid>
      <comments>https://postbarca.tistory.com/61#entry61comment</comments>
      <pubDate>Sun, 11 Oct 2020 10:29:38 +0900</pubDate>
    </item>
    <item>
      <title>이발병</title>
      <link>https://postbarca.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;- 직접 타이핑을 하지 않고 음성 인식을 통해 작성된 글 입니다. 엉뚱한 단어가 있을 수 있으니 맥락에 맞게 이해해 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;나는 5월 5일부로 정식 이발병이 되었다. 우리 부대는 너무 작은 부대여서 전문적인 보직병(BX, 오버로크, 이발)이 따로 없다. 다 각자의 특기대로 일도 하면서 일종의 겸직을 하는 것이다. 물론 그 중에는 밖에서 해당 일을 해본 사람이 있겠지만,(실제로 있다. 미대 디자인학과를 다녀서 그런지 재봉틀을 20살 초반 남자 치고는 엄청 잘 다룬다.) 대부분은 그렇지는 않은 것 같다. 그렇다면 왜 사람들은 해당 보직을 하는가? 휴가를 모을 수 있는 가점을 주기 때문이다. 이 점이 좋다. 그래서 사람들은 해보지 않은 일이여도 기꺼이 하려고한다. 물론 나도 이발을 당연히 해본 적이 없다. 기껏 해야 전기 면도기로 내 옆 구렛나루나 슬슬 긁거나, 지금 생각이 났는데 고등학생때 학교에서 두발 검사를 한다고 해서 부랴 부랴 그날 아침에 일어나서 화장실에서 내 머리 숯을 친게 다다.(결과는 쥐 파먹은듯이 머리가 울퉁불퉁 해졌고, 검사할때 걸려서 벌점먹었다.) 그리고 평소에 꾸미는거에 관심이 별로 없어서 내가 머리를 자르는 일을 하게 될 줄은 사실 생각치도 못했다. 중고등학교를 다닌 친구나 주변 사람들은 뜬금없다고 생각할지도 모른다. 그럼에도 한다는건, 역시 휴가가 그만큼 좋다는거다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;머리는 다들 생각대로 외모에 큰 부분을 차지한다. 그래서 대부분의 사람들은 머리를 잘 유지하려고 한다. 이 때문에 첫 상번한 이발병은 힘든점이 있다. &quot;머리를 한번도 안 잘라본 사람한테 머리자를 사람?&quot; 나 같아도 안자른다. 이게 문제다. 첫 상번한 이발병에게는 아무도 머리를 자르고 싶어 하지 않는다 라고 생각을 하겠지만 의외는 있다. 사실은 그럴 줄 알고 초반에 머리를 어떻게 하면 많이 잘할 수 있을까를 상번 하기 전부터 고민했다. 그러다 하나 생각해 낸 건 비슷한 시기에 나보다 먼저 이발병을 상번한 동기에게 서로 머리를 잘라 주기로 약속했다. 그런데 예상치 못하게 나한테 순순히 머리를 자르겠다고 한 동기가 있었다. 그래서 머리를 처음으로 잘라 줬다. 실수는 있었지만 나름 잘 잘랐다고 생각했다. 바리깡으로 머리를 미는게 훅훅 자리니까 생각보다 어려웠다. 여하튼 이렇게 한 명을 일단 잘랐다고 생각하니 처음보단 좀 자신이 생겼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이때쯤에 부대 높은 영관급 장교들이 온다는 계획이 잡혔다. 거기다가 신병이 한 명 두 명씩 계속 전입을 오고 있었다. 이때를 노려서 최대한 많은 사람들의 머리를 잘랐다. 내가 머리를 다른 사람들은 선임 후임 신병으로 3분류가 있었다. 먼저 훈련소에서 자른 짧은머리로 가장 난이도가 쉽고 실패해도 뒷감당이 없는(이렇게 말하면 좀 미안하다. 하지만 군대는 군대다) 신병들을 대상으로 잘랐다. 개중에는 우리 부서로 오는 후임도 한 명 있었다. 훈련소에서 자른 머리 다 보니까 모든 부분의 머리길이가 똑같다. 옆 뒷머리만 확실하게 자르면 된다. 다른 사람들과 마찬가지지만 조금 다른 점은 윗머리 숱이 많지 않아서 옆머리나 뒷머리를 자를 때 윗머리를 건들지 않아도 자연스럽게 연결된다는 점이 그렇다. 7명의 신병의 머리를 잘랐다. 대부분 신병이란 나름 긴장한 티를 내기 때문에 여러 가지 질문을 하면서 부드러운 분위기를 만들어냈다. 집이 어디니? 특기가 뭐니? 취미가 뭐니? 학교는? 전공이 뭐야? 몇 년생인지? 여기 사람들 어때? 훈련소에서 재밌는썰 있었니? 등 어느 기수든 팬티만 입고 돌아다니다가 조교에게 걸린 사람은 있었나 보다. 머리는 대부분 쉬운 난이도에 걸맞게 잘 잘랐다. 하지만 옆머리에 작은 스크래치를 내는 작은 수준의 실수들은 처음 두 명에게 했다. 미안해 얘들아. 이걸 제외하고는 전체적으로 무난했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;다음은 그냥 후임. 이 분류를 제일 많이 잘랐다. 대부분은 머리가 짧은 편이 아니다. 난이도가 쉬운 편도 아니고 실패해도 크게 뒷감당 없지만 그래도 머리를 잘못 잘한다는 소문이 나 인식이 생기면 좀 곤란하다. 그래도 이쯤 되면 슬슬 자신감을 갖는다. 나름 많이 잘났다는 생각이 나면서도 다른 선임 이발병이 자른 사람의 머리를 보면 상당하게 깔끔이 잘린 그런 머리를 보고 감탄하며 실력의 차이를 체감하는 그런 때가 있다. 뭐 그런 수준이다. 후임들은 대부분 머리에 각자의 머리 형태와 스타일이 있다. 그 중 가장 쉬운 머리는 당연히 직모다. 정말 머리가 빳빳해서 내 바리깡이 길 가는 대로 다 깔끔하게 자르고 간다. 이런 머리는 자르다 보면 내 손이나 팔 어딘가에 바늘처럼 박혀 있어서 따갑다. 반대로 가장 어려운 머리는 흐물흐물 하고 힘없는 곱슬머리다. 빗을 대고 세워도 나온 부분이 축 처져 있으면 바리깡이 지나가도 이상한 소리를 내면서 잘 잘리지 않고 지나간다. 어쩔 수 없이 가위를 쓰게 된다. 가위로 하는 것도 나쁘지 않지만 쉽지 않다. 이 부분에서도 조금 실수가 있었다. 숱을 너무 많이 친다던가 앞머리를 너무 많이 자르던가. 이 모든 실수는 한 사람한테 일어났는데 내 동기였다. 처음에는이 친구가 내가 너무 머리를 많이 잘났다면 화를 냈지만 이내 어쩔 수 없다며 한 이틀 정도 우울해 있었다 나도 이 친구를 보면 너무 미안했다. 머리를 조심히 잘 잘라겠다고 다짐한 시간이었다. 또 성형외과 의사들은 진짜 수술 잘못하면 엄청 원망 들으면서 살 것 같다는 생각이 들었다. 왜 돈을 잘 버는 줄 알 것 같다. 그 친구는 이틀 지나니까 다시 기분이 원래대로 돌아왔다. 이 친구를 제외하면 전체적으로 내 생각에는 잘 자른 편이었다. 개 중에 한 명은 내가 머리를 이렇게 자를 줄 몰랐다고 해서 당황해 물어보니까 상번한지 얼마 안 된 거 치고 너무 잘 잘랐다고 해서 기분이 좋았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;마지막 분류는 선임인데 머리가 대체로 긴 편이다. 난이도도 어렵고 실패하면 뒷감당이 크다. 그리고 비교적 얼마 안 된 나한테 머리를 자르러 오는 선임은 많지 않았다. 이미 머리를 자르는 잘 자르는 선임 이발병이 있으니까 뭐 나한테 오지 않는다. 머리에 신경 안 쓴다는 사람들은 와서 잘랐지만 그래도 과연 신경을 안 쓸까 ^^ ? 어느 정도 부담이 되는 것이 사실이기 때문에 처음엔 거절할까 생각하다가 언제까지 거절만 해서는 실력이 안 늘 것 같으니까 정말 정말 집중해서 잘랐다. 집중이 통한건지 실수를 하나도 안 했다. 잘 자른다는 말도 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그래서 지금 5월 20일까지 총 27명을 잘랐다. 가점 15점 당 휴가 1일. 한 명 머리자르는데 0.5점. 30명을 자르면 휴가 1일이다. 한달이 안 돼서 거의 휴가 하루를 벌었다. 가점도 가점이지만, 그걸 벗어나서 나는 머리를 자르는 새로운 경험을해보는 부분과 누군가의 머리를 자르면서 뭔가 만들어낸 그 결과물이 좋다. 그리고 머리가 마음에 들면 더 좋다 그런 부분이 머리를 자르는데 있어서 약간의 중독이 되는 느낌이다. 그만큼 재미가 있다. 고등학생 때 같은 반 있던 친구가 자기는 미용사가 되길 바란다고 한 적이 있다. 나는 속으로 미용사? 미용사는 대부분 자영업을 하니까 돈 벌기 힘들지 않을까? 왜 다른 좋은 직업 놔두고 미용사? 라는 단순한 생각을 한 적이 있다. 지금 와서 생각해 보니까 너무 나의 기준에서 생각을 하는 게 아닌가 라는 생각이 든다. 마치 내가 코딩을 통해서 무언가 실행되고 돌아가는 걸 보면 즐거워 하듯이 그 친구도 미용을 하면서 머리를 꾸민 결과물을 만들어내는 일을 즐겼던 것이다. 근데 잠깐 지금 또 생각을 해 보니까 이건 경험을 통해 바뀐 내 기준으로 생각한 것 밖에 안 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;여기서 생각을 하는 경우는 두 가지다. 첫 번째, 내 기준(대부분 이럴 것이다)은 경험을 통해서 만들어 진다. 그래서 경험을 넓혀서 나의 기준을 점점 더 정확하게 만들어간다. 두 번째, 위에서 말한대로 아무리 경험을 넓혀 본들 세상의 모든 경험을 할 수 없으므로 내 기준은 항상 부정확할 것이다. 그러면 나는 내 기준을 믿지말아야 하고 또 그러려면 무엇도 판단해서는 안 된다. 하지만 살면서 무엇도 판단을 하지 않으면서 살 수는 없다. 내가 잘 모르는 부분은 최대한 많은 경험을 통해서 알아 가는게 중요하다는 생각을 해 본다.&lt;/p&gt;</description>
      <category>생각</category>
      <category>이발병</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/59</guid>
      <comments>https://postbarca.tistory.com/59#entry59comment</comments>
      <pubDate>Thu, 21 May 2020 10:47:33 +0900</pubDate>
    </item>
    <item>
      <title>[PS?] 루미큐브(Rummikub)의 경우의 수를 컴퓨터로 계산해 보자</title>
      <link>https://postbarca.tistory.com/58</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://namu.wiki/w/%EB%A3%A8%EB%AF%B8%ED%81%90%EB%B8%8C&quot;&gt;https://namu.wiki/w/%EB%A3%A8%EB%AF%B8%ED%81%90%EB%B8%8C&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589631017231&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;루미큐브 - 나무위키&quot; data-og-description=&quot;여기서는 루미큐브의 설명서에 적힌 Sabra 룰을 바탕으로 기록되었습니다. American 룰은 Sabra 룰과 같으나 12-13-1로도 할 수 있다는 차이점이 있다. 루미큐브는 1부터 13까지 숫자가 적혀있는 4가지 ��&quot; data-og-host=&quot;namu.wiki&quot; data-og-source-url=&quot;https://namu.wiki/w/%EB%A3%A8%EB%AF%B8%ED%81%90%EB%B8%8C&quot; data-og-url=&quot;https://namu.wiki/w/%EB%A3%A8%EB%AF%B8%ED%81%90%EB%B8%8C&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EB%A3%A8%EB%AF%B8%ED%81%90%EB%B8%8C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://namu.wiki/w/%EB%A3%A8%EB%AF%B8%ED%81%90%EB%B8%8C&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;루미큐브 - 나무위키&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;여기서는 루미큐브의 설명서에 적힌 Sabra 룰을 바탕으로 기록되었습니다. American 룰은 Sabra 룰과 같으나 12-13-1로도 할 수 있다는 차이점이 있다. 루미큐브는 1부터 13까지 숫자가 적혀있는 4가지 ��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;namu.wiki&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;군대에 있으면서 코로나로 휴가도 못나가는 이 상황에서 우리들이 할 수 있는 건 보드게임 같은 시간 보내기 류 들이다. 정식 룰로 하지는 않는 것 같다. 그래서 아무튼 자주 루미큐브를 하는데 계속 내 마음대로 안되고 지는 것 같아서 상당히 화가 났다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;그래서 이 억울함을 해결하기 위하여 어떻게든 생각을 해 보았는데, 루미큐브에 있어서 가장 중요한 것은 조합을 생각해 내는 것 이라고 생각한다. 그런데 하다 보니까 이게 삼성 A형 기출을 풀다 보니까 최근에 푼 문제들(색종이 겹치기라든가, 야구 문제라든가)이랑 상당한 유사성(완전탐색인데 구현을 요하는 완탐)이 있는 것 같아서 한 3시간 정도 생각해서 코드를 짜 보았다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;그리고 완벽하게 작동하는걸 볼 수 있었다! (PS를 실제로 써먹을 줄이야) 하지만 단점이라고 하자면, 실제 게임에서 할때는 무슨 카드가 몇개 있는지 일일히 세서 노트에 써가면서 기록하고 또 그걸 매 턴마다 핸드폰에서 repl.it로 INPUT값을 바꿔주며 실행시키니까 내 턴에서 시간이 너무 오래 걸린다는 단점이 있었다. 또, 프로그램을 실제로 돌리는 데에도 시간이 은근 오래 걸렸다. 탐색 시간이 오래 걸리면 걸릴수록 게임을 끝낼 수 있다는 기대감은 커지지만(가능 하니까 끝까지 계산하겠지? ㅋㅋ), 가능한 조합이 없다고 뜨면 좀 실망스럽다. 장점은 끝낼 수 있는데 모르고 못 끝내서 넘어가는 경우가 없다는것. 적어도 억울하진 않다. (예상치 못한 원턴킬)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 해결 전략&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;입/출력은 깃헙에 잘 나와있습니다. 근데 조커는 고려 안함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;일단 DFS()를 활용한 완전 탐색인데, 진짜 다른 완전 탐색이랑 비슷하다. 다만 어려웠던 점은 구현하는 방법이 제일 어려웠다. 탐색을 하는 우선 순위는 색은 검 빨 노 파 순(색깔은 임의 지정)으로, 숫자는 오름차순으로 정했다. 2개가 있을 수 있기 때문에 탐색 시작점은 매개변수로 받지 않고 시작 할때마다 계속 새로 찾아서 지정했다.(특정 카드를 했다고 지나 갔는데 그 카드가 또 있을 수 있기 때문)&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;그리고 그 뒤로는 간단하다. 조합에는 2가지가 있다. 같은 색 오름차순 나열(3개 이상)과 같은 숫자 다른색 나열(3개 이상) 으로 구분해서 각각 조합을 구하고 진행하면 된다. 기저 경우(Base Case)는 남은 카드가 있는지 확인하고 없으면 하나의 조합 경우의 수가 완성이 된 것이다. 그래서 조합 출력으로 끝. 이런 식으로 반복을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;조커를 제외한 루미큐브 모든 카드(각 숫자, 색 2개씩 13 * 4 * 2 = 총 104개)의 경우의 수는 6,115,406가지이다.(사실 계산하다가 중간에 자리를 비웠다가 다시 봐서 정확하게 계산 한건지 아니면 중간에 멈춘건지는 모르겠음) 계산하는데 생각보다 오래 걸렸는데, 이걸 최적화를 하면? 천재인듯;;(설마 완탐 말고 다른게?)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/december-ok/Rummikub&quot;&gt;https://github.com/december-ok/Rummikub&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589633010563&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;december-ok/Rummikub&quot; data-og-description=&quot;Compute Rummikub's available combinations. Contribute to december-ok/Rummikub development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/december-ok/Rummikub&quot; data-og-url=&quot;https://github.com/december-ok/Rummikub&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5vUp4/hyF34H5z7w/yKqRZk8YhQRbJyEoKZf4CK/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://github.com/december-ok/Rummikub&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/december-ok/Rummikub&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5vUp4/hyF34H5z7w/yKqRZk8YhQRbJyEoKZf4CK/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;december-ok/Rummikub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Compute Rummikub's available combinations. Contribute to december-ok/Rummikub development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/58</guid>
      <comments>https://postbarca.tistory.com/58#entry58comment</comments>
      <pubDate>Sat, 16 May 2020 22:00:27 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 17281 ⚾(삼성 A형 기출)</title>
      <link>https://postbarca.tistory.com/56</link>
      <description>&lt;p&gt;백준 17281 ⚾(야구)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17281&quot;&gt;https://www.acmicpc.net/problem/17281&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589457552420&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;17281번: ⚾&quot; data-og-description=&quot;⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종��&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/17281&quot; data-og-url=&quot;https://www.acmicpc.net/problem/17281&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnEe20/hyF3VCDe0c/k8SLcKzHS2ScNxYT4Cshek/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17281&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/17281&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnEe20/hyF3VCDe0c/k8SLcKzHS2ScNxYT4Cshek/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;17281번: ⚾&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;요즘 삼성 A형 기출을 풀어보고 있다.&lt;/p&gt;
&lt;p&gt;코로나 끝나면 외출 끊어서 삼성 코테 보러 갈꺼임.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;문제 이름이 그림이다. 특이함.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;풀이&lt;/p&gt;
&lt;p&gt;가능한 선수 타자 배치를 만든다. p_list 배열에다가 만듦. 여기서 1번 선수는 무조건 4번 타자이다.&lt;/p&gt;
&lt;p&gt;아마 처음은 2 3 4 1 5 6 7 8 9 일꺼고 이런식으로 재귀를 통하여 모든 경우의 수를 구현한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 후 각 경우에 대하여 야구 경기를 시뮬레이션 한다. 그리고 최대값 갱신 끝.&lt;/p&gt;
&lt;p&gt;경기 시뮬 부분을 좀 더 잘 짤 수 있었을것 같은데 생각이 안난다. 하드코딩 한 것 같은데 아닌 것 같기도 하고.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;삼성 A형은 풀다 보면 유형이 어느정도 정해진 것 같다. DP처럼 기록하기거나, 각 경우에 대해 생각하고 구현하기 등등&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;색종이 문제도 이 유형과 비슷한 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17136&quot;&gt;https://www.acmicpc.net/problem/17136&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589457630804&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;17136번: 색종이 붙이기&quot; data-og-description=&quot;&amp;lt;그림 1&amp;gt;과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는&amp;nbsp;1&amp;times;1, 2&amp;times;2, 3&amp;times;3, 4&amp;times;4, 5&amp;times;5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. &amp;lt;그림 1&amp;gt; 색종이를 크��&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/17136&quot; data-og-url=&quot;https://www.acmicpc.net/problem/17136&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bJ1yfl/hyF3RGZWF0/RuE1bV1zKiB5xxGqlWaF20/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b2GP0m/hyF3040viz/jKlX2al7xT7xrUbmST4QyK/img.png?width=1943&amp;amp;height=604&amp;amp;face=0_0_1943_604&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17136&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/17136&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bJ1yfl/hyF3RGZWF0/RuE1bV1zKiB5xxGqlWaF20/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b2GP0m/hyF3040viz/jKlX2al7xT7xrUbmST4QyK/img.png?width=1943&amp;amp;height=604&amp;amp;face=0_0_1943_604');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;17136번: 색종이 붙이기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;lt;그림 1&amp;gt;과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는&amp;nbsp;1&amp;times;1, 2&amp;times;2, 3&amp;times;3, 4&amp;times;4, 5&amp;times;5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. &amp;lt;그림 1&amp;gt; 색종이를 크��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;코드&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589457311533&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
int N;
int player[52][10];
int p_list[10];
bool isin[10];
int ans;

int gethit(int inning, int num){
    return player[inning][p_list[num]];
}

void simulate(){
    int score = 0;
    int p_num = 1;
    for(int i=1;i&amp;lt;=N;i++){
        bool base[4]={0,0,0,0};
        int out = 0;
        while(out&amp;lt;3){
            if(p_num==10) p_num=1;
            if(gethit(i, p_num) == 0){ 
                out++;
            }
            else if(gethit(i, p_num) == 1){
                if(base[3]){
                    base[3]=0; score++;
                }
                if(base[2]){
                    base[3]=1; base[2]=0;
                }
                if(base[1]){
                    base[2]=1; base[1]=0;
                }
                base[1]=1;
            }
            else if(gethit(i, p_num) == 2){
                if(base[3]){
                    base[3]=0; score++;
                }
                if(base[2]){
                    base[2]=0; score++;
                }
                if(base[1]){
                    base[3]=1; base[1]=0;
                }
                base[2]=1;
            }
            else if(gethit(i, p_num) == 3){
                if(base[3]){
                    base[3]=0; score++;
                }
                if(base[2]){
                    base[2]=0; score++;
                }
                if(base[1]){
                    base[1]=0; score++;
                }
                base[3]=1;
            }
            else if(gethit(i, p_num) == 4){
                if(base[3]){
                    base[3]=0; score++;
                }
                if(base[2]){
                    base[2]=0; score++;
                }
                if(base[1]){
                    base[1]=0; score++;
                }
                score++;
            }
            p_num++;
        }
    }
    //cout&amp;lt;&amp;lt;score&amp;lt;&amp;lt;'\n';
    ans = max(ans, score);
}

void dfs(int idx, int n){
    if(idx==4){
        dfs(idx+1,n);
        return;
    }
    p_list[idx]=n;
    isin[n]=1;
    if(idx == 9){
        simulate();
    }
    else{
        for(int i=2;i&amp;lt;10;i++){
            if(!isin[i]){
                dfs(idx+1,i);
            }
        }
    }
    isin[n]=0;
}

void solve(){
    for(int i=2;i&amp;lt;10;i++){
        dfs(1,i);
    }
}

int main(){
    //1번부터 9번까지 총 9명
    ans = 0;
    cin&amp;gt;&amp;gt;N;
    for(int i=1;i&amp;lt;=N;i++){
        for(int j=1;j&amp;lt;=9;j++){
            cin&amp;gt;&amp;gt;player[i][j];
        }
    }
    p_list[4]=1; isin[1]=1;
    
    solve();
    cout&amp;lt;&amp;lt;ans;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/56</guid>
      <comments>https://postbarca.tistory.com/56#entry56comment</comments>
      <pubDate>Thu, 14 May 2020 21:01:25 +0900</pubDate>
    </item>
    <item>
      <title>[Python] collections.deque 정리</title>
      <link>https://postbarca.tistory.com/50</link>
      <description>&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q=collections.deque([])&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q.append(item) 오른쪽에 추가함&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q.appendleft(item) 왼쪽에 추가함&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q.popleft() 왼쪽 가져오고 제거함&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q.clear() 다지움&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q.insert(i,x) i위치에 x넣음&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q.pop() 오른쪽 가져오고 제거함&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q.remove(item) 해당값 제거&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;q.reverse()&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/50</guid>
      <comments>https://postbarca.tistory.com/50#entry50comment</comments>
      <pubDate>Sat, 28 Sep 2019 19:15:33 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 15647 로스팅하는 엠마도 바리스타입니다</title>
      <link>https://postbarca.tistory.com/49</link>
      <description>&lt;h2&gt;백준 15647 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15647&quot;&gt;https://www.acmicpc.net/problem/15647&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1568869896562&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15647&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/15647&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bViZ0H/hyCTqz95XP/XA8DQZKLxfiUmpU9HToZH0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;15647번: 로스팅하는 엠마도 바리스타입니다&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;문제 로스팅하는 엠마는 바리스타입니다. 엠마는 N개의 정점을 가진 트리 형태의 농장 연결 시스템을 구축한 상태입니다. 트리의 정점은 1번부터 N번까지 번호가 매겨져 있습니다.&amp;nbsp;각각의 간선은 그 농장에서 다른 농장으로 이동할 수 있음을 뜻하며, 간선의 가중치는 이동 거리를 뜻합니다. 엠마는 한 개의 농장을 정해 농장 옆에 로스팅 시설을 마련하려고 합니다. 이때, 다른 농장에서 로스팅 시설까지의 거리의 합들을 알아야, 효율적으로 로스팅 시설의 위치를 정할 수&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;상당히 오래전에 DFS를 N번 도는걸 생각을 했지만 그렇게 해서는 통과가 되지 않는다는게 자명한 사실이므로 그냥 포기한 상태로 그렇게 묻어두다가 최근 앉아서 오래동안 생각할 시간을 얻게 되서 하루종일 수첩을 들고 생각을 해봤음.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 DFS를 돌리는 횟수를 줄여야 된다는걸 중점으로 생각을 하던 중, 한 노드의 거리(가중치)합을 알게 된다면, 인접한 노드는 간단한 식을 통해서 구할 수 있다는 사실을 발견하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;blob&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CvvBq/btqymL5cop8/2JkaUkVDWLRNkbUm12IxN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CvvBq/btqymL5cop8/2JkaUkVDWLRNkbUm12IxN0/img.png&quot; data-alt=&quot;트리를 간단히 정리해 다음과 같은 모양이 있다고 하자&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CvvBq/btqymL5cop8/2JkaUkVDWLRNkbUm12IxN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCvvBq%2FbtqymL5cop8%2F2JkaUkVDWLRNkbUm12IxN0%2Fimg.png&quot; data-filename=&quot;blob&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;트리를 간단히 정리해 다음과 같은 모양이 있다고 하자&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림중 A노드의 거리 합을 알고 있다고 하고 그 값을 Sum(A), B노드의 경우는 Sum(B)라고 하고 그 값을 구해보자.&lt;/p&gt;
&lt;p&gt;여기서 A와 B노드의 자신을 포함한 자식 노드들의 수를 D(A), D(B)라고 해보자.&lt;/p&gt;
&lt;p&gt;그러면 다음과 같은 식을 얻을 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Sum(B) = Sum(A) - w*( D(B) - D(A) )&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;그런데 여기서 D(A) = N - D(B) 로 대입할 수 있다. 그러면 식을 정리해서&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Sum(B) = Sum(A) - w*( 2 * D(B) - N )&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;을 얻을 수 있다. 그러면 DFS를 돌리는 횟수를 크게 줄일 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;본인은 DFS를 총 3번 돌렸는데, 한곳을 기준으로 자식노드의 수를 확인할때 한번, 가중치의 합을 구할때 한번, 마지막으로 해당 식을 이용해 각 노드별로 가중치의 합 계산해줄때 한번했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;오버플로우이므로 자료형은 long long int&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;더 줄이고 다듬을 수 있을거같은데&amp;nbsp;나중에 해봐야겠음 &lt;s&gt;휴가중이라 시간아까워&lt;/s&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;코드&lt;/h2&gt;
&lt;pre id=&quot;code_1568871318038&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;vector&amp;gt;
using namespace std;

struct edge
{
	int v, w, des;
};

int N, visit[300001];
long long W[300001];
vector &amp;lt;edge&amp;gt; con[300001];

void visit_reset() {
	for (int i = 0; i &amp;lt; 300001; i++)
		visit[i] = 0;
}

int DFS_d(int v) {
	int result = 0;
	visit[v] = 1;
	if (con[v].size() == 1 &amp;amp;&amp;amp; visit[con[v][0].v] == 1) {
		//막다른 길
		return 0;
	}
	else {
		for (int i = 0; i &amp;lt; con[v].size(); i++) {
			edge&amp;amp; t = con[v][i];
			if (!visit[t.v]) {
				t.des += 1;
				t.des += DFS_d(t.v);
				result += t.des;
			}
		}
		return result;
	}
}

long long int DFS_w(int v) {
	long long int result = 0;
	visit[v] = 1;
	if (con[v].size() == 1 &amp;amp;&amp;amp; visit[con[v][0].v] == 1) {
		//막다른 길
		return 0;
	}
	else {
		for (int i = 0; i &amp;lt; con[v].size(); i++) {
			edge t = con[v][i];
			if (!visit[t.v]) {
				result += t.w*t.des;
				result += DFS_w(t.v);
			}
		}
		return result;
	}
}

int DFS_Wset(int v) {
	visit[v] = 1;
	if (con[v].size() == 1 &amp;amp;&amp;amp; visit[con[v][0].v] == 1) {
		//막다른 길
		return 0;
	}
	else {
		for (int i = 0; i &amp;lt; con[v].size(); i++) {
			edge t = con[v][i];
			if (!visit[t.v]) {
				W[t.v] = W[v] - t.w*(2 * t.des - N);
				DFS_Wset(t.v);
			}
		}
		return 0;
	}
}

int main() {
//	freopen(&quot;input.txt&quot;, &quot;r&quot;, stdin);

	cin &amp;gt;&amp;gt; N;
	for (int i = 1; i &amp;lt; N; i++) {
		int u, v, w;
		scanf(&quot;%d %d %d&quot;, &amp;amp;u, &amp;amp;v, &amp;amp;w);
		con[u].push_back({ v,w,0 });
		con[v].push_back({ u,w,0 });
	}

	DFS_d(1);
	visit_reset();
	W[1] = DFS_w(1);
	visit_reset();
	DFS_Wset(1);

	for (int i = 1; i &amp;lt;= N; i++) {
		printf(&quot;%lld\n&quot;, W[i]);
	}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/49</guid>
      <comments>https://postbarca.tistory.com/49#entry49comment</comments>
      <pubDate>Thu, 19 Sep 2019 14:39:40 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 3187 양치기 꿍</title>
      <link>https://postbarca.tistory.com/48</link>
      <description>&lt;h2&gt;링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3187&quot;&gt;https://www.acmicpc.net/problem/3187&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1568509848785&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3187&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/3187&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHGRE4/hyCP3kCUyA/sP93jvqB3KQOyqxDOAJcOk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;3187번: 양치기 꿍&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;문제 양치기 꿍은 맨날 늑대가 나타났다고 마을 사람들을 속였지만 이젠 더이상 마을 사람들이 속지 않는다. 화가 난 꿍은 복수심에 불타 아예 늑대들을 양들이 있는 울타리안에 마구 집어넣어 양들을 잡아먹게 했다. 하지만 양들은 보통 양들이 아니다. 같은 울타리 영역 안의 양들의 숫자가 늑대의 숫자보다&amp;nbsp;더 많을 경우 늑대가 전부 잡아먹힌다. 물론 그 외의 경우는 양이 전부 잡아먹히겠지만 말이다. 꿍은 워낙 똑똑했기 때문에 이들의 결과는 이미 알고있다. 만약 빈&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;구역별로 BFS를 돌리며 카운팅을 해줌!&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre id=&quot;code_1568509914562&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;queue&amp;gt;
using namespace std;

int r, c, r_v_c, r_k_c, t_v_c, t_k_c;
int xl[] = {0,0,-1,1};
int yl[] = {1,-1,0,0};
char map[250][250], visit[250][250];
queue &amp;lt; pair&amp;lt;int, int&amp;gt; &amp;gt; q;

int check(int x, int y){
	if(0&amp;lt;=x&amp;amp;&amp;amp;x&amp;lt;r&amp;amp;&amp;amp;0&amp;lt;=y&amp;amp;&amp;amp;y&amp;lt;c)
		return 1;
	return 0;
}

int main() {
	//freopen(&quot;input.txt&quot;,&quot;r&quot;,stdin);
	
	cin&amp;gt;&amp;gt;r&amp;gt;&amp;gt;c;
	getchar();
	for(int i=0;i&amp;lt;r;i++){
		for(int j=0;j&amp;lt;c;j++){
			scanf(&quot;%c&quot;,&amp;amp;map[i][j]);
		}
		getchar();
	}
			
			
	for(int i=0;i&amp;lt;r;i++){
		for(int j=0;j&amp;lt;c;j++){
			if(map[i][j]!='#'&amp;amp;&amp;amp;!visit[i][j]){
				t_v_c=t_k_c=0;
				q.push({i,j});
				visit[i][j] = 1;
				while(!q.empty()){
					int x = q.front().first;
					int y = q.front().second;
					q.pop();
					
					if(map[x][y]=='v')
						t_v_c++;
					if(map[x][y]=='k')
						t_k_c++;
					
					for(int ii=0;ii&amp;lt;4;ii++){
						int nx = x+xl[ii];
						int ny = y+yl[ii];
						if(check(nx,ny)&amp;amp;&amp;amp;map[nx][ny]!='#'&amp;amp;&amp;amp;!visit[nx][ny]){
							visit[nx][ny]=1;
							q.push({nx,ny});
						}
					}
				}
				if(t_v_c&amp;lt;t_k_c){
					r_k_c+=t_k_c;
				}
				else{
					r_v_c+=t_v_c;
				}
			}
		}
	}
	cout&amp;lt;&amp;lt;r_k_c&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;r_v_c;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/48</guid>
      <comments>https://postbarca.tistory.com/48#entry48comment</comments>
      <pubDate>Sun, 15 Sep 2019 10:12:07 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 14613 너의 티어는?</title>
      <link>https://postbarca.tistory.com/47</link>
      <description>&lt;h2&gt;링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14613&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/14613&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1568505253822&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14613&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/14613&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biW6Fa/hyCP6VTEAc/nbKKcsKa1iGVIiKNUExKsK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;14613번: 너의 티어는?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;규환이는 최근에 오버워치에 흠뻑 빠졌다. 그의 랭크 점수는 현재 2000점이며, 그는 오늘 랭크게임을 20번 할 예정이다. 규환이는 게임을 시작하기 전 자신의 그동안 승률을 통해 자신이 브론즈, 실버, 골드, 플래티넘, 다이아에 갈 확률이 몇 퍼센트인지 궁금해졌다. 게임을 이길 경우 얻는 포인트는 50 Point, 질 경우 잃는 포인트도 50 Point, 비길 경우 Point의 변화는 없다. 랭크 점수에 따른 티어는 아래와 같다. 브론즈:&amp;nbsp;1000~149&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;조합(!)을 이용하여 확률을 계산하려 했으나. 오버플로우 문제를 생각안하고 (안푼지 오래되서 전혀 생각을 못함) 그냥 풀었다가 다시 정신을 차리고 DP로 풀었음.&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre id=&quot;code_1568505491874&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main()
{
	//freopen(&quot;input.txt&quot;,&quot;r&quot;,stdin);
	double w_r, l_r, d_r;
	double b, s, g, p, d;
	double dp[21][41];
	int score;
	b = s = g = p = d = 0.0;
	scanf(&quot;%lf %lf %lf&quot;, &amp;amp;w_r, &amp;amp;l_r, &amp;amp;d_r);
	for(int i=0; i&amp;lt;=40; i++){
		dp[0][i]=0;
	}
	dp[0][20]=1;
	//i = played game
	//j = rank
	for(int i = 1; i &amp;lt;= 20; i++){
		for(int j = 0; j &amp;lt;= 40; j++){
			if(j==0)
				dp[i][j] = (dp[i-1][j+1]*l_r);
			else if(j==40)
				dp[i][j] = (dp[i-1][j-1]*w_r);
			else
				dp[i][j] =
					(dp[i-1][j+1] * l_r) +
					(dp[i-1][j] * d_r) +
					(dp[i-1][j-1] * w_r);
		}
	}
	
	for(int i = 0; i &amp;lt; 10; i++)
		b += dp[20][i];
	for(int i=10; i &amp;lt; 20; i++)
		s += dp[20][i];
	for(int i=20; i &amp;lt; 30; i++)
		g += dp[20][i];
	for(int i=30; i &amp;lt; 40; i++)
		p += dp[20][i];
	d = dp[20][40];
	
	printf(&quot;%.8lf\n%.8lf\n%.8lf\n%.8lf\n%.8lf\n&quot;,b,s,g,p,d);
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/47</guid>
      <comments>https://postbarca.tistory.com/47#entry47comment</comments>
      <pubDate>Sun, 15 Sep 2019 08:58:24 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 1038 감소하는 수</title>
      <link>https://postbarca.tistory.com/46</link>
      <description>&lt;h2&gt;백준 1038 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1038&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1038&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1568504702979&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1038&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/1038&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LjUAe/hyCP4cHnsO/IKI1GyiWusg8v3dL4QxsA0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;1038번: 감소하는 수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 출력하는 프로그램을 작성하시오. 0은 0번째 감소하는 수이고, 1은 1번째 감소하는 수이다. 만약 N번째 감소하는 수가 없다면 -1을 출력한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;처음엔 DP를 이용하여 규칙성을 발견해서 풀려고 시도해 특정 구간까지 DP로 도달해서 브루트포스로 도달하는 방법을 시도해 보았지만 시간초과가 났고, 생각하던중 큐를 이용하여 푸는 방법을 생각해 내서 풀었음.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들어 763이라는 수를 큐에서 꺼냈으면 다시 큐에다 7630, 7631, 7632를 넣는 식으로 풀었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가장 마지막수는 오버플로우가 나서 따로 출력해 주었음.&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre id=&quot;code_1568504934425&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;queue&amp;gt;
using namespace std;

int main() {
	//freopen(&quot;input.txt&quot;,&quot;r&quot;,stdin);
	
	int count, input, now_value;
	queue &amp;lt;int&amp;gt; q;
	count = 0;
	cin&amp;gt;&amp;gt;input;
	
	for(int i=0;i&amp;lt;10;i++){
		q.push(i);
	}
	
	if(input == 1022){
		cout&amp;lt;&amp;lt;9876543210;
		return 0;
	}
	else if(input&amp;gt;1022){
		cout&amp;lt;&amp;lt;-1;
		return 0;
	}
	
	while(1){
		now_value = q.front();
		q.pop();
		if(count++ == input){
			cout &amp;lt;&amp;lt; now_value;
			break;
		}
		for(int i = 0; i &amp;lt; now_value%10; i++){
			q.push(now_value*10 + i);
		}
	}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/46</guid>
      <comments>https://postbarca.tistory.com/46#entry46comment</comments>
      <pubDate>Sun, 15 Sep 2019 08:49:09 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 17141 연구소 2</title>
      <link>https://postbarca.tistory.com/45</link>
      <description>&lt;h2&gt;백준 17141 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17141&quot;&gt;https://www.acmicpc.net/problem/17141&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1568358059668&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17141&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/17141&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cRgWEz/hyCP7fgce3/OhoE6xzhMyWF5yqCbwNiA1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;17141번: 연구소 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;인체에 치명적인 바이러스를 연구하던 연구소에&amp;nbsp;승원이가 침입했고, 바이러스를 유출하려고 한다. 승원이는 연구소의 특정 위치에 바이러스 M개를 놓을 것이고, 승원이의 신호와 동시에 바이러스는 퍼지게 된다. 연구소는 크기가 N&amp;times;N인 정사각형으로 나타낼 수 있으며, 정사각형은 1&amp;times;1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 빈 칸은 바이러스를 놓을 수 있는 칸이다. 바이러스는 상하좌우로&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;순열을 이용해서 바이러스를 배치하는 경우의 수를 갈라주고 따지고 각각의 경우에서 BFS를 돌려주면 끝?(아마) 순열은 DFS로 구했음.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자대에 오고 사지방에서 처음으로 풀어보는 문제였음. 거의 4개월만에 푸는거라 감각을 다시 익히고 하는데 힘들었음. (Dev 말고 VS 쓸 수 있으면 좋겠다) 동기에게 백준을 알려주고 몇몇 문제를 추천해 주었다. 이상 전달끝.&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre id=&quot;code_1568358143326&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;queue&amp;gt;
using namespace std;

int n,m,o_map[52][52], t_map[52][52],v_avail[10][2], v_count;
int v_select[10][2];
int min2=0x7fffffff, cannot_reach;
int xl[] = {0,0,-1,1};
int yl[] = {1,-1,0,0};
queue &amp;lt; pair&amp;lt;int,int&amp;gt; &amp;gt; q;

//room where never visited is marked -1
//wall is makred -2
//virus start point is 0

int boundary_check(int x, int y){
	if(1&amp;lt;=x&amp;amp;&amp;amp;x&amp;lt;=n&amp;amp;&amp;amp;1&amp;lt;=y&amp;amp;&amp;amp;y&amp;lt;=n&amp;amp;&amp;amp;t_map[x][y]==-1)
		return 1;
	else
		return 0;
}

void set_tempmap(){
	for(int i=1;i&amp;lt;=n;i++){
		for(int j=1;j&amp;lt;=n;j++){
			t_map[i][j]=o_map[i][j];
		}
	}
	for(int i=0;i&amp;lt;m;i++){
		t_map[v_select[i][0]][v_select[i][1]]=0;
		q.push({v_select[i][0],v_select[i][1]});
	}
}

void sim_start(){
	int x, y, nx, ny, max, reach;
	reach = 0;
	max=0;
	while(!q.empty()){
		x=q.front().first;
		y=q.front().second;
		q.pop();
		for(int i=0;i&amp;lt;4;i++){
			nx=x+xl[i];
			ny=y+yl[i];
			if(boundary_check(nx,ny)){
				t_map[nx][ny]=t_map[x][y]+1;
				max = t_map[nx][ny]&amp;gt;max?t_map[nx][ny]:max;
				q.push({nx,ny});
			}
		}
	}
	//check if there is place never visited
	for(int i=1;i&amp;lt;=n;i++){
		for(int j=1;j&amp;lt;=n;j++){
			if(t_map[i][j] == -1){
				max = 0x7fffffff;
			}
		}
	}
	min2 = max&amp;lt;min2?max:min2;
}

void DFS(int idx, int cnt){
	if(cnt == m){
		set_tempmap();
		sim_start();
	}
	else{
		if(idx==v_count){
			return;
		}
		else{
			DFS(idx+1,cnt);
			v_select[cnt][0]=v_avail[idx][0];
			v_select[cnt][1]=v_avail[idx][1];
			DFS(idx+1,cnt+1);
		}
	}
}

int main() {
	//freopen(&quot;input.txt&quot;,&quot;r&quot;,stdin);
	
	scanf(&quot;%d %d&quot;,&amp;amp;n,&amp;amp;m);
	
	for(int i=1;i&amp;lt;=n;i++){
		for(int j=1;j&amp;lt;=n;j++){
			scanf(&quot;%d&quot;, &amp;amp;o_map[i][j]);
			if(o_map[i][j] == 0){
				o_map[i][j] = -1;
			}
			else if(o_map[i][j] == 1){
				o_map[i][j] = -2;
			}
			else if(o_map[i][j] == 2){
				v_avail[v_count][0]=i;
				v_avail[v_count++][1]=j;
				o_map[i][j] = -1;
			}
		}
	}
	
	DFS(0,0);
	
	if(min2==0x7fffffff){
		cout&amp;lt;&amp;lt;-1;
	}
	else{
		cout&amp;lt;&amp;lt;min2;
	}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/45</guid>
      <comments>https://postbarca.tistory.com/45#entry45comment</comments>
      <pubDate>Fri, 13 Sep 2019 16:04:50 +0900</pubDate>
    </item>
    <item>
      <title>공군 훈련소 + 특기학교(군수 2학교 - 전력설비) 후기</title>
      <link>https://postbarca.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;나는 802기로 공군 기훈단을 수료했다. 특기는 전력설비 특기였다. 경험을 간단히 적어본다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;훈련소&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;가장 기억남는 첫날&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;훈련소에 가기 전에는 기억이 안난다. 차를 타고 기훈단 안으로 갔다. 부모님들 다 가고 몇대대인지를 조교들이 알려주었다. 나는 2대대였다. 4대대에 들은게 없어서 좋은건지 잘 몰랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;어느 대대에 가는지 알려주고 강당에 가서 인성검사? 이런거를 했다. 중요하진 않았다. 그냥 OMR마킹 다 하고 밥먹으러 갔다. 생각보다 배가 고파서 그랬는지 점심에 불고기였는데 맛있게 먹은 기억이 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그리고 2대대로 가서 옷 체련복으로 갈아입고 잠을 잔 것 같다. 바뀐 환경에 정신이 없었다. 이날은 자기 전에 나혼자 좀 울었던 기억이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이후 1주일동안 예비 훈련병으로 불리우다 그 다음부터 진짜 훈련병이 된다. 사실 돌아오는 금요일까지는 집에 갈 기회를 준다. 솔직히 말하면 너무 집에 가고싶었는데 주변에 잘 버티고 있어서 그덕에 안간 것 같다.(시간적으로도 손해다)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입소식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;입소식은 훈련소 가고 다음주 월요일 오전에 했다. 그래서 갈사람은 금요일에 보내고 남는 사람들만 있는 주말동안 입소식 훈련이 진행된다. 정식으로 훈련소에 입소하는거기에 엄격한 군기를 요한다. 이때 총기 수여식도 하는걸로 알고있는데 자세한건 기억이 안남&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사격&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;입소식 이후로 훈련을 열심히 받고 언제쯤인가 사격을 했다. 사격이 기훈단 점수에 많은 부분을 차지한다고 들었다. 본 사격에서 20발을 쏘는데 여기서 잘 못하면 백령도를 간다고 누가 겁을줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;나는 20발중 &lt;b&gt;9발&lt;/b&gt;을 맞춰서 애매했다. 하위권에 속한 편인것 같기는 했다. 이때 속으로 걱정 많이했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시험&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;학과 시간에 배운 내용으로 시험을 본다. 어떤 내용인지는 정확히 기억이 안났는데 영어를 제외하고는 대부분 암기였다. 영어는 문제가 길지는 않았는데 약간 어려운 단어를 넣어서 단어를 모르면 못풀게 한거 같다. 단어 수준은 수능보다 약간 어려운 수준(영어 만점받으면 특수한 특기를 지원할수있다)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;특기 배정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;기술 없고 자격증없는 일반이면 헌급방이 대부분이다. 나는 일반이 아닌 전기전자? 로 지원해서 무기?관련 특기만 피하자는 생각이었다. 하지만 나는 컴퓨터공학과이자 자격증도 없어서 아무것도 가점을 받을 수 없었다. 오로지 훈련과 시험점수가 다였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;어찌어찌해서 운 좋게 전력운영을 받았다. 무기를 피하게되어 다행이라고 생각했다. 군수 2학교를 가게 되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특기학교(군수 2학교)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;분위기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그나마 훈련소보다 사람 대접을 받는 것 같았다. 휴가 마치고 돌아온 첫날, 여러가지 근무를 정했다. 식기근무를 했는데 받는 가점에 비해서 일이 좀 빡세다(3시 세끼 무슨 일을 해야함. 설거지를 하든 뭘하든. 진짜 배식이 낫지 설거지는 하지마라). 다른 근무를 하는걸 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;전력 설비에는 한 60명 된거같은데 공고나 일반고를 갓 나와 자격증을 갖고 온 애들이 대부분이었다. 그중에 대학다니는 사람이 나포함해서 4명인가 그랬던 것 같았다. 나이 많은사람이 별로 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;실습도 가끔 했고, 필기시험도 봤다. 나름 성적이 괜찮은 편이어서 집 근처의 자대를 선택할 수 있었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시설&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;군수 2학교는 내 기억으로 끔찍했다. 정말 열악하다. 근데 사람이 살려면 살 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;질문을 남겨주면 아는 선에서 대답해보겠습니다~&lt;/p&gt;</description>
      <category>생각</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/44</guid>
      <comments>https://postbarca.tistory.com/44#entry44comment</comments>
      <pubDate>Sat, 10 Aug 2019 01:21:19 +0900</pubDate>
    </item>
    <item>
      <title>[Java] HashMap, HashTable, ConcurrentHashMap 비교</title>
      <link>https://postbarca.tistory.com/43</link>
      <description>&lt;h2&gt;HashMap&lt;/h2&gt;
&lt;p&gt;HashMap은 동기화(Synchronized) 처리가 되어있지 않음. &lt;b&gt;싱글스레드&lt;/b&gt; 환경에서 이용할 수 있지만 멀티스레드 환경에선 안정성을 보장할 수 없음. &lt;b&gt;Key, Value에 null 사용할 수 있음&lt;/b&gt;&lt;/p&gt;
&lt;h2&gt;HashTable&lt;/h2&gt;
&lt;p&gt;HashTable은&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;동기화(Synchronized) 처리가 되어있음. 싱글스레드에서는 느리므로 굳이 이용할 필요는 없음. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;대신 &lt;b&gt;멀티스레드&lt;/b&gt; 환경에서 안정성이 보장됨.&amp;nbsp;&lt;span style=&quot;color: #f41a18;&quot;&gt;&lt;b&gt;Key, Value에&amp;nbsp;null 사용할 수 없음&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;ConcurrentHashMap&lt;/h2&gt;
&lt;p&gt;ConcurrentHashMap은 HashMap에&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;동기화(Synchronized) 처리를 한 상태임. HashTable보다 빠른 성능을 가짐. 하지만&amp;nbsp;&lt;span style=&quot;color: #f41a18;&quot;&gt;&lt;b&gt;Key, Value에&amp;nbsp;null 사용할 수 없음&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;SynchronizedMap과 다른점?&lt;/h4&gt;
&lt;p&gt;SynchronizedMap은 전체적으로 동기화 관리를 하지만 ConcurrentHashMap은 부분적으로 동기화 관리를 하므로 조금 더 효율적임&lt;/p&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/43</guid>
      <comments>https://postbarca.tistory.com/43#entry43comment</comments>
      <pubDate>Mon, 1 Jul 2019 11:10:19 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] C#으로 소켓통신</title>
      <link>https://postbarca.tistory.com/42</link>
      <description>&lt;p&gt;Unity C#으로 소켓통신을 할 때 정보를 받게 되는데 이때 Update함수에서 받으면 에러(프레임마다 호출해야하는데 정보를 받을때까지 기다리게 되면 시간이 지체되므로)가 발생하므로 따로 스레드를 열어서 받아줘야 한다.&lt;/p&gt;</description>
      <category>Unity</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/42</guid>
      <comments>https://postbarca.tistory.com/42#entry42comment</comments>
      <pubDate>Sat, 29 Jun 2019 15:34:37 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 소켓을 이용한 인터넷 전화</title>
      <link>https://postbarca.tistory.com/41</link>
      <description>&lt;p&gt;원래는 Unity로 소켓을 이용해 3d게임을 만들던 도중 오버워치처럼 음성대화를 하면 좋겠다는 생각이 들었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 자바로 소켓을 이용해 이틀정도 걸려서 만들었다. 오디오 데이터를 다루는 것은 처음이라 좀 어려웠음.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버와 클라이언트가 1:1로 연결되는 거라서 연결 부분만 빼면 거의 동일하다고 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추후 기회가 된다면 더 업그레이드를 해볼 생각이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[과정]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Sequence.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MsFTm/btqwpTP2GL4/OxO8DRKSveTfJhAu4NLri1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MsFTm/btqwpTP2GL4/OxO8DRKSveTfJhAu4NLri1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MsFTm/btqwpTP2GL4/OxO8DRKSveTfJhAu4NLri1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMsFTm%2FbtqwpTP2GL4%2FOxO8DRKSveTfJhAu4NLri1%2Fimg.png&quot; data-filename=&quot;Sequence.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;[구조]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Phone 클래스를 중심으로 Mic, Speaker, Connect 클래스가 존재한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;연결이 성립되면 Mic, Speaker 클래스의 스레드가 작동하여 데이터를 주고 받으면서 소리를 들려준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;K-086.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8Wadt/btqwmCCuHg6/ChUT7jRHuXPwoUT6sT6lX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8Wadt/btqwmCCuHg6/ChUT7jRHuXPwoUT6sT6lX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8Wadt/btqwmCCuHg6/ChUT7jRHuXPwoUT6sT6lX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8Wadt%2FbtqwmCCuHg6%2FChUT7jRHuXPwoUT6sT6lX1%2Fimg.png&quot; data-filename=&quot;K-086.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;[잘 알려진 문제]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;너무 많은 데이터를 전송하는것 같다. Skype와 비교를 해봤는데 거의 10배 정도의 데이터를 더 전송하는것 같다(통화 품질은 Skype보다는 좀 나은것 같지만 10배정도의 차이는 아닌 것 같다). 그룹전화를 염두해둔다면 잠재적인 문제다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Github]&lt;/p&gt;
&lt;figure id=&quot;og_1561642145480&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://github.com/december-ok/JavaSocketTelephone&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://github.com/december-ok/JavaSocketTelephone&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mEC8u/hyBKD9oABu/sAyUBqmBdKTZFCMhoJ4O41/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;december-ok/JavaSocketTelephone&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Calling with java socket. Contribute to december-ok/JavaSocketTelephone development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>만든거</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/41</guid>
      <comments>https://postbarca.tistory.com/41#entry41comment</comments>
      <pubDate>Thu, 27 Jun 2019 22:29:20 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 소켓을 이용한 캐치마인드</title>
      <link>https://postbarca.tistory.com/40</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이클립스로 학교 과제용으로 만든거임 혹시 다운받으시면 댓글 하나만 ^^&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;주의 ❗) 코드가 상당히 더러움&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/IIO0p/btqwdhyfcFu/KsGdwHDw1jAFUcR8iSOgw1/CatchMind.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;CatchMind.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;9.64MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/oVYwfzi8Bzc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/oVYwfzi8Bzc&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=oVYwfzi8Bzc&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/L4aKq/hyL7huprkQ/yIw7M2EPKeW3GKkUL3rHP0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/oVYwfzi8Bzc&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>만든거</category>
      <category>CatchMind</category>
      <category>Java</category>
      <category>자바</category>
      <category>캐치마인드</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/40</guid>
      <comments>https://postbarca.tistory.com/40#entry40comment</comments>
      <pubDate>Fri, 21 Jun 2019 03:04:56 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 6186 Best Grass</title>
      <link>https://postbarca.tistory.com/38</link>
      <description>&lt;h2&gt;백준 6186 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/6186&quot;&gt;https://www.acmicpc.net/problem/6186&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1555996838084&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/6186&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/6186&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CuKSy/hyAShRpT94/KZ2Ylit4Kg3NTaLWMUAXo1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;6186번: Best Grass&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Bessie is planning her day of munching tender spring grass and is gazing out upon the pasture which Farmer John has so lovingly partitioned into a grid with R (1 &amp;lt;= R &amp;lt;= 100) rows and C (1 &amp;lt;= C &amp;lt;= 100) columns. She wishes to count the number of grass clump&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from collections import deque
def dajik():
    q=deque([(i,j)])
    while q:
        y,x=q.popleft()
        for k in range(4):
            ny,nx=y+ly[k],x+lx[k]
            if 0&amp;lt;=ny&amp;lt;n and 0&amp;lt;=nx&amp;lt;m and mp[ny][nx]=='#' and visit[ny][nx]==0:
                visit[ny][nx]=1
                q.append((ny,nx))
n,m=map(int,input().split())
mp=[input() for _ in range(n)]
visit=[[0]*m for _ in range(n)]
ly,lx=[0,0,-1,1],[1,-1,0,0]
count=0
for i in range(n):
    for j in range(m):
        if mp[i][j]=='#' and visit[i][j]==0:
            visit[i][j]=1
            dajik()
            count=count+1
print(count)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/38</guid>
      <comments>https://postbarca.tistory.com/38#entry38comment</comments>
      <pubDate>Tue, 23 Apr 2019 14:20:43 +0900</pubDate>
    </item>
    <item>
      <title>[python] Queue.Queue vs collections.deque</title>
      <link>https://postbarca.tistory.com/37</link>
      <description>&lt;p&gt;Queue.Queue&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;collections.deque&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;serve different purposes. &lt;b&gt;Queue.Queue is intended for allowing different threads to communicate using queued messages/data, whereas&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;collections.deque&lt;/b&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is simply intended as a datastructure.&lt;/b&gt; That's why&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Queue.Queue&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;has methods like&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;put_nowait()&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;get_nowait()&lt;span&gt;, and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;join()&lt;span&gt;, whereas&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;collections.deque&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;doesn't.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Queue.Queue&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;isn't intended to be used as a collection, which is why it lacks the likes of the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;in&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;operator.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 큐보다 데큐가 더 빠른듯&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque&quot;&gt;https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1555936054193&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/coeRH2/hyAQ5deb3O/1bDXRYrehRgkuYaZeQeW9k/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Queue.Queue vs. collections.deque&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;I need a queue which multiple threads can put stuff into, and multiple threads may read from. Python has at least two queue classes, Queue.Queue and collections.deque, with the former seemingly us...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/37</guid>
      <comments>https://postbarca.tistory.com/37#entry37comment</comments>
      <pubDate>Mon, 22 Apr 2019 21:27:37 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 13549 숨바꼭질3</title>
      <link>https://postbarca.tistory.com/36</link>
      <description>&lt;h2&gt;백준 13549 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/13549&quot;&gt;https://www.acmicpc.net/problem/13549&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;bfs를 쓰면 됩니다. queue보다 deque가 속도가 더 빠른거같네요. 꽤 차이가 납니다.&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;from collections import deque
input = __import__(&amp;#39;sys&amp;#39;).stdin.readline
n,m = map(int, input().split())
chaser = [float(&amp;quot;inf&amp;quot;) for _ in range(100001)]
q = deque([(n,0)])
while q:
    now,moved=q.popleft()
    if chaser[now]&amp;gt;moved:
        chaser[now]=moved
    for i in [now+1,now-1]:
        if 0&amp;lt;=i&amp;lt;=100000 and chaser[i]&amp;gt;moved+1:
            q.append((i,moved+1))
            chaser[i]=moved+1
    if 0&amp;lt;=now*2&amp;lt;=100000 and chaser[now*2]&amp;gt;moved:
            q.append((now*2,moved))
            chaser[now*2]=moved
print(chaser[m])&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/36</guid>
      <comments>https://postbarca.tistory.com/36#entry36comment</comments>
      <pubDate>Mon, 22 Apr 2019 19:29:42 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 6118 숨바꼭질</title>
      <link>https://postbarca.tistory.com/35</link>
      <description>&lt;h2&gt;백준 6118 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/6118&quot;&gt;https://www.acmicpc.net/problem/6118&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1555681390500&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/6118&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/6118&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XR32B/hyANz7pwi1/VKUKVexJ3ADRnxijN1Mkh1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;6118번: 숨바꼭질&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;문제 재서기는 수혀니와 교외 농장에서 숨바꼭질을 하고 있다. 농장에는 헛간이 많이 널려있고 재석이는 그 중에 하나에 숨어야 한다. 헛간의 개수는 N(2 &amp;lt;= N &amp;lt;= 20,000)개이며, 1 부터 샌다고 하자. &amp;nbsp; 재서기는 수혀니가 1번 헛간부터 찾을 것을 알고 있다. 모든 헛간은 M(1&amp;lt;= M &amp;lt;= 50,000)개의 양방향 길로 이어져 있고, 그 양 끝을 A_i 와 B_i(1&amp;lt;= A_i &amp;lt;= N; 1 &amp;lt;= B_i &amp;lt;= N; A_i != B_i)로 나타낸&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;그냥 다익스트라&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;#파이썬pq는 최소힙
import heapq as pq
input = __import__('sys').stdin.readline
n,m = map(int, input().split())
con = [[] for _ in range(n+1)]
dp=[float(&quot;inf&quot;)]*(n+1)
for _ in range(m):
    a,b = map(int, input().split())
    con[a].append(b);con[b].append(a)
q=[(0,1)]
dp[1]=dp[0]=0
while q:
    cost,n=pq.heappop(q)
    if cost!=dp[n]:continue
    for i in con[n]:
        if dp[i]&amp;gt;cost+1:
            dp[i]=cost+1
            pq.heappush(q,(cost+1, i))
mx=max(dp)
cnt=0
ch=True
for i in range(1,n+1):
    if mx==dp[i]:
        cnt+=1
        if ch:
            print(i,end=' ')
            ch=False
print(mx, cnt)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/35</guid>
      <comments>https://postbarca.tistory.com/35#entry35comment</comments>
      <pubDate>Fri, 19 Apr 2019 22:43:26 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 6087 레이저 통신</title>
      <link>https://postbarca.tistory.com/34</link>
      <description>&lt;h2&gt;백준 6087 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/6087&quot;&gt;https://www.acmicpc.net/problem/6087&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;각 칸마다 최소 몇번의 거울을 써서 이동했나를 저장해 가면서 다익스트라로 풀었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그냥 큐로 푼사람도 있던데 조금 더 생각을 해봐야 할 것 같은...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;특이한 점은 같은 회수의 거울을 이용 하더라도 온 방향이 다를 경우엔 답이 달라질 수 있으므로&lt;/p&gt;
&lt;pre class=&quot;fix&quot;&gt;&lt;code&gt;저장된 최소 비용 &amp;gt;= 현재비용&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;으로 비교를 하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;조금 더 생각해본 결과 레이저 처럼 쭉쭉 뻗어나간다는 생각을 도입해보면 큐를 이용할 수 있다고 생각하여 다시 구현해보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;큐를 이용한 방법을 쓰니까 조금 더 빠르네요&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;#다익스트라
import heapq
input = __import__('sys').stdin.readline
m,n = map(int, input().split())
mp = [input() for _ in range(n)]
visit = [[float(&quot;inf&quot;)] * m for _ in range(n)]
check = 0
sy = sx = ey = ex = -1
ly,lx = [1,-1,0,0],[0,0,-1,1]
for i in range(n):
    for j in range(m):
        if mp[i][j] == 'C' and check == 0:
            sy,sx = i,j
            check+=1
        elif mp[i][j] == 'C':
            ey,ex = i,j
            break
#0,1,2,3 하상좌우
#들어가는 데이터는 (꺾은 회수,현재 방향,y,x)
ans = float(&quot;inf&quot;)
visit[sy][sx] = 0
q = []
heapq.heappush(q,(0,0,sy,sx))
heapq.heappush(q,(0,1,sy,sx))
heapq.heappush(q,(0,2,sy,sx))
heapq.heappush(q,(0,3,sy,sx))
while q:
    turned,nowdir,y,x = heapq.heappop(q)
    if y == ey and x == ex:
        ans = min(turned,ans)
    else:
        for i in range(4):
            ny,nx = y + ly[i],x + lx[i]
            if 0 &amp;lt;= ny &amp;lt; n and 0 &amp;lt;= nx &amp;lt; m and mp[ny][nx] != '*':
                if i != nowdir and visit[ny][nx] &amp;gt;= turned + 1:
                    visit[ny][nx] = turned + 1
                    heapq.heappush(q,(turned + 1,i,ny,nx))
                elif i == nowdir and visit[ny][nx] &amp;gt;= turned:
                    visit[ny][nx] = turned
                    heapq.heappush(q,(turned,nowdir,ny,nx))
print(ans)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1555596649301&quot; class=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#BFS
import queue
input = __import__('sys').stdin.readline
m,n = map(int, input().split())
mp = [input() for _ in range(n)]
visit = [[float(&quot;inf&quot;)] * m for _ in range(n)]
check = 0
sy = sx = ey = ex = -1
ly,lx = [1,-1,0,0],[0,0,-1,1]
for i in range(n):
    for j in range(m):
        if mp[i][j] == 'C' and check == 0:
            sy,sx = i,j
            check+=1
        elif mp[i][j] == 'C':
            ey,ex = i,j
            break
visit[sy][sx] = 0
q = queue.Queue()
q.put((sy,sx))
while q.empty()==False:
    y,x=q.get()
    for i in range(4):
        ny,nx=y+ly[i],x+lx[i]
        while True:
            if 0&amp;lt;=ny&amp;lt;n and 0&amp;lt;=nx&amp;lt;m and mp[ny][nx]!='*' and visit[ny][nx]&amp;gt;=visit[y][x]+1:
                q.put((ny,nx))
                visit[ny][nx]=visit[y][x]+1
            else:
                break
            ny,nx=ny+ly[i],nx+lx[i]
print(visit[ey][ex]-1)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/34</guid>
      <comments>https://postbarca.tistory.com/34#entry34comment</comments>
      <pubDate>Thu, 18 Apr 2019 20:55:29 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 1926 그림</title>
      <link>https://postbarca.tistory.com/33</link>
      <description>&lt;h2&gt;백준 1926 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1926&quot;&gt;https://www.acmicpc.net/problem/1926&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1555490935609&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1926&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/1926&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lqR2B/hyALZdLbTz/yJ1MxbMUKekS0TAQwN41Ek/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;1926번: 그림&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다. 그림의 넓이란 그림에 포함된 1의 개수이다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from collections import deque
input=__import__('sys').stdin.readline
n,m = map(int, input().split())
mp = [list(map(int, input().split())) for _ in range(n)]
cnt=0
mx=0
ly,lx=[0,0,1,-1],[1,-1,0,0]
for i in range(n):
    for j in range(m):
        if mp[i][j]==1:
            temp=0
            cnt=cnt+1
            q=deque([(i,j)])
            mp[i][j]=0
            while q:
                y,x=q.popleft()
                temp+=1
                for j in range(4):
                    ny=y+ly[j];nx=x+lx[j]
                    if 0&amp;lt;=ny&amp;lt;n and 0&amp;lt;=nx&amp;lt;m and mp[ny][nx]==1:
                        q.append((ny,nx))
                        mp[ny][nx]=0
            mx=max(mx,temp)
print(cnt)
print(mx)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/33</guid>
      <comments>https://postbarca.tistory.com/33#entry33comment</comments>
      <pubDate>Wed, 17 Apr 2019 17:49:05 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 2206 벽 부수고 이동하기</title>
      <link>https://postbarca.tistory.com/32</link>
      <description>&lt;h2&gt;백준 2206 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2206&quot;&gt;https://www.acmicpc.net/problem/2206&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;풀이방법&lt;/h2&gt;
&lt;p&gt;파이썬으로 dequeue를 쓰는게 안 익숙해서 이상한데서 시간을 끌었다...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그냥 pop하면 안되고 popleft해야됨..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;만약 pop을 시키지 않고 맨 앞의 요소에 그냥 접근만 하고싶으면 q[0] 으로 할 수 있어요&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;처음엔 깔끔하게 짠거같은데 오류 잡는다고 이것저것 확실히 하다보니까 더러워진 느낌&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;저는 이 문제를 풀때 dp[y][x][벽을 뚫고 지나갔는지 여부]이걸 통해서 풀었지만, 다시 한번 생각해보니 dp[y][x]로만 해도 충분하다고 생각했었습니다.&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;왜냐하면, 벽을 뚫었는지 여부는 그냥 큐를 통해서 기록해주면 된다고 생각했기 때문입니다. 이미 뚫고 지나갔는지 확인해서 이미 뚫었다면 벽을 안지나가면 되는거고, 안뚫었다면 뚫는 것까지 생각해서 진행해 주면 되니까요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런데 다음과 같은 반례를 어떤 분에게 받았습니다. 잘하시더군요&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1555588802150&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;7 4 
0000 
1110 
0000 
0111 
0000 
0011 
0010&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 반례는 (1,0)~(1,2)에서 최소값으로 벽뚫는데 걸려버립니다. 그래서 끝까지 가지를 못하더군요 마지막에 벽이 또있으니까.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결과적으론 제 생각이 틀렸다는겁니다.  &lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from collections import deque
input=__import__('sys').stdin.readline
n,m = map(int, input().split())
mp = [(input()) for _ in range(n)]
d = [[[-1]*2 for _ in range(m)] for _ in range(n)]
d[0][0][0] = 1
q=deque([(0,0,0)])
dx,dy=[0,0,1,-1],[1,-1,0,0]
while q:
    y,x,z = q.popleft()
    if y==n-1 and x==m-1:
        continue
    for i in range(4):
        ny,nx = y+dy[i],x+dx[i]
        if ny&amp;gt;=0 and ny&amp;lt;=n-1 and nx&amp;gt;=0 and nx&amp;lt;=m-1:
            if z==0 and mp[ny][nx]=='1' and d[ny][nx][1]==-1:
                d[ny][nx][1]=d[y][x][0]+1
                q.append((ny,nx,1))
            if mp[ny][nx]=='0' and d[ny][nx][z]==-1:
                d[ny][nx][z]=d[y][x][z]+1   
                q.append((ny,nx,z))
if d[n-1][m-1][0]==-1 and d[n-1][m-1][1]==-1:
    print(-1)
elif d[n-1][m-1][0]!=-1 and d[n-1][m-1][1]!=-1:
    print(min(d[n-1][m-1]))
elif d[n-1][m-1][0]==-1 or d[n-1][m-1][1]==-1:
    print(max(d[n-1][m-1]))&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/32</guid>
      <comments>https://postbarca.tistory.com/32#entry32comment</comments>
      <pubDate>Tue, 16 Apr 2019 12:02:20 +0900</pubDate>
    </item>
    <item>
      <title>슈퍼손</title>
      <link>https://postbarca.tistory.com/31</link>
      <description>&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/mqPWzYA3yJ4&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;반복재생&lt;/p&gt;</description>
      <category>자유</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/31</guid>
      <comments>https://postbarca.tistory.com/31#entry31comment</comments>
      <pubDate>Mon, 15 Apr 2019 00:29:48 +0900</pubDate>
    </item>
    <item>
      <title>자료구조 - 힙(Heap) with C</title>
      <link>https://postbarca.tistory.com/30</link>
      <description>&lt;h2&gt;힙이란?&lt;/h2&gt;
&lt;p&gt;자료구조의 종류중 하나로 &lt;a href=&quot;https://postbarca.tistory.com/24&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;지난번에 포스팅&lt;/a&gt;한 트리의 종류중 완전이진트리입니다. 힙의 특징은 자료를 삽입할때 빠르게 정렬을 한 상태로 삽입이 되어 자료를 빼낼때 아주 빠르게 빼낼 수 있습니다. 검색이진트리의 업글버전이라고 생각합니다. 다익스트라 알고리즘을 할때 우선순위 큐(priority queue)로 많이 이용하죠.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1555086812982&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://postbarca.tistory.com/24&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://postbarca.tistory.com/24&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mTe6Y/hyAI8ASnag/cvl7U4OOQKXH7FAJWSjUIK/img.png?width=447&amp;amp;height=413&amp;amp;face=0_0_447_413,https://scrap.kakaocdn.net/dn/MO6fM/hyAJd9ZSpq/qkUBUirqJBgzu27mdEukgK/img.png?width=1103&amp;amp;height=673&amp;amp;face=0_0_1103_673,https://scrap.kakaocdn.net/dn/e07rw/hyAHW272Oq/gUCIEgaly5RoUDbP59Ex5K/img.png?width=447&amp;amp;height=413&amp;amp;face=0_0_447_413');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;자료구조 - 트리(Tree) with C&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;트리란? 트리는 데이터 사이의 계층 관계를 나타내는 자료구조입니다. 루트는 트리의 가장 위쪽에 있는 노드입니다. 하나의 트리에는 하나의 루트가 있습니다. 그림을 거꾸로 보면 나무처럼 생겼죠? 리프는 트리..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;postbarca.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;기본적인 구조는 이진노드로 이뤄진 트리입니다.&lt;/p&gt;
&lt;p&gt;부모노드를 p라고 하고 자식노드를 c라고 가정하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;올림차순&lt;/b&gt;일 경우엔 p가 c보다 작습니다. 이 경우엔 루트 노드에 제일 작은 값이 들어가서 &lt;b&gt;최소 힙&lt;/b&gt;이라고 해요&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내림차순&lt;/b&gt;일 경우엔 p가 c보다 큽니다. 이 경우엔 루트 노드에 제일 큰 값이 들어가서&amp;nbsp;&lt;b&gt;최대 힙&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이라고 해요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기본적으로 cpp &amp;lt;queue&amp;gt;의 priority queue는 최대힙입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;힙의 노드 위치를 표시할때 부모노드가 n이라면 왼쪽 자식노드는 2*n, 오른쪽 자식노드는 2*n+1 으로 표시합니다. 루트의 노드 위치는 1입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;힙을 이용하면 좋은 점은 가장 크거나 작은 몇개의 값들만 접근할때 좋습니다. 입력 받을때 완전히 정리하는게 아니라 일부 값만 정리하기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 올림차순인 &lt;b&gt;최소힙&lt;/b&gt;을 만들어 보겠습니다. 보통 다익스트라에선 최소힙을 더 많이 쓰니까는 &lt;/p&gt;
&lt;h2&gt;자료 삽입/출력 과정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자료의 삽입&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 자료를 힙의 가장 말단에 추가합니다. 그리고 부모 노드와 비교하여 더 작다면 값을 바꿔줍니다. (최소힙이라서 더 작은 값을 위로 올려줍니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;힙삽입1.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkTE9m/btquuJ4lh0g/ZuT0fGyWhH4N7eOI9JYeC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkTE9m/btquuJ4lh0g/ZuT0fGyWhH4N7eOI9JYeC1/img.png&quot; data-alt=&quot;부모노드와 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkTE9m/btquuJ4lh0g/ZuT0fGyWhH4N7eOI9JYeC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkTE9m%2FbtquuJ4lh0g%2FZuT0fGyWhH4N7eOI9JYeC1%2Fimg.png&quot; data-filename=&quot;힙삽입1.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;부모노드와 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;2. 값을 바꿔줬다면 다시 한번 부모 노드와 비교해 주고 작다면 또 값을 바꿔줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;힙삽입2.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6um80/btquuIRTGb2/ttVomSRk6pQxyAvZRPXxu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6um80/btquuIRTGb2/ttVomSRk6pQxyAvZRPXxu1/img.png&quot; data-alt=&quot;어? 또 작네&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6um80/btquuIRTGb2/ttVomSRk6pQxyAvZRPXxu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6um80%2FbtquuIRTGb2%2FttVomSRk6pQxyAvZRPXxu1%2Fimg.png&quot; data-filename=&quot;힙삽입2.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;어? 또 작네&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;3. 계속 비교 후 바꿔줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;힙삽입3.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PyQpE/btquw2hmDm9/XjthPqCW9veMKzvur20MWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PyQpE/btquw2hmDm9/XjthPqCW9veMKzvur20MWK/img.png&quot; data-alt=&quot;결국 루트까지 먹은 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PyQpE/btquw2hmDm9/XjthPqCW9veMKzvur20MWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPyQpE%2Fbtquw2hmDm9%2FXjthPqCW9veMKzvur20MWK%2Fimg.png&quot; data-filename=&quot;힙삽입3.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결국 루트까지 먹은 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자료의 제거(출력/삭제)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 힙에서 루트의 값을 제거(삭제)해 줍니다. 그리고 루트의 자리에 마지막에 위치한 노드의 값을 가져옵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;힙제거1.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0DNWk/btquvjYFSeM/kakPRHc6nB7zTl9nswjQu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0DNWk/btquvjYFSeM/kakPRHc6nB7zTl9nswjQu0/img.png&quot; data-alt=&quot;마지막 노드의 값 3이 루트 값으로 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0DNWk/btquvjYFSeM/kakPRHc6nB7zTl9nswjQu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0DNWk%2FbtquvjYFSeM%2FkakPRHc6nB7zTl9nswjQu0%2Fimg.png&quot; data-filename=&quot;힙제거1.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마지막 노드의 값 3이 루트 값으로 이동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;2. 자식 노드와 비교해 줍니다. 비교가 종료되면 끝. 자식들중 더 작은 값을 먼저 본다고 생각하면 됩니다. (최소힙이라서)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;힙제거3.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IVR5I/btquwnstBcy/fj2uRd0q8qf4FugNaicH9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IVR5I/btquwnstBcy/fj2uRd0q8qf4FugNaicH9k/img.png&quot; data-alt=&quot;4와 2중 2가 더 작으니 3과 비교한 후 바꿔줍시다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IVR5I/btquwnstBcy/fj2uRd0q8qf4FugNaicH9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIVR5I%2FbtquwnstBcy%2Ffj2uRd0q8qf4FugNaicH9k%2Fimg.png&quot; data-filename=&quot;힙제거3.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4와 2중 2가 더 작으니 3과 비교한 후 바꿔줍시다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;힙제거4.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzKVcz/btquvOqzYF3/hPQ9qSmtO9HT9tpHD6Gkw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzKVcz/btquvOqzYF3/hPQ9qSmtO9HT9tpHD6Gkw1/img.png&quot; data-alt=&quot;3이 더 작으므로 여기서 교환을 중지합니다. 자리를 찾은거죠&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzKVcz/btquvOqzYF3/hPQ9qSmtO9HT9tpHD6Gkw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzKVcz%2FbtquvOqzYF3%2FhPQ9qSmtO9HT9tpHD6Gkw1%2Fimg.png&quot; data-filename=&quot;힙제거4.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3이 더 작으므로 여기서 교환을 중지합니다. 자리를 찾은거죠&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2&gt;함수를 만들어 봅시다&lt;/h2&gt;
&lt;h4&gt;힙의 노드와 힙 구조체&lt;/h4&gt;
&lt;pre id=&quot;code_1555087589769&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typedef struct {
    Data data;
}Node;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;노드에는 data 즉 값만 있으면 됩니다. 노드간의 관계는 Heap의 arr배열에서 알 수 있습니다. Data는 int라고 해볼게요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1555090227349&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typedef struct {
	Node **arr; //각 노드의 위치 저장
	int size; //현재 몇개의 요소를 갖고있는지
}Heap;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;힙을 총괄하는 구조체를 하나 만들어 줍니다. 각 번호의 노드를 위치를 저장하는 배열을 만듭니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Node와 Heap을 다루는 기본적인 함수들입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1555096752084&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Node *allocNode() { //dynamic allocation
	return calloc(1, sizeof(Node));
}

void setNode(Node *t, const int *x) {
	t-&amp;gt;data = *x;
} //set Node's attribution

void setHeap(Heap *h) {
	h-&amp;gt;size = 0;
	h-&amp;gt;arr = (Node**) calloc(100005, sizeof(Node*));
	//10만개면 충분할듯
} //Heap basic setting&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그리고 push(삽입) pop(제거) front(접근) 함수를 만들었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1555096879534&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//add data into heap
void push(Heap *h, const int *x) {
	Node *t = allocNode();
	setNode(t, x);
	h-&amp;gt;size++;
	if (h-&amp;gt;size != 1) 
		h-&amp;gt;arr[h-&amp;gt;size] = t;
	else //루트도 없을때
		h-&amp;gt;arr[1] = t;
	int parent = h-&amp;gt;size / 2;
	int child = h-&amp;gt;size;
	while (h-&amp;gt;arr[parent] != NULL) { //루트면 끝나
		if (h-&amp;gt;arr[child]-&amp;gt;data &amp;gt; h-&amp;gt;arr[parent]-&amp;gt;data) //더이상 부모노드보다 커도 끝나
			break;
		else {
			int t = h-&amp;gt;arr[parent]-&amp;gt;data;
			h-&amp;gt;arr[parent]-&amp;gt;data = h-&amp;gt;arr[child]-&amp;gt;data;
			h-&amp;gt;arr[child]-&amp;gt;data = t;//swap

			child /= 2;
			parent = child / 2;
		}
	}
}

void pop(Heap *h) {
	if (h-&amp;gt;size != 1) {
		//맨 뒤의 데이터를 앞으로 가져옴
		h-&amp;gt;arr[1]-&amp;gt;data = h-&amp;gt;arr[h-&amp;gt;size]-&amp;gt;data;
		free(h-&amp;gt;arr[h-&amp;gt;size]);
		h-&amp;gt;arr[h-&amp;gt;size] = NULL;
		h-&amp;gt;size--;
		int child = 2;
		while (child &amp;lt;= h-&amp;gt;size) {
			if (child &amp;lt; h-&amp;gt;size &amp;amp;&amp;amp; h-&amp;gt;arr[child]-&amp;gt;data &amp;gt; h-&amp;gt;arr[child + 1]-&amp;gt;data)
				child++;
			if (h-&amp;gt;arr[child / 2]-&amp;gt;data &amp;lt;= h-&amp;gt;arr[child]-&amp;gt;data) //지금께 더 작으면 중지
				break;
			//그게 아니면 여기로 왔다
			int t = h-&amp;gt;arr[child / 2]-&amp;gt;data;
			h-&amp;gt;arr[child / 2]-&amp;gt;data = h-&amp;gt;arr[child]-&amp;gt;data;
			h-&amp;gt;arr[child]-&amp;gt;data = t; //swap

			child *= 2;
		}
	}
	else {
		free(h-&amp;gt;arr[h-&amp;gt;size]);
		h-&amp;gt;arr[h-&amp;gt;size] = NULL;
		h-&amp;gt;size--;
	}
	
}

int front(Heap *h) { //맨 위의 원소 보이기
	return h-&amp;gt;arr[1]-&amp;gt;data;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;만들고 보니 억지로 노드를 통해서 만들다 보니까 좀 비효율적인것 같네요 ㅠㅠ 배열로 하면 더 간편할듯&lt;/p&gt;
&lt;h2&gt;문제 추천&lt;/h2&gt;
&lt;p&gt;백준 1927 최소 힙 링크 :&amp;nbsp;&lt;a href=&quot;https://www.acmicpc.net/problem/1927&quot;&gt;https://www.acmicpc.net/problem/1927&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1555097071314&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1927&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/1927&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cCmnld/hyAI7hGXFT/dmv5Crd3qNGIeN4LWSvV81/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;1927번: 최소 힙&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;첫째 줄에 연산의 개수 N(1&amp;le;N&amp;le;100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 자연수는 2^31보다 작다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;그냥 저대로 쓰면 됩니다. 최대 힙도 크기비교 변형만 하면 됩니다.&lt;/p&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/30</guid>
      <comments>https://postbarca.tistory.com/30#entry30comment</comments>
      <pubDate>Sat, 13 Apr 2019 04:30:04 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 1854 K번째 최단경로 찾기</title>
      <link>https://postbarca.tistory.com/29</link>
      <description>&lt;h2&gt;백준 1854 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1854&quot;&gt;https://www.acmicpc.net/problem/1854&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;문제 풀이&lt;/h2&gt;
&lt;p&gt;dp[현재위치][k번째로 빨리 도착함]배열을 이용해 풀었습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;어제 푼 문제인 &lt;a href=&quot;https://postbarca.tistory.com/27&quot;&gt;도로포장&lt;/a&gt; 과 상당히 비슷한 문제라는 생각이 드네요&lt;/p&gt;
&lt;figure id=&quot;og_1554977395537&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://postbarca.tistory.com/27&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://postbarca.tistory.com/27&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7fV3p/hyAHVa6R79/kd0B5BlSjPmo0bvKoP1bjk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;BOJ 1162 도로포장&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;백준 1162 도로포장 링크 https://www.acmicpc.net/problem/1162 1162번: 도로포장 문제 준영이는 매일 서울에서 포천까지 출퇴근을 한다. 하지만 잠이 많은 준영이는 늦잠을 자 포천에 늦게 도착하기 일쑤다. 돈..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;postbarca.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이썬으로 문제를 풀다보니까 Cpp랑 다른점이 많이 있네요&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;input=__import__('sys').stdin.readline&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 한줄이 없으면 시간초과 때문에 Python3로는 통과를 하지 못합니다. pypy3로는 바로 통과하지만...&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;from heapq import *
input=__import__('sys').stdin.readline
n,m,k = map(int, input().split())
dp=[[float(&quot;inf&quot;)]*(k) for _ in range(n+1)]
con=[[] for _ in range(n+1)]
for _ in range(m):
    a,b,c=map(int, input().split())
    con[a].append((b,c))
q=[]
heappush(q,(0,1))
dp[1][0]=0
while q:
    cost,now = heappop(q)   
    for next,tcost in con[now]:
        if dp[next][k-1]&amp;gt;cost+tcost:
            dp[next][k-1]=(cost+tcost)
            dp[next]=sorted(dp[next])
            heappush(q,(cost+tcost,next))
for _ in range(1,n+1):
    print(-1 if dp[_][k-1]==float(&quot;inf&quot;) else dp[_][k-1])&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/29</guid>
      <comments>https://postbarca.tistory.com/29#entry29comment</comments>
      <pubDate>Thu, 11 Apr 2019 19:10:20 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 1743 음식물 피하기</title>
      <link>https://postbarca.tistory.com/28</link>
      <description>&lt;h2&gt;백준 1743 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1743&quot;&gt;https://www.acmicpc.net/problem/1743&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;문제풀이&lt;/h2&gt;
&lt;p&gt;파이썬으로 dfs등의 재귀함수를 이용할때 주의해야 할 점은 파이썬은 재귀를 1000번 까지만 허용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 이 문제같이 최대 100*100 = 10000번을 재귀로 돌아서 1000번 이상 재귀를 돌 경우에선&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(100000)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;를 입력해주어 재귀의 제한을 풀어줘야 합니다. 코드에선 10만번정도로 제한을 늘려놓았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이걸 몰라서 런타임에러를 계속 두드려맞았네요.&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(100000)
def dfs(y,x,result):
    result=result+1
    M[y][x]=0
    for _ in range(0,4):
        ny,nx = y+ly[_], x+lx[_]
        if 1&amp;lt;=ny&amp;lt;=n and 1&amp;lt;=nx&amp;lt;=m and M[ny][nx]==1:
           result = result + dfs(ny,nx,0)
    return result
lx=[1,-1,0,0];ly=[0,0,1,-1]
n,m,k = map(int, input().split())
M = [[0]*(m+3) for _ in range(n+3)]
for _ in range(k):
    y,x=map(int, input().split())
    M[y][x]=1
ans=0
for i in range(1,n+1):
    for j in range(1,m+1):
        if M[i][j]==1:
            ans=max(ans,dfs(i,j,0))
print(ans)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/28</guid>
      <comments>https://postbarca.tistory.com/28#entry28comment</comments>
      <pubDate>Thu, 11 Apr 2019 17:19:51 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 1162 도로포장</title>
      <link>https://postbarca.tistory.com/27</link>
      <description>&lt;h2&gt;백준 1162 도로포장 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1162&quot;&gt;https://www.acmicpc.net/problem/1162&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1554908122436&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1162&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/1162&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cACqHH/hyAHLySWT0/4J15Tdbse8TFy3IYZyb5fK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;1162번: 도로포장&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;문제 준영이는 매일 서울에서 포천까지 출퇴근을 한다. 하지만 잠이 많은 준영이는 늦잠을 자 포천에 늦게 도착하기 일쑤다. 돈이 많은 준영이는 고민 끝에 K개의 도로를 포장하여 서울에서 포천까지 가는 시간을 단축하려 한다. 문제는 N개의 도시가 주어지고 그 사이 도로들과 이 도로를 통과할 때 걸리는 시간이 주어졌을 때 최소 시간이 걸리도록 하는 K개의 이하의 도로를 포장하는 것이다. 여기서 도로를 포장하게 되면 도로를 지나는데 걸리는 시간이 0이라 하자.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;문제풀이&lt;/h2&gt;
&lt;p&gt;dp[지금도시위치][도로 포장한 회수] 배열을 만들어 비교하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;큐에서 꺼낼때 지금 갈 도로가 포장을 할 수 있는가 (포장한 회수 + 1 &amp;lt;= 최대 포장 수)를 확인한 뒤에 그렇다면 포장을 한 상태로 큐에 넣고, 또 포장하지 않고 지나가는 경우도 고려하여 큐에 넣습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dp와 완전탐색이 섞인 문제같네요&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;vector&amp;gt;
#include&amp;lt;queue&amp;gt;
using namespace std;
typedef struct {
    long long cost;
    int now, left_pave;

}edge;
bool operator &amp;lt;(edge a, edge b) {
    return a.cost &amp;gt; b.cost;
}
int n, m, k;
priority_queue &amp;lt;edge&amp;gt; q;
vector &amp;lt;pair&amp;lt;int, long long&amp;gt;&amp;gt; con[10003];
long long dp[10003][22];
void dajik() {
    q.push({ 0,1,0 });
    while (!q.empty()) {
        int now = q.top().now;
        int cnt = q.top().left_pave;
        long long cost = q.top().cost;
        q.pop();
        if (dp[now][cnt] != cost)
            continue;
        for (auto i : con[now]) {
            int next = i.first;
            if (cost &amp;lt; dp[next][cnt + 1] &amp;amp;&amp;amp; cnt + 1 &amp;lt;= k) {
                dp[next][cnt + 1] = cost;
                q.push({ dp[next][cnt + 1], next, cnt + 1 });
            }
            if (dp[next][cnt] &amp;gt; cost + i.second) {
                dp[next][cnt] = cost + i.second;
                q.push({ dp[next][cnt], next, cnt });
            }
        }
    }
}
int main() {
    freopen(&quot;input.txt&quot;, &quot;r&quot;, stdin);
    cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; m &amp;gt;&amp;gt; k;
    while (m--) {
        int a, b, cost;
        cin &amp;gt;&amp;gt; a &amp;gt;&amp;gt; b &amp;gt;&amp;gt; cost;
        con[a].push_back({ b,cost });
        con[b].push_back({ a,cost });
    }
    for (int i = 0; i &amp;lt; 10003; i++) {
        for (int j = 0; j &amp;lt; 22; j++) {
            dp[i][j] = 1000000000000000;
        }
    }
    dp[1][0] = 0;

    dajik();
    long long min = 1000000000000000;
    for (int i = 0; i &amp;lt;= k; i++) {
        if (min &amp;gt; dp[n][i]) {
            min = dp[n][i];
        }
    }
    cout &amp;lt;&amp;lt; min;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/27</guid>
      <comments>https://postbarca.tistory.com/27#entry27comment</comments>
      <pubDate>Wed, 10 Apr 2019 23:55:30 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 1068 트리</title>
      <link>https://postbarca.tistory.com/26</link>
      <description>&lt;h2&gt;백준 1068 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1068&quot;&gt;https://www.acmicpc.net/problem/1068&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1554622452965&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1068&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/1068&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bl4BWQ/hyAEp3EHzU/4fhkOMEcqEtlzPXlkTLJWk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/iUwpG/hyAEi4wgoO/hUwaLe0kaihnnUbi8YbPuk/img.jpg?width=264&amp;amp;height=254&amp;amp;face=0_0_264_254,https://scrap.kakaocdn.net/dn/bAHhMo/hyACZFyunY/8ydfxqHVIXk0whPAB0vje1/img.jpg?width=264&amp;amp;height=254&amp;amp;face=0_0_264_254');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;1068번: 트리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다. 셋째 줄에는 지울 노드의 번호가 주어진다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;문제 풀이&lt;/h2&gt;
&lt;p&gt;python 으로 풀었습니다. &lt;s&gt;끔찍한 실력&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;map[시작노드] 에 (도착노드)를 append 시켜주고 삭제될 노드를 입력 받은 후에 다시 삭제될 노드인 도착노드들을 다 없애줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dfs로 탐색을 할 수 있도록 find() 함수로 탐색을 시작합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;만약 루트 노드가 삭제됬다면 탐색을 하지 않고 끝냅니다.&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;c++ cpp&quot;&gt;&lt;code&gt;def find(x):
    global count
    if len(map[x]) == 0:
        count=count+1
    else:
        for i in map[x]:
            find(i)
            
count = 0;
n = int(input())
l = list(map(int,input().split()))
map = [[]for _ in range(52)]
for _ in range(0, n):
    if(l[_] == -1):
        start = _
    else:
        map[l[_]].append(_)
t = int(input())
for i in range(n):
    if t in map[i]:
        map[i].remove(t)
if start != t:
    find(start)
print(count)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/26</guid>
      <comments>https://postbarca.tistory.com/26#entry26comment</comments>
      <pubDate>Sun, 7 Apr 2019 16:34:20 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 16785 ソーシャルゲーム</title>
      <link>https://postbarca.tistory.com/25</link>
      <description>&lt;h2&gt;백준 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16785&quot;&gt;https://www.acmicpc.net/problem/16785&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1554571101917&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16785&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/16785&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cb3UWE/hyAEvieeU2/o1JH0yO22NC4fnqyKFkan1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;16785번: ソーシャルゲーム&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;JOI 君が少なくとも C 枚のコインを得るためにログインしなければならない回数の最小値を出力せよ．&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;b&gt;문제 해석(?)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;JOI는 내일부터 새롭게 소셜 게임을 시작하기로 했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 소셜 게임에는 하루에 한번만 로그인을 할 수가 있다. 로그인을 할때마다 A개의 코인을 얻을 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 월요일부터 일요일까지 7일 연속으로 로그인을 하면, 그때마다, 추가로 B개의 코인을 얻을 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이거 이외의 수단으로 코인을 얻는 수단은 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;내일은 월요일이다. JOI가 최소 C개의 코인을 얻기 위해 해야하는 로그인 회수의 최소치를 구하시오.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;입력은 이하의 형태로 표준입력에게서 주어진다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;JOI가 적어도 C개의 코인을 획득하기 위해서 로그인을 해야하는 최소치를 구하여라.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;번역 : K대 물리학과 박**&lt;/del&gt;&lt;/p&gt;
&lt;h2&gt;풀이 과정&lt;/h2&gt;
&lt;p&gt;일본어 공부를 하는 겸사 겸사 해서 한번 풀어 보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;풀이는 주석에   이번에는 파이썬으로 풀어봤어요&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from math import ceil

a,b,c = map(int,input().split())
week = (a*7 + b) #일주일 버는 돈
days = (c//week)*7 #로그인 하는 날들
if a*6 &amp;lt; c-(days/7)*week: #남은 돈이 6일치 돈보다 많다면
    days += 7
else:
    days += ceil(((c%week)/a))
print(days)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/25</guid>
      <comments>https://postbarca.tistory.com/25#entry25comment</comments>
      <pubDate>Sun, 7 Apr 2019 02:19:37 +0900</pubDate>
    </item>
    <item>
      <title>자료구조 - 트리(Tree) with C</title>
      <link>https://postbarca.tistory.com/24</link>
      <description>&lt;h2&gt;트리란?&lt;/h2&gt;
&lt;p&gt;트리는 데이터 사이의 계층 관계를 나타내는 자료구조입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;트리.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jfffm/btqucoebwbA/gerWYRkNBcfyGoyjNOICkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jfffm/btqucoebwbA/gerWYRkNBcfyGoyjNOICkk/img.png&quot; data-alt=&quot;이렇게 생김&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jfffm/btqucoebwbA/gerWYRkNBcfyGoyjNOICkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJfffm%2FbtqucoebwbA%2FgerWYRkNBcfyGoyjNOICkk%2Fimg.png&quot; data-filename=&quot;트리.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게 생김&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;루트&lt;/b&gt;는 트리의 가장 위쪽에 있는 노드입니다. 하나의 트리에는 하나의 루트가 있습니다. 그림을 거꾸로 보면 나무처럼 생겼죠?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;리프&lt;/b&gt;는 트리의 가장 아랫부분에 있는 노드를 리프라고 합니다. 엄밀히 말하면 해당 노드가 더 이상 아래로 뻗어 나갈 수 없으면 리프노드입니다. external node 라고도 합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;레벨&lt;/b&gt;은 루트로 부터 얼마나 떨어져 있는가를 나타냅니다. 루트의 레벨은 0이고 루트부터 가지가 하나씩 뻗어 나갈때 마다 레벨이 1씩 늡니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;차수&lt;/b&gt;는 노드가 갖는 자식의 수를 차수라고 합니다. 예를 들어 위 루트의 차수는 2입니다. 모든 노드의 자식 수가 2개 이하인 경우는 특별히 &lt;b&gt;이진트리&lt;/b&gt; 라고 합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;트리의 특징&lt;/b&gt;중 하나는 임의의 두 노드를 연결하는 간선 경로(연결 경로)가 한가지 밖에 없다는 것입니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p&gt;만약 노드의 수가 N개라면 노드들을 연결하는 간선들의 수는 N-1개 입니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;이진트리의 노드&lt;/h2&gt;
&lt;p&gt;이진트리를 만드려면 노드를 먼저 만들어야 합니다. 이진트리의 노드는 데이터와 2개의 자식 노드를 가지는 포인터로 이루어져 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYZgRD/btqubTlbNX9/svhG03eMEmfiuVudgi0Ys0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYZgRD/btqubTlbNX9/svhG03eMEmfiuVudgi0Ys0/img.png&quot; data-alt=&quot;2개의 포인터를 지님&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYZgRD/btqubTlbNX9/svhG03eMEmfiuVudgi0Ys0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYZgRD%2FbtqubTlbNX9%2FsvhG03eMEmfiuVudgi0Ys0%2Fimg.png&quot; width=&quot;400&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2개의 포인터를 지님&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;typedef struct {
    Data data;
    struct Node *Lptr, *Rptr; //struct가 붙는 이유는 Node가 완전히 정의되지 않았기 때문
}Node;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;만약 노드를 가리키지 않는 포인터가 존재하면 해당 ptr은 NULL을 가리키게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;이진검색트리 만들기&lt;/h2&gt;
&lt;p&gt;이진검색트리는 자료를 저장하여 이진검색처럼 빠르게 검색할 수 있고 정보의 추가&amp;amp;제거가 쉽다는 장점이 있습니다. 이진트리에서 다음 조건을 만족하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p&gt;어떤 노드N을 기준으로 왼쪽 부분 트리의 모든 값은 N의 값보다 작아야 합니다&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p&gt;오른쪽 부분 트리노드의 값은 N의 값보다 커야합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;
&lt;p&gt;같은 값을 갖는 노드는 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;위에서 만든 노드를 바탕으로 이진검색트리를 구현해 보겠습니다. 자료형은 int입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1554578870241&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
typedef struct {
	int data;
	struct Node *Lptr, *Rptr; //struct가 붙는 이유는 Node가 완전히 정의되지 않았기 때문
}Node;

//노드 동적할당
Node *allocNode() {
	return calloc(1, sizeof(Node));
}

//노드 값 설정
void setNode(Node *n, const int *x, const Node *Lptr, const Node *Rptr) {
	n-&amp;gt;data = *x;
	n-&amp;gt;Lptr = Lptr;
	n-&amp;gt;Rptr = Rptr;
}

//주어진곳부터 탐색
Node *Search(Node *p, const int *x) {
	if (p == NULL)
		return NULL;
	else if (p-&amp;gt;data == *x)
		return p;
	else if (p-&amp;gt;data &amp;gt; *x)
		Search(p-&amp;gt;Lptr, *x);
	else
		Search(p-&amp;gt;Rptr, *x);
}

//트리에 값을 추가
Node *Add(Node *p, const int *x) {
	if (p == NULL) {
		p = allocNode();
		setNode(p, x, NULL, NULL);
	}
	else if (p-&amp;gt;data == *x) //같은 값이 들어올 수 없습니다.
		printf(&quot;Error! Same data is exist!\n&quot;); 
	else if (p-&amp;gt;data &amp;gt; *x)
		p-&amp;gt;Lptr = Add(p-&amp;gt;Lptr, x);
	else
		p-&amp;gt;Rptr = Add(p-&amp;gt;Rptr, x);
	return p;
}

//특정값의 노드 삭제
int Remove(Node **root, const int *x) {
	Node *next, *temp;
	Node **left;
	Node **p = root;

	while (1) { //지울 노드를 찾습니다
		if (*p == NULL) { //그런 값이 없나봐
			printf(&quot;There is no such value of node! Error!&quot;);
			return -1;
		}
		else if(*(&amp;amp;(*p)-&amp;gt;data) == *x)//찾았다!
			break;
		else if (*(&amp;amp;(*p)-&amp;gt;data) &amp;gt; *x) 
			p = &amp;amp;((*p)-&amp;gt;Lptr);
		else 
			p = &amp;amp;((*p)-&amp;gt;Rptr);
	}

	if ((*p)-&amp;gt;Lptr == NULL)
		next = (*p)-&amp;gt;Rptr; 
	else {
		left = &amp;amp;((*p)-&amp;gt;Lptr);
		while ((*left)-&amp;gt;Rptr != NULL)
			left = &amp;amp;(*left)-&amp;gt;Rptr;
		next = *left;
		*left = (*left)-&amp;gt;Lptr;
		next-&amp;gt;Lptr = (*p)-&amp;gt;Lptr;
		next-&amp;gt;Rptr = (*p)-&amp;gt;Rptr;
	}
	temp = *p;
	*p = next;
	free(temp);

	return 0;
}

//트리를 출력함 올림차순이니까 중위순회겠죠?
void PrintTree(const Node *p) {
	if (p != NULL) {
		PrintTree(p-&amp;gt;Lptr);
		printf(&quot;%d &quot;, p-&amp;gt;data);
		PrintTree(p-&amp;gt;Rptr);
	}
}

int main() {
	freopen(&quot;input.txt&quot;, &quot;r&quot;, stdin);
	Node *root = NULL;
	int n, t; scanf(&quot;%d&quot;, &amp;amp;n);
	for (int i = 0; i &amp;lt; n; i++) {
		scanf(&quot;%d&quot;, &amp;amp;t);
		root = Add(root, &amp;amp;t);
	}
	Remove(&amp;amp;root, &amp;amp;t);
	PrintTree(root);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;입력:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;10 //입력할 수의 개수&lt;br /&gt;3&amp;nbsp;88&amp;nbsp;43&amp;nbsp;7&amp;nbsp;23&amp;nbsp;98&amp;nbsp;48&amp;nbsp;33&amp;nbsp;95&amp;nbsp;1 //입력할 수&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;출력:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;올림차순 순서대로~&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;수를 입력받고 입력받은 수를 중위순회하여 올림차순으로 출력하는 프로그램을 간단한 예제로 짜봤습니다. Remove 부분이 조금 어려웠습니다. 집중해서 볼 필요가 있는 부분이라고 생각합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제 풀어보기&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;s&gt;&lt;span style=&quot;color: #333333;&quot;&gt;안녕하세요 PostBarca의 December 입니다. 오늘은 이진검색트리를 응용한 문제를 풀어볼건데요&lt;/span&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;백준 2957 이진탐색트리 링크 :&amp;nbsp;&lt;a href=&quot;https://www.acmicpc.net/problem/2957&quot;&gt;https://www.acmicpc.net/problem/2957&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1554615663103&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2957&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.acmicpc.net/problem/2957&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wHzlL/hyAC8h5CgO/u5vzqNaYrptBnKBPbH2tSk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;2957번: 이진 탐색 트리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;문제 이진 탐색 트리는 모든 노드가 많아야 2개의 자식 노드를 가지고 있는 트리이고, 각 노드에는 수가 하나씩 쓰여있다. 만약 어떤 노드에 쓰여 있는 수가 X라면, 그 노드의 왼쪽 서브트리에는 X보다 작은 수, 오른쪽 서브트리에는 X보다 큰 수만 저장되어 있어야 한다. 1보다 크거나 같고, N보다 작거나 같은 수 N개가 한 번씩 등장하는 수열이 입력으로 주어진다. 이 수열을 이용해서 이진 탐색 트리를 만들려고 한다. 이제 배열의 첫 번째 수를 루트 노드로&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;문제에서 주어진 pseudo 코드대로 제출하면 그대로 시간초과가 나버립니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;이진트리에 대한 이해도가 더 생기면 다시 풀어보도록 하겠습니다.&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;정보가 유익하셨다면 구ㄷ..&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아직은 풀기가 좀 버거운것 같아요 ^^;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 생각을 해보자면 C의 값이 추가되는 회수는 추가되는 노드의 레벨값과 같다는 아이디어를 이용하면 될것 같은데.&lt;/p&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/24</guid>
      <comments>https://postbarca.tistory.com/24#entry24comment</comments>
      <pubDate>Sun, 7 Apr 2019 01:58:20 +0900</pubDate>
    </item>
    <item>
      <title>자료구조 - 연결 리스트(Linked List) with C</title>
      <link>https://postbarca.tistory.com/14</link>
      <description>&lt;h2&gt;선형 리스트란?&lt;/h2&gt;
&lt;p&gt;그냥 리스트 즉 배열과 다른 점은 아마도 데이터를 다루는데 있어서 더 효율적이므로 선형 리스트를 사용하겠죠? 아마 그냥 배열(vector)에 비해서 자료를 중간에 끼워넣거나 할때 더 빠르기 때문입니다. 그냥 배열은 다음과 같은 문제를 갖게됩니다.  &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;
&lt;p&gt;쌓이는 데이터의 크기를 알아야 합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;
&lt;p&gt;데이터의 삽입, 삭제에 따라 데이터를 모두 옮겨야 하기 때문에 효율이 좋지 않습니다.(한칸씩 앞당겨지거나 뒤로 밀리는거는 시간이 O(n) 나옴)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리스트는 자료를 줄지어 나열한 자료구조를 의미합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/camlLY/btqubSFPy4u/p0qW41phOJ5QXbOjJsoSOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/camlLY/btqubSFPy4u/p0qW41phOJ5QXbOjJsoSOk/img.png&quot; data-alt=&quot;데이터들이 줄지어 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/camlLY/btqubSFPy4u/p0qW41phOJ5QXbOjJsoSOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcamlLY%2FbtqubSFPy4u%2Fp0qW41phOJ5QXbOjJsoSOk%2Fimg.png&quot; width=&quot;100%&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터들이 줄지어 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가장 단순한 구조인 선형 리스트(linear list) 또는 연결 리스트(linked list)는 다음과 같이 생겼습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;연결 리스트.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcA6VZ/btquaPJNo57/fjPKkXCj9wlwKpObvCL1Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcA6VZ/btquaPJNo57/fjPKkXCj9wlwKpObvCL1Fk/img.png&quot; data-alt=&quot;데이터들이 포인터로 사슬처럼 연결되어있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcA6VZ/btquaPJNo57/fjPKkXCj9wlwKpObvCL1Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcA6VZ%2FbtquaPJNo57%2FfjPKkXCj9wlwKpObvCL1Fk%2Fimg.png&quot; data-filename=&quot;연결 리스트.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터들이 포인터로 사슬처럼 연결되어있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;이때 각각의 데이터를 &lt;b&gt;노드(node)&lt;/b&gt; 또는 &lt;b&gt;요소(element)&lt;/b&gt;라고 합니다. 각각의 노드(요소)는 데이터와 다음 노드를 가리키는 포인터(c기준)를 가지고 있습니다. 처음에 있는 노드를 &lt;b&gt;머리 노드(head node)&lt;/b&gt;, 끝에 있는 노드를 &lt;b&gt;꼬리 노드(tail node)&lt;/b&gt;라고 합니다. 또한 하나의 앞에있는 노드를 &lt;b&gt;앞 노드(prodecessor node)&lt;/b&gt;, 뒤에 있는 노드를 &lt;b&gt;뒷 노드(successor node)&lt;/b&gt;라고 합니다. 그림의 노드는 단방향 노드입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;연결 리스트와 배열 비교&lt;/h2&gt;
&lt;p&gt;연결 리스트 장점&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;삽입과 제거가 간단합니다. O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;연결 리스트 단점&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터에 접근하려면 직접 탐색을 해야해서 시간이 오래걸려요. O(n)&lt;/li&gt;
&lt;li&gt;메모리를 배열보다 많이 잡아먹어요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배열 장점&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터에 접근하기에 편리합니다. 바로 접근할 수 있어서 O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배열 단점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;크기가 고정되어있어서 추가하려면 재할당 해줘야함&lt;/li&gt;
&lt;li&gt;추가/제거가 복잡해요. 할때마다 데이터가 한칸씩 앞이나 뒤로 밀리니까 O(n)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;노드 알아보기&lt;/h2&gt;
&lt;p&gt;C기준으로 해서 죄송합니다. 전 자바를 할줄 몰라요.  &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;typedef struct {
    Data data;
    struct Node *next; //앞에 struct가 붙는 이유는 Node가 완전히 정의가 안되서 그래요  
}Node;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;c노드.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckM9KO/btquc3mAd36/Jn0zccsTyTDC68g5PK2UQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckM9KO/btquc3mAd36/Jn0zccsTyTDC68g5PK2UQ1/img.png&quot; data-alt=&quot;포인터로 다음 노드를 연결한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckM9KO/btquc3mAd36/Jn0zccsTyTDC68g5PK2UQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckM9KO%2Fbtquc3mAd36%2FJn0zccsTyTDC68g5PK2UQ1%2Fimg.png&quot; data-filename=&quot;c노드.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포인터로 다음 노드를 연결한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;data는 노드에 넣고싶은 자료를 의미합니다. *next 는 다음에 연결하고 싶은 노드를 의미합니다. 노드들이 이 각각의 포인터에 의해 줄줄이 연결되는 구조입니다. 맨 처음이나 맨 마지막엔 이 노드들이 각각 어디를 가리킬까요? 맨 처음엔 head포인터 부터 시작해 맨 마지막 포인터는 NULL을 가리킵니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;그래서 만약에 중간에 새로운 정보를 추가하고 싶다! 그러면 배열은 한 칸씩 뒤로 밀면서 중간에 자리를 확보하겠지만, 연결 리스트는 그냥 앞의 노드의 포인터를 새로 추가할 정보로 다시 연결하고, 해당 노드를 다음 노드로 연결시켜주면 됩니다. 시간이 별로 안걸리겠죠? 실제로요 끼워넣는 과정 자체는 O(1)입니다. 끼워넣을 곳을 찾는 것은 O(n)이겠지만...&lt;/p&gt;
&lt;h2&gt;노드들로 간단한 연결 리스트를 만들어 보자&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;일단 연결리스트에는 노드들을 총괄(?)하는 List 구조체가 필요합니다. 머리노드 포인터와 현재 노드를 선택하는 포인터를 가집니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;typedef struct {
    Node *head; //머리노드
    Node *crnt; //현재선택노드
}List;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;List struct 그림.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbNIy6/btqubAZYlZM/xOvccZA8MFDtiwNOqqkNA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbNIy6/btqubAZYlZM/xOvccZA8MFDtiwNOqqkNA1/img.png&quot; data-alt=&quot;이런느낌?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbNIy6/btqubAZYlZM/xOvccZA8MFDtiwNOqqkNA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbNIy6%2FbtqubAZYlZM%2FxOvccZA8MFDtiwNOqqkNA1%2Fimg.png&quot; data-filename=&quot;List struct 그림.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이런느낌?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;이를 이용해서 간단한 함수들을 만들고 역시 간단한 연결 리스트 예제를 만들어 보았습니다. char을 list에 추가하고 출력해보는 예제입니다.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;이 예제에선 crnt는 tail이 새로 생성될 때 마다 움직여서 사실 큰 의미는 없습니다.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre class=&quot;zephir&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;
typedef struct {
    char data;
    struct Node *next;
}Node;

typedef struct {
    Node *head;
    Node *crnt;
}List;

//노드 동적생성
Node *AllocNode(void) {
    return calloc(1, sizeof(Node));
}
//list 초기화
void Initialize(List *list) {
    list-&amp;gt;head = list-&amp;gt;crnt = AllocNode();
}
//생성된 노드에 정보 입력
void setNode(Node *n, const char *x, const Node *next) {
    n-&amp;gt;data = *x;
    n-&amp;gt;next = next;
}
//list 의 crnt 에서 add
void add(List *list, const char *x) {
    Node *ptr = AllocNode();
    if (list-&amp;gt;crnt-&amp;gt;next == NULL) { //꼬리 노드인지 확인
        setNode(ptr, x, NULL);
        list-&amp;gt;crnt-&amp;gt;next = ptr;
        list-&amp;gt;crnt = ptr; //새로 생성한 노드로
    }
    else { //꼬리노드 아님
        setNode(ptr, x, list-&amp;gt;crnt-&amp;gt;next);
        list-&amp;gt;crnt-&amp;gt;next = ptr;
        list-&amp;gt;crnt = ptr; //새로 생성한 노드로
    }
}
//list 의 head 부터 시작해 출력
void print(List *list) {
    list-&amp;gt;crnt = list-&amp;gt;head-&amp;gt;next; 
    //head 는 데이터 비었으니까 넘어감
    while (list-&amp;gt;crnt-&amp;gt;next != NULL) {
        printf(&quot;%c &quot;, list-&amp;gt;crnt-&amp;gt;data);
        list-&amp;gt;crnt = list-&amp;gt;crnt-&amp;gt;next;
    }
    printf(&quot;%c &quot;, list-&amp;gt;crnt-&amp;gt;data);
}
int main() {
    freopen(&quot;input.txt&quot;, &quot;r&quot;, stdin);
    List list;
    Initialize(&amp;amp;list);
    char str[20];
    scanf(&quot;%s&quot;, str);
    for (int i = 0; str[i] != '\0'; i++) {
        add(&amp;amp;list, &amp;amp;str[i]);
    }
    print(&amp;amp;list);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;문제도 풀어보자  &lt;/h2&gt;
&lt;p&gt;&amp;nbsp;사실 이론만 알면 재미가 없죠. 문제도 풀어보겠습니다. (위에서 노드 데이터를 char로 한 이유는 사실 이거 때문  )&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;백준 5397 키로거 링크 : &lt;a href=&quot;https://www.acmicpc.net/problem/5397&quot;&gt;https://www.acmicpc.net/problem/5397&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;연결 리스트를 만들어서 구해주면 됩니다. 하지만 여기서 추가로 응용해야할 점은 crnt 를 앞뒤로 움직일 수 있도록 해야합니다. 그러러면 이중 연결 리스트를 만들어주면 됩니다. 지금까지 만든 연결 리스트는 단방향 리스트이고 이중 연결 리스트는 양방향 리스트입니다. Node를 조금 바꿔줍시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;이중연결리스트.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdfKSe/btquaO5xQds/NiFWkA42EKrB2vOV9r6us0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdfKSe/btquaO5xQds/NiFWkA42EKrB2vOV9r6us0/img.png&quot; data-alt=&quot;이중 연결 리스트는 양방향으로 탐색할수있다  &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdfKSe/btquaO5xQds/NiFWkA42EKrB2vOV9r6us0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdfKSe%2FbtquaO5xQds%2FNiFWkA42EKrB2vOV9r6us0%2Fimg.png&quot; data-filename=&quot;이중연결리스트.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이중 연결 리스트는 양방향으로 탐색할수있다  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;typedef struct {
    char data;
    struct Node *next, *prev; //prev 추가
}Node;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;이제 남은건 바뀐 struct Node와 문제에 맞게 함수를 구현하기만 하면 됩니다.&lt;/p&gt;
&lt;p&gt;전 -&amp;gt; 를 막 쓰고 예외처리 이상하게 하고 하니까 에러가 나서 고치느라 힘들었네요 ㅋㅋ 와 징그러워 나중에 다시 다듬어 볼게요&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;zephir&quot;&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;
typedef struct {
    char data;
    struct Node *next, *prev;
}Node;

typedef struct {
    Node *head;
    Node *crnt;
}List;

//함수
//노드 동적생성
Node *AllocNode(void) {
    return calloc(1, sizeof(Node));
}
//list 초기화
void Initialize(List *list) {
    list-&amp;gt;head = list-&amp;gt;crnt = AllocNode();
}
//생성된 노드에 정보 입력
void setNode(Node *n, const char *x, const Node *next, const Node *prev) {
    n-&amp;gt;data = *x;
    n-&amp;gt;next = next;
    n-&amp;gt;prev = prev;
}
//list 의 crnt 에서 add
void add(List *list, const char *x) {
    Node *ptr = AllocNode();
    if (list-&amp;gt;crnt-&amp;gt;next == NULL) { //꼬리 노드인지 확인
        setNode(ptr, x, NULL, list-&amp;gt;crnt);
        list-&amp;gt;crnt-&amp;gt;next = ptr;
        list-&amp;gt;crnt = ptr; //새로 생성한 노드로
    }
    else { //꼬리노드 아님
        Node *back = list-&amp;gt;crnt-&amp;gt;next;
        Node *front = list-&amp;gt;crnt;
        setNode(ptr, x, list-&amp;gt;crnt-&amp;gt;next, list-&amp;gt;crnt);
        front-&amp;gt;next = ptr;
        back-&amp;gt;prev = ptr;
        list-&amp;gt;crnt = ptr; //새로 생성한 노드로
    }
}
//list의 crnt 에서 remove
void remover(List *list) {
    if (list-&amp;gt;crnt == list-&amp;gt;head) { //맨앞의것?
        return;
    }
    else if (list-&amp;gt;crnt-&amp;gt;next == NULL) { //꼬리임?
        Node *ptr = list-&amp;gt;crnt-&amp;gt;prev; //crnt 앞에꺼 불러옴
        Node *t = list-&amp;gt;crnt;
        list-&amp;gt;crnt = ptr;
        ptr-&amp;gt;next = NULL; 
        free(t);
    }
    else { //그냥 중간
        Node *t = list-&amp;gt;crnt;
        Node *ptr = list-&amp;gt;crnt-&amp;gt;next;
        ptr-&amp;gt;prev = list-&amp;gt;crnt-&amp;gt;prev;
        ptr = list-&amp;gt;crnt-&amp;gt;prev;
        ptr-&amp;gt;next = list-&amp;gt;crnt-&amp;gt;next;
        list-&amp;gt;crnt = ptr;
        free(t);
    }
}
//crnt 왼쪽으로 한칸
void Lm(List *list) {
    if (list-&amp;gt;crnt == list-&amp;gt;head) {//맨 왼쪽?
        return;
    }
    else {
        list-&amp;gt;crnt = list-&amp;gt;crnt-&amp;gt;prev;
    }
}
//crnt 오른쪽으로 한칸
void Rm(List *list) {
    if (list-&amp;gt;crnt-&amp;gt;next == NULL) { //맨 오른쪽?
        return;
    }
    else {
        list-&amp;gt;crnt = list-&amp;gt;crnt-&amp;gt;next;
    }
}
//list 의 head 부터 시작해 출력
void print(List *list) {
    if (list-&amp;gt;crnt == list-&amp;gt;head &amp;amp;&amp;amp; list-&amp;gt;crnt-&amp;gt;next == NULL) {
        return;
    }
    list-&amp;gt;crnt = list-&amp;gt;head-&amp;gt;next; 
    //head 는 데이터 비었으니까 넘어감
    while (list-&amp;gt;crnt-&amp;gt;next != NULL) {
        printf(&quot;%c&quot;, list-&amp;gt;crnt-&amp;gt;data);
        list-&amp;gt;crnt = list-&amp;gt;crnt-&amp;gt;next;
    }
    printf(&quot;%c&quot;, list-&amp;gt;crnt-&amp;gt;data);
}

int main() {
//    freopen(&quot;input.txt&quot;, &quot;r&quot;, stdin);
    int n; scanf(&quot;%d&quot;, &amp;amp;n); getchar();
    while (n--) {
        List list;
        Initialize(&amp;amp;list);
        char c; c = getchar();
        while (c != '\n') {
            if (c == '&amp;lt;') {
                Lm(&amp;amp;list);
            }
            else if (c == '&amp;gt;') {
                Rm(&amp;amp;list);
            }
            else if (c == '-') {
                remover(&amp;amp;list);
            }
            else {
                add(&amp;amp;list, &amp;amp;c);
            }
            c = getchar();
            if (c == -1)
                break;
        }
        print(&amp;amp;list);
        printf(&quot;\n&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>정리</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/14</guid>
      <comments>https://postbarca.tistory.com/14#entry14comment</comments>
      <pubDate>Sat, 6 Apr 2019 22:27:42 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 5397 키로거</title>
      <link>https://postbarca.tistory.com/22</link>
      <description>&lt;h2&gt;백준 5397 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5397&quot;&gt;https://www.acmicpc.net/problem/5397&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;풀이 방법&lt;/h2&gt;
&lt;p&gt;스택 2개를 구성하여 왼쪽 스택, 오른쪽 스택을 구성합니다&lt;br /&gt;한 글자씩 입력을 받아 왼쪽 스택에 넣어주고, 방향이나 백 스페이스 기호는 따로 처리하여 줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp;1. '&amp;lt;' 의 경우엔 왼쪽의 스택에서 빼서 오른쪽의 스택에 넣어줍니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp;2. '&amp;gt;' 의 경우엔 오른쪽의 스택에서 빼서 왼쪽의 스택에 넣어줍니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp;3. '-' 의 경우엔 왼쪽의 스택에서 하나 빼줍니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;입력이 끝나면 왼쪽의 스택에서 모두 빼서 오른쪽에 넣어줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 오른쪽에서 하나씩 빼면서 출력해주면 끝!  &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Linked List를 이용한 풀이 :&amp;nbsp;&lt;a href=&quot;https://chika.tk/14&quot;&gt;https://chika.tk/14&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;stack&amp;gt;
using namespace std;
int main() {
    //freopen(&quot;input.txt&quot;, &quot;r&quot;, stdin);
    int n; scanf(&quot;%d&quot;, &amp;amp;n); getchar();
    while (n--) {
        stack &amp;lt;char&amp;gt; l, r;
        char c;
        scanf(&quot;%c&quot;, &amp;amp;c);
        while (c != '\n') {
            if (c == '&amp;lt;') {
                if (!l.empty()) {
                    r.push(l.top());
                    l.pop();
                }
            }
            else if (c == '&amp;gt;') {
                if (!r.empty()) {
                    l.push(r.top());
                    r.pop();
                }
            }
            else if (c == '-') {
                if (!l.empty()) {
                    l.pop();
                }
            }
            else {
                l.push(c);
            }
            if (scanf(&quot;%c&quot;, &amp;amp;c) == -1)
                break;
        }
        while (!l.empty()) {
            r.push(l.top());
            l.pop();
        }
        while (!r.empty()) {
            printf(&quot;%c&quot;, r.top());
            r.pop();
        }
        printf(&quot;\n&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/22</guid>
      <comments>https://postbarca.tistory.com/22#entry22comment</comments>
      <pubDate>Fri, 5 Apr 2019 21:42:11 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 5558 チーズ</title>
      <link>https://postbarca.tistory.com/21</link>
      <description>&lt;h2&gt;백준 5558 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5558&quot;&gt;https://www.acmicpc.net/problem/5558&lt;/a&gt;&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;문제 해석(클릭?)&lt;/summary&gt;
&lt;div&gt;
&lt;h2&gt;문제&lt;/h2&gt;
&lt;p&gt;올해도 JOI구역에서 치즈 공장이 생산을 시작해, 쥐들이 집에서 얼굴을 내밀었다. JOI구역은 동서남북으로 구역이 정리되어있고, 각 구역은 쥐집, 치즈공장, 장애물, 빈땅으로 정리할 수 있다. 쥐들은 집에서 출발하여 모든 치즈공장을 방문하여 치즈를 하나씩 먹는다. 이 구역에는 N개의 치즈공장이 있고, 치즈를 하나 먹을 때마다 체력이 1씩 오른다. 다만, 쥐는 자신의 체력보다 단단한 치즈를 먹을 수는 없다. 쥐는 동서남북으로 이웃해있는 구획에 1분걸려 이동할수 있으나, 장애물이 있는 구역에는 들어갈 수 없다. 치즈공장에서 치즈를 먹지 않고 지나가는 것도 가능하다. 모든 치즈를 먹는데 걸리는 최단시간을 구하여라. 단, 쥐가 치즈를 먹는데 걸리는 시간은 무시한다.&lt;/p&gt;
&lt;h2&gt;입력&lt;/h2&gt;
&lt;p&gt;입력은 H+1행이 있다. 첫째행에는 세 정수 H，W，N (1 ≦ H ≦ 1000，1 ≦ W ≦ 1000，1 ≦ N ≦ 9)가 이 순서대로 공백에 구분지어 적혀있다. 두번째 행부터 H+1행째까지의 각행에는 'S'，'1', '2', ..., '9'，'X'，'.'으로 이루어진 W문자의 문자열이 적혀있어, 각각이 각구획의 상태를 표시한다. 북쪽에서 i번째, 서쪽에서 j번째의 구획을 (i,j)로 기입하는 것으로 하면 (1 ≦ i ≦ H, 1 ≦ j ≦ W), 제 i+1번째 행의 j번째 문자는 구획(i,j) 이 쥐집인 장소는 'S'가 되고, 장애물인 장소는 'X'가 되고, 빈 땅은 '.' 이 된다. 단단함이 1, 2, ..., 9인 치즈를 생산하는 공장이 있는 장소는 각각 '1', '2', ..., '9' 이 된다. 입력에는 쥐집과 단단함 1, 2, ..., N의 치즈를 생산하는 공장이 각각 하나씩 있다. 다른 집단은 장애물 혹은 빈 땅이 보증되어있다. 쥐는 모든 치즈를 먹는것이 보증되어있다.&lt;/p&gt;
&lt;h2&gt;출력&lt;/h2&gt;
&lt;p&gt;모든 치즈를 먹는데 걸리는 최단시간 (분)을 표현하는 정수를 1행에 출력하여라.&lt;/p&gt;
&lt;h2&gt;사실 예제의 입력하고 출력만 보면 느낌 오죠?  &lt;/h2&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2&gt;풀이방법&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;難しくはなかった。&lt;/span&gt; &lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;memory.h&amp;gt;
#include&amp;lt;queue&amp;gt;
using namespace std;
char map[1005][1005];
bool visit[1005][1005];
int target[12][2];
int start[2];
int r, c, n, cnt;
int ly[] = { 1,-1,0,0 };
int lx[] = { 0,0,1,-1 };
typedef struct record {
    int y, x, mov_n;
};
bool isin(int y, int x) {
    if (y &amp;gt;= 1 &amp;amp;&amp;amp; y &amp;lt;= r &amp;amp;&amp;amp; x &amp;gt;= 1 &amp;amp;&amp;amp; x &amp;lt;= c &amp;amp;&amp;amp; map[y][x] != 'X')
        return true;
    else
        return false;
}
void find(int y, int x, int n) {
    queue &amp;lt;record&amp;gt; q;
    q.push({ y,x,0 });
    visit[y][x] = true;
    while (!q.empty()) {
        record t = q.front(); q.pop();
        // 도착했는지 확인
        if (t.y == target[n][0] &amp;amp;&amp;amp; t.x == target[n][1]) {
            cnt += t.mov_n;
            start[0] = t.y;
            start[1] = t.x;
            break;
        }
        // 아니면 계속 돎
        for (int i = 0; i &amp;lt; 4; i++) {
            int ny = t.y + ly[i];
            int nx = t.x + lx[i];
            if (isin(ny, nx) &amp;amp;&amp;amp; !visit[ny][nx]) {
                q.push({ ny, nx, t.mov_n + 1 });
                visit[ny][nx] = true;
            }
        }
    }
}
int main() {
    //freopen(&quot;input.txt&quot;, &quot;r&quot;, stdin);
    cin &amp;gt;&amp;gt; r &amp;gt;&amp;gt; c &amp;gt;&amp;gt; n;
    //입력
    for (int i = 1; i &amp;lt;= r; i++) {
        for (int j = 1; j &amp;lt;= c; j++) {
            cin &amp;gt;&amp;gt; map[i][j];
            if (map[i][j] &amp;gt;= '0' &amp;amp;&amp;amp; map[i][j] &amp;lt;= '9') { //순서 지정
                target[map[i][j] - '0'][0] = i;
                target[map[i][j] - '0'][1] = j;
            }
            if (map[i][j] == 'S') { //시작지점
                start[0] = i;
                start[1] = j;
            }
        }
    }
    //찾는 과정 시작
    for (int i = 1; i &amp;lt;= n; i++) {
        memset(visit, false, sizeof(visit));
        find(start[0], start[1], i);
    }
    cout &amp;lt;&amp;lt; cnt;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/21</guid>
      <comments>https://postbarca.tistory.com/21#entry21comment</comments>
      <pubDate>Fri, 5 Apr 2019 18:36:43 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 2975 Transactions</title>
      <link>https://postbarca.tistory.com/20</link>
      <description>&lt;h2&gt;백준링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2975&quot;&gt;https://www.acmicpc.net/problem/2975&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
using namespace std;
int main() {
    freopen(&amp;quot;input.txt&amp;quot;, &amp;quot;r&amp;quot;, stdin);
    int account, change, result;
    char task;
    while (1) {
        cin &amp;gt;&amp;gt; account &amp;gt;&amp;gt; task &amp;gt;&amp;gt; change;
        if (account == 0 &amp;amp;&amp;amp; change == 0 &amp;amp;&amp;amp; task == &amp;#39;W&amp;#39;) break;
        if (task == &amp;#39;W&amp;#39;) result = account - change;
        if (task == &amp;#39;D&amp;#39;) result = account + change;
        if (result &amp;lt; -200) cout &amp;lt;&amp;lt; &amp;quot;Not allowed&amp;quot; &amp;lt;&amp;lt; endl;
        else cout &amp;lt;&amp;lt; result &amp;lt;&amp;lt; endl;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/20</guid>
      <comments>https://postbarca.tistory.com/20#entry20comment</comments>
      <pubDate>Tue, 2 Apr 2019 07:59:36 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 4287 Word Ratios</title>
      <link>https://postbarca.tistory.com/19</link>
      <description>&lt;h2&gt;백준 링크&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/4287&quot;&gt;https://www.acmicpc.net/problem/4287&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;각 자리마다 몇개 차이나는지 구하고, 출력하면 됩니다.  &lt;/p&gt;
&lt;h2&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;string&amp;gt;
using namespace std;
int diff(int a, int b) { //몇개 차이나는지 구함
    if (b - a &amp;gt;= 0) 
        return b - a;
    else 
        return 26 - (a - b);
}
char change(char c, int n) { //바꿔줌
    if (n == 0) 
        return c;
    else {
        if (c == 'z')
            return change('a', n - 1);
        else
            return change(c + 1, n - 1);
    }
}
int main() {
    freopen(&quot;input.txt&quot;, &quot;r&quot;, stdin);
    int t;
    while (1) {
        string s[4];
        cin &amp;gt;&amp;gt; s[0];
        if (s[0][0] == '#') break;
        cin &amp;gt;&amp;gt; s[1] &amp;gt;&amp;gt; s[2];
        for (int i = 0; i &amp;lt; s[0].length(); i++) {
            t = diff(s[0][i], s[1][i]); 
            s[3].push_back(change(s[2][i], t));
        }
        cout &amp;lt;&amp;lt; s[0] &amp;lt;&amp;lt; ' ' &amp;lt;&amp;lt; s[1] &amp;lt;&amp;lt; ' ' &amp;lt;&amp;lt; s[2] &amp;lt;&amp;lt; ' ' &amp;lt;&amp;lt; s[3] &amp;lt;&amp;lt; endl;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>어읽로꾸거</author>
      <guid isPermaLink="true">https://postbarca.tistory.com/19</guid>
      <comments>https://postbarca.tistory.com/19#entry19comment</comments>
      <pubDate>Mon, 1 Apr 2019 19:20:28 +0900</pubDate>
    </item>
  </channel>
</rss>