<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>알음알음 성장로그</title>
    <link>https://hei-jayden.tistory.com/</link>
    <description>사람은 사람을 통해 성장한다</description>
    <language>ko</language>
    <pubDate>Fri, 19 Jun 2026 20:33:38 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>RMRM_</managingEditor>
    <image>
      <title>알음알음 성장로그</title>
      <url>https://tistory1.daumcdn.net/tistory/4905356/attach/15088856076b4e5b995edd3e37c765e6</url>
      <link>https://hei-jayden.tistory.com</link>
    </image>
    <item>
      <title>두 번째 직장으로 이직, 계약서 서명</title>
      <link>https://hei-jayden.tistory.com/361</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;인생에 변곡점이 있다면 언제일까.&lt;br&gt;&lt;br&gt; 업무를 마치고 내가 향한 곳은 집이 아니라 사무실이었다. 공유오피스 안쪽에 위치한 한 기업의 대표님과 만나 계약서에 서명을 했다. 이 순간이 오기까지 꽤나 우여곡절이 많았다. 순간 엎어질수도 있었고, 잘못된 판단을 하는게 아닌지 주저하는 순간도 많았다. 하지만, 머리는 차갑게 마음은 뜨겁게… 아주 만족스럽진 않지만, 내가 내린 결정은 yes였다. 계약서 2부를 나란히 두고, 도장에 붉은 인주를 눌러 뭍힐 때, 약간 울컥했다. 이전 회사에 대한 복수심 내지 통쾌함마저 느껴졌다. 그리고 계약서에 절반씩 도장이 찍힐 때는 비장함이 느껴졌다. 반드시 저기 표기된 내 가치보다 나를 증명할거다..!&lt;br&gt;&lt;br&gt; 이직을 생각하게 된 이유는 업무에 대한 만족감과 성장가능성이다. SI/SM 업무를 3~4개월 간 경험하면서 도전과 목표의식이 흐릿해져가는 것을 느꼈기 때문이다. 정해진 업무만을 잘 수행하면 되는 곳에서 ‘왜?’라는 생각은 쉽게 힘을 잃었다. 때로는 동태눈깔로 기계적으로 움직이는 것이 자긍심 강한 내 자아를 보호하는 데 도움이 될 수 있다는 것을 알게 되었다. 안타깝게도 말이다. 나쁜 습관은 빨리 물든다는 이야기가 있던데정말 그렇게 되어가는 내 모습을 보았다. 일에 대한 불만이 사람으로 향하는 것을 보며 부끄러웠던 순간이 많았다. 그런데 그도 그럴것이, … 라면서 불평 불만을 쏟아낼 순 있지만 이직을 앞두고 좋은 기억들로만 남겨두고 싶다. 대신 ‘각자의 시간을 소중히 여기는 문화’만큼은 있는 곳에서 일해야겠다는 확신은 얻었다.&lt;br&gt;&lt;br&gt; 이직에 큰 도움이 되었던 점도 분명있었다. 백엔드가 취업이 잘된다. 몸값이 상대적으로 높다는 얘기에 백엔드 스택만 쌓았었는데, 프론트 개발을 경험할 수 있었다. React 업무만 잔뜩한 덕분에 프론트엔드 개발자로 지원할 수 있었다. 기껏 뽑아놓고 속였단 생각을 지울 수는 없지만, 어물쩡 프론트엔드 업무를 담당했고 많이 배울 수 있었다. 이직을 앞두고 면담을 진행하면서, ‘저 때는 프론트 / 백엔드 구분이 따로 없었어요’라는 말씀을 하셨었는데 비자발적 풀스택이 꽤 높은 경쟁률을 뚫는데 도움이 되지 않았을까 싶다.&lt;br&gt;&lt;br&gt; 새로 이직하는 회사는 스타트업, 서비스 회사이다. SI에서는 내가 정확하게 이해되지 않는 상태로 코드를 꿰메어가면서 개발을 진행해야했고, 결과에 대한 피드백이 없다보니 힘을 얻지 못하고 지쳐버렸다. 그에 반해 새로운 도화지에 코드를 한줄씩 쌓아 올려볼 수 있을 것으로 기대하고 있다. CSS, Javascript, React 부터 다시 공부하면서 기획 단계부터 모듈화를 신경써볼 수 있을 것 같고, 나중에는 Next.js, Flutter에 도전할 기회를 얻었다. 새롭게 작성하는 코드들이 내 자부심이 될 수 있도록 코드를 작성하고 정성스럽게 가꿔나가보고 싶다.&lt;br&gt;&lt;br&gt; 더불어 오랫동안 묵혀두었던 블로그를 다시 관리해볼까 한다. 작은 규모의 스타트업에서 도전해본 순간들과 사수 없이 고생하고, 고민하는 것들을 기록해보고 싶다. 목표하는게 있다면 잘 쓰기보다 많이 그리고 꾸준히 쓰는 것이다. 계약서에 도장이 찍힐 때 각오했던 바 대로, 내 가치를 잘 증명해나가고 있는지 확인할 수 있는 척도가 되었으면 좋겠다.&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;&lt;/p&gt;</description>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/361</guid>
      <comments>https://hei-jayden.tistory.com/361#entry361comment</comments>
      <pubDate>Tue, 2 Jan 2024 21:18:42 +0900</pubDate>
    </item>
    <item>
      <title>취업 면접 후기</title>
      <link>https://hei-jayden.tistory.com/360</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;자격증에 집중하던 시기를 보냈던 8월을 뒤로하고, 9월 달 부터는 공채 뿐만 아니라 중소기업까지 지원의 폭을 넓히고 있다. 대기업 채용 프로세스인 채용 공고 - 지원서 제출 - 코딩 테스트 - 1차 및 2차 면접.. 까지 긴 시간을 취업 준비라는 명목으로 버티기에는 이제는 여유가 없다고 생각하기 때문에, 포트폴리오와 이력서를 만들어서 채용 공고가 보이는 거의 모든 곳에 지원서를 제출했다. 약 2주간의 기간동안 60여 개의 기업에 지원서를 제출했고, 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;클라우드와 관련된 기업의 면접을 다녀왔다. 서울/대전에 지사가 있는 기업의 대전 지사의 면접을 다녀왔다. 4분이나 들어오셔서 긴장을 많이했었는데, 푸근한 분위기로 질문해주시고 피드백을 진행해주셔서 면접 경험 자체는 좋은 경험을 가질 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인적 사항에 관한 질문&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로젝트에 관한 질문&lt;/li&gt;
&lt;li&gt;공백기에 대한 질문&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;감사하게도 4분의 모든 면접관 분께서 출력해간 포트폴리오를 하나씩 살펴봐주셨다. 이전까지 두 차례의 면접에서는 이력서와 함께 낸 포트폴리오에 대해서도 확인하지 않은 경우도 있었는데, 꼼꼼히 읽어보고 질문을 건네주셨다. 기본적인 프로필을 읽어보고 졸업 이후 공백기에 대해 질문하셨고, 프로젝트에 대한 질문을 이어갔다. 진행했던 프로젝트와 사용한 기술에 대해 질문을 많이 해주셨는데, 스스로 사용한 기술에 대한 기반이 탄탄하지 않았음을 느낄 수 있었다. 질문 받았던 기술 질문 중에서 생각나는 것들은 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기술 질문&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;도커란 무엇인가? VM이 무겁다는 기준이 무엇인가?&lt;/li&gt;
&lt;li&gt;동시에 여러 개의 요청이 들어왔을 때 서버를 어떻게 구현해야 한다고 생각하는가?&lt;/li&gt;
&lt;li&gt;애자일 방식 외에 진행해봤던 방식?&lt;/li&gt;
&lt;li&gt;진행했던 티켓팅 서비스가 암표거래를 방지할 수 있다고 생각하는지?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;면접을 통해 얻은 정보&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PaaS-TA&lt;/li&gt;
&lt;li&gt;클라우드 개발자와 클라우드 엔지니어는 조금 다른 개념&lt;/li&gt;
&lt;li&gt;인터넷에서 접한 정보를 무비판적으로 수용하는 것은 굉장히 위험한 일&lt;/li&gt;
&lt;li&gt;AWS cloud외에 KT Cloud를 사용하는 이유&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정보를 올바르게 비평하고 판단할 수 있는 근거는 네트워크 이론, 운영체제 이론 등 컴퓨터 공학 지식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 컴퓨터 공학 지식을 쌓고, 프로젝트에 적용하는 기술에 대해 깊이 고민해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;&quot;맞는데... 기묘하게 틀리네&quot; 라며 농담삼아 건네셨던 말씀이 여운이 남는다. 생각해보면 프로젝트 진행할 적에 적용을 위해 바짝 배웠을 뿐, 비판적으로 생각하거나 이론적 기반을 다지진 못했다보니 부족한 부분임을 명확하게 느꼈다. (코딩 테스트와 이력서 작성이 아무래도 먼저다보니.. 취준생은 서글프다..)&lt;/p&gt;</description>
      <category>비정기적인 일기</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/360</guid>
      <comments>https://hei-jayden.tistory.com/360#entry360comment</comments>
      <pubDate>Wed, 13 Sep 2023 22:32:50 +0900</pubDate>
    </item>
    <item>
      <title>[AWS/Cloud] 강의 노트 : 고가용성 및 스케일링성: ELB 및 ASG</title>
      <link>https://hei-jayden.tistory.com/359</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;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emsYNe/btstxlBHOCv/p6iolNQabUNU9CtG60PSZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emsYNe/btstxlBHOCv/p6iolNQabUNU9CtG60PSZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emsYNe/btstxlBHOCv/p6iolNQabUNU9CtG60PSZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemsYNe%2FbtstxlBHOCv%2Fp6iolNQabUNU9CtG60PSZ1%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;576&quot; height=&quot;302&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;고가용성 및 스케일링성&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;확장성&lt;/h3&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수직 확장성 : 인스턴스의 크기를 확장하는 것
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1개의 인스턴스가 더 많은 일을 처리할 수 있도록 크기를 키움&lt;/li&gt;
&lt;li&gt;DB와 같이 분산되지 않은 시스템에서 흔히 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;수평 확장성 (=탄력성)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;애플리케이션에서 인스턴스나 시스템의 수를 늘리는 방법&lt;/li&gt;
&lt;li&gt;분배 시스템이 있을 때 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;애플리케이션 또는 시스템을 &lt;b&gt;적어도 둘 이상의 AZ&lt;/b&gt;나 데이터 센터에서 가동 중이라는 것을 의미&lt;/li&gt;
&lt;li&gt;데이터 센터에서의 손실에서 살아남는 것이 목표 : 센터 하나가 멈춰도 계속 작동이 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EC2의 고가용성 및 확장성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;확장성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수직 확장 : 인스턴스의 크기를 늘리는 것 (scale up / down)&lt;/li&gt;
&lt;li&gt;수평 확장 : 인스턴스의 수를 늘리는 것 (scale out / in)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;고가용성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일 애플리케이션의 동일 인스턴스를 다수의 AZ에 걸쳐 실행하는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ELB (Elastic Load Balancing)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로드 밸런서 : 서버 혹은 서버셋, 트래픽을 백엔드나 다운스트림 EC2 인스턴스 또는 서버들로 전달하는 역할&lt;/li&gt;
&lt;li&gt;더 많은 인스턴스가 연결 &amp;rarr; &lt;b&gt;EC2 인스턴스로 가는 부하가 더욱 분산&lt;/b&gt;되도록 함&lt;/li&gt;
&lt;li&gt;유저들은 백엔드 인스턴스 중 어떤 것에 연결되어 있는지 알 수 없다&lt;/li&gt;
&lt;li&gt;유저들은 자신들이 ELB로 연결되면 한 엔드 포인트에 연결이 된다는 것만 알고 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로드밸런서의 필요성&lt;/h3&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;단일 액세스 지점(DNS)을 노출&lt;/b&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;로드 밸런서가 상태 확인 매커니즘으로 어떤 인스턴스로 트래픽을 보낼 수 없는지 확인 &amp;rarr; &lt;b&gt;인스턴스 상태 확인 가능&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSL 종료를 할 수 있으므로 웹 사이트에 &lt;b&gt;암호화된 HTTPS 트래픽&lt;/b&gt;을 가질 수 있다&lt;/li&gt;
&lt;li&gt;쿠키로 고정도를 강화할 수 있고, 영역에 걸친 고가용성을 가지며, 클라우드 내에 개인 트래픽과 공공 트래픽을 분리할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로드밸런서 사용 이유&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관리형 로드 밸런서 : AWS가 업그레이드와 유지 관리 및 고가용성을 책임, 로드 밸런서의 작동 방식을 수정할 수 있게끔 일부 구성 놉도 제공&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;/li&gt;
&lt;li&gt;자체적으로 관리할 때 확장성 측면에서 굉장히 번거롭다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;로드 밸런서는 다수의 AWS 서비스들과 통합되어 있다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2, EC2 스케일링 그룹, ACM, Route 53 &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;상태 확인&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ELB가 EC2 인스턴스 작동이 올바르게 되고 있는 지 여부를 확인하기 위해 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작동되지 않으면 EC2 인스턴스로 트래픽을 보낼 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;상태 확인은 포트와 라우터를 통해 이뤄짐
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스가 HTTP 상태코드로 200을 보내지 않는다면 인스턴스 상태가 좋지 않다고 기록&lt;/li&gt;
&lt;li&gt;&amp;rarr; ELB는 해당 EC2로 트래픽을 보내지 않게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AWS의 네 종류의 관리형 로드 밸런서&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;클래식 ELB (= CLB)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 세대 또는 V1&lt;/li&gt;
&lt;li&gt;HTTP, HTTPS, TCP, SSL, secure TCP 지원&lt;/li&gt;
&lt;li&gt;AWS에서 사용을 권장하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;신형 ELB (= ALB)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP, HTTPS, WebSoket 프로토콜 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;네트워크 로드 밸런서
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP, TLS, secure TCP, UDP 프로토콜 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;게이트웨이 로드 밸런서 (=GWLB)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 층에서 작동 &amp;rarr; 3계층과 IP 프로토콜에서 작동&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cf. 결론적으로 ALB를 사용하는 것을 권장&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로드밸런서 보안&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유저는 HTTP나 HTTPS를 사용해 로드밸런서 접근 가능&lt;/li&gt;
&lt;li&gt;EC2 인스턴스는 로드 밸런서를 통해 들어오는 트래픽만을 관리&amp;rArr; 로드 밸런서에서 온 트래픽 만을 허용하는 강력한 보안 매커니즘 가능&lt;/li&gt;
&lt;li&gt;&amp;rarr; 접근 소스를 IP 범위가 아니라 보안 그룹으로 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ALB(Application Load Balancer, v2)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;7계층, 즉 HTTP 전용 로드 밸런서로 &lt;b&gt;머신 간 다수 HTTP 애플리케이션의 라우팅에 사용&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동일 EC2 인스턴스 상의 여러 애플리케이션에 부하를 분산&lt;/b&gt;, &lt;b&gt;컨테이너와 ECS를 사용&lt;/b&gt;하게 됨&lt;/li&gt;
&lt;li&gt;HTTP/2와 WebSocket을 지원&lt;/li&gt;
&lt;li&gt;리다이렉트 지원 : HTTP에서 HTTPS로 트래픽을 자동 리다이렉트하려는 경우 &amp;rarr; 로드 밸런서 레벨에서 가능&lt;/li&gt;
&lt;li&gt;경로 라우팅 지원
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대상 그룹에 따른 라우팅 가능 : ex) URL 대상 경로에 기반한 라우팅&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;b&gt;마이크로 서비스&lt;/b&gt;나 &lt;b&gt;컨테이너 기반 애플리케이션&lt;/b&gt;에 가장 좋은 로드 밸런서&lt;/li&gt;
&lt;li&gt;도커나 ECS의 경우 ALB가 가장 적합한 로드 밸런서가 될 것 &amp;rarr; 포트 맵핑 기능으로 ECS 인스턴스의 동적 포트로의 리다이렉션을 가능하게 해준다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ALB는 하나 만으로도 다수의 애플리케이션을 처리&lt;/b&gt;할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;대상 그룹&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스 - 오토 스케일링 그룹에 의해 관리 가능&lt;/li&gt;
&lt;li&gt;ECS 작업&lt;/li&gt;
&lt;li&gt;람다 함수&lt;/li&gt;
&lt;li&gt;IP 주소 (사설 IP 주소)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쿼리 문자열이나 매개변수 라우팅 사용 &amp;rarr; 대상 그룹을 다르게 라우팅 규칙을 설정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;알고 있으면 좋을 것들&lt;/h3&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;애플리케이션 서버는 클라이언트의 IP를 직접 보지 못함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트의 실제 IP는 X-Forwarded-For라는 헤더에 삽입&lt;/li&gt;
&lt;li&gt;X-Forwarded-Port, X-Forwarded-Proto에 의해 사용되는 프로토콜을 얻게 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;클라이언트 IP는 로드 밸런서와 직접 통신 &amp;rarr; 연결 종료 기능을 수행&lt;/li&gt;
&lt;li&gt;로드밸런서가 EC2 인스턴스와 통신 &amp;rarr; 사설 IP인 로드 밸런서 IP를 사용해 EC2 인스턴스로 접속&lt;/li&gt;
&lt;li&gt;EC2 인스턴스가 클라이언트 IP를 알기 위해서는, HTTP 요청에 있는 추가 헤더 X-Forwarded-Port, X-Forwarded-Proto를 확인해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;NLB (Network Load Balancer)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 로드 밸런서는 L4 로드 밸런서로 &lt;b&gt;TCP&lt;/b&gt;와 &lt;b&gt;UDP&lt;/b&gt; 트래픽을 다룰 수 있다&lt;/li&gt;
&lt;li&gt;cf. HTTP를 다루는 L7보다 하위 계층&lt;/li&gt;
&lt;li&gt;시험 : &lt;b&gt;````UDP/TCP(L4)&lt;/b&gt; &amp;rArr; &lt;b&gt;NLB&lt;/b&gt;`&lt;/li&gt;
&lt;li&gt;ALB에 비해 지연 시간이 짧음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AZ 마다 하나의 고정 IP를 갖는다&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;탄력적 IP 주소를 각 AZ에 할당할 수 있다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;여러 개의 고정 IP를 가진 애플리케이션을 노출할 때 유용&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;시험 : **1~3개의 IP로만 액세스할 수 있는 애플리케이션**을 만들어야 하는 조건 &amp;rarr; **네트워크 로드 밸런서**를 옵션으로 고려&lt;/li&gt;
&lt;li&gt;고성능, TCP, UDP, 정적 IP =&amp;gt; NLB&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;NLB (Network Load Balancer)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대상 그룹을 생성 &amp;rarr; NLB가 대상 그룹을 리다이렉트&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Target Group&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스는 &lt;b&gt;대상 그룹이 될 수 있다&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;rArr; &lt;b&gt;NLB가 TCP or UDP 트래픽 &amp;rarr; EC2 인스턴스로 리다이렉트&lt;/b&gt; 가능&lt;/li&gt;
&lt;li&gt;IP 주소를 등록 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조건 : IP 주소는 반드시 하드코딩, 프라이빗 IP이어야 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자체 EC2 인스턴스의 프라이빗 IP를 보낼 수도 있지만, 자체 데이터 센터 서버의 프라이빗 IP를 사용할 수도 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ALB 앞에 NLB를 사용할 수 있다&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;NLB 덕분에 고정 IP 주소&lt;/b&gt;를 얻을 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ALB 덕분에&lt;/b&gt; HTTP 유형의 &lt;b&gt;트래픽을 처리하는 규칙&lt;/b&gt;을 얻을 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;NLB 대상 그룹이 수행하는 &amp;lsquo;&lt;b&gt;상태 확인&lt;/b&gt;&amp;rsquo;에 대해 알아야 함 - 세 가지 프로토콜 지원
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;TCP, HTTP, HTTPS 프로토콜 지원&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;GWLB (GateWay Load Balancer)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배포 및 확장, AWS의 타사 네트워크 가상 어플라이언스의 플릿 관리에 사용&lt;/li&gt;
&lt;li&gt;네트워크의 &lt;b&gt;모든 트래픽이 방화벽을 통과하게 하거나 침입 탐지 및 방지 시스템에 사용&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;rarr; IDPS나 심층 패킷 분석 시스템 또는 일부 페이로드를 수정, 네트워크 수준에서 가능&lt;/li&gt;
&lt;li&gt;네트워크 계층인 L3 수준에서 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트래픽이 애플리케이션으로 이동하기 전에 모든 트래픽을 검사하려면?
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;GWLB를 생성&lt;/li&gt;
&lt;li&gt;VPC에서 라우팅 테이블이 업데이트&lt;/li&gt;
&lt;li&gt;cf. 라우팅 테이블 : VPC 존재하는 서브넷들이 특정 범위의 IP 목적지를 향할 때, Target을 정해주는 역할&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모든 트래픽은 GWLB를 통과&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;GWLB는 Target Group으로 트래픽을 확산&lt;/li&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이상이 없으면 GWLB로 다시 전송, 이상이 있다면 트래픽을 드롭&lt;/li&gt;
&lt;li&gt;GWLB로 전송된 트래픽은 다시 애플리케이션으로 전송됨&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;&amp;rArr; GWLB의 기능은 네트워크 트래픽을 분석하는 것&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;rArr; GWLB를 사용하면 간단히 처리가 가능&lt;/li&gt;
&lt;li&gt;GWLB는 모든 로드 밸런서보다 낮은 수준에서 실행 : L3 (네트워크 계층)&lt;/li&gt;
&lt;li&gt;GWLB 2가지 기능
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;투명 네트워크 게이트웨이
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VCP의 모든 트래픽이 GWLB가 되는 &lt;b&gt;단일 엔트리와 출구&lt;/b&gt;를 통과&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;대상 그룹의 가상 어플라이언스 집합에 전반적으로 &lt;b&gt;트래픽을 분산&lt;/b&gt;해 &lt;b&gt;로드 밸런서&lt;/b&gt;가 됨&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;시험 : **6081**번 포트의 **GENEVE** 프로토콜을 사용 &amp;rArr; **GWLB**&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cf. 그림 이해를 목표로 할 것&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Target Group&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스&lt;/li&gt;
&lt;li&gt;IP 주소 : Private IP이어야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ELB 고정 세션 및 세션 밀접성 (Sticky Seesion, Session Affinity)&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;li&gt;로드 밸런서에 2가지 요청을 수행하는 클라이언트가 요청에 응답하기 위해 백엔드에 동일한 인스턴스를 갖는 것&lt;/li&gt;
&lt;li&gt;2개의 EC2 인스턴스와 3개의 클라이언트가 있는 ALB와 같은 것
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1번 클라이언트가 요청을 생성해 첫 번째 EC2 인스턴스를 통과하면&lt;/li&gt;
&lt;li&gt;로드 밸런서에서 두 번째 요청을 실행할 때, 동일한 인스턴스로 이동하게끔 한다&lt;/li&gt;
&lt;/ul&gt;
cf. 로드 밸런서가 모든 요청을 확산하는 것과는 다른 동작&lt;/li&gt;
&lt;li&gt;&lt;b&gt;쿠키&lt;/b&gt;를 통해 고정성과 만료 기간을 갖는다&lt;/li&gt;
&lt;li&gt;고정성을 활성화하면 백엔드 EC2 인스턴스 부하에 불균형을 초래할 수 있다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일부 인스턴스는 고정 사용자를 갖게 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;쿠키&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고정 세션에 2가지 유형의 쿠키가 있음
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;애플리케이션 기반 쿠키
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;커스텀 쿠키 : 애플리케이션에서 생성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대상으로 생성된 사용자 정의 쿠키&lt;/li&gt;
&lt;li&gt;애플리케이션에 필요한 모든 사용자 정의 속성을 포함할 수 있다&lt;/li&gt;
&lt;li&gt;쿠키 이름은 각 대상 그룹 별로 개별적으로 지정해야 함 (ELB에서 사용하는 이름을 사용하지 않아야 한다)&lt;/li&gt;
&lt;li&gt;ex) AWSALB, AWSALBAPP, AWSALBTG)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;애플리케이션 쿠키 : 로드 밸런서에서 생성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ALB 쿠키 이름은 AWSALBAPP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;애플리케이션에서 기간을 지정할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;ALB에서 이름이 AWSALB&lt;/li&gt;
&lt;li&gt;특정 기간을 기반으로 만료, 그 기간이 로드 밸런서 자체에서 생성되는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Cross-Zone Load Balancing (교차 영역 밸런싱)&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;불균형한 AZ 영역이 존재&lt;/b&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;클라이언트가 트래픽의 절반을 첫 번째 ALB 인스턴스로 보내고 나머지 절반을 다른 쪽에 보냈다 하더라도, ALB는 받은 트래픽을 10개의 EC2 인스턴스 모두에 전달&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;rarr; 각각의 로드 밸런서 인스턴스가 모든 가용 영역에 등록된 모든 인스턴스에 부하를 고르게 분배함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rArr; 모든 영역에 있는 EC2 인스턴스에 트래픽이 고르게 분배&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;ALB : &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;/li&gt;
&lt;li&gt;교차영역 밸런싱 기본 설정 &amp;rarr; &lt;b&gt;AZ 간 데이터 전송 비용이 들지 않음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;NLB, GWAB &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;/li&gt;
&lt;li&gt;AZ 간 데이터 전송을 원한다면 비용이 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SSL/TLS 인증&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SSL/TSL 기초&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSL 인증서 : 클라이언트와 로드 밸런서 사이에서 &lt;b&gt;트래픽이 이동하는 동안 암호화&lt;/b&gt; &lt;b&gt;(in-flight 암호화, 전송 중 암호화)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSL : Security Socket Layer (보안 소켓 계층), &lt;b&gt;연결을 암호화&lt;/b&gt;하는 데 사용&lt;/li&gt;
&lt;li&gt;TLS : &lt;b&gt;새로운 버전의 SSL&lt;/b&gt;, Transport Layer Security (전송 계층 보안)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최근에는 TLS 인증서가 주로 사용됨&lt;/li&gt;
&lt;/ul&gt;
cf. 보통은 SSL/TLS를 묶어 SSL로 부른다&lt;/li&gt;
&lt;li&gt;퍼블릭 SSL은 인증기관(CA)에서 발급
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Comodo, Symantec, GoDaddy, Let&amp;rsquo;s Encypt 등이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;퍼블릭 SSL 인증서를 로드 밸런서에 추가&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;rarr; 클라이언트와 로드 밸런서 사이의 &lt;b&gt;연결을 암호화&lt;/b&gt; 할 수 있다&lt;/li&gt;
&lt;li&gt;SSL 인증서에는 만료 날짜가 있어서 주기적으로 갱신해줘야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SSL 동작 방식&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사용자가 HTTPS를 통해 접속&lt;/li&gt;
&lt;li&gt;인터넷(HTTPS)을 통해 로드 밸런서에 접속 &amp;rarr; 로드 밸런서에서는 내부적으로 SSL 종료를 수행&lt;/li&gt;
&lt;li&gt;백엔드에서는 HTTP로 EC2 인스턴스와 통신 (암호화 되지 않은 상태)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VPC로 이동하는 트래픽은 프라이빗 네트워크를 사용하기 때문에 안전하게 보호&lt;/li&gt;
&lt;li&gt;로드 밸런서는 X.509 인증서를 사용 &amp;rarr; SSL 또는 TLS 서버 인증서라고 부름&lt;/li&gt;
&lt;li&gt;AWS에는 서버 인증서들을 관리할 수 있는 ACM(AWS 인증서 관리자)가 있다&lt;/li&gt;
&lt;li&gt;원한다면 직접 인증서를 업로드 가능&lt;/li&gt;
&lt;li&gt;HTTP 리스너를 구성할 때 반드시 HTTPS 리스너로 해야 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 인증서 지정&lt;/li&gt;
&lt;li&gt;다중 도메인 지원을 위한 다른 인증서 추가 가능&lt;/li&gt;
&lt;li&gt;클라이언트는 SNI (서버 이름 지정)을 사용해서 접속할 호스트의 이름을 알릴 수 있다&lt;/li&gt;
&lt;li&gt;원하는대로 보안 정책을 지정할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SNI (Server Name Indication)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;여러 개의 SSL 인증서를 하나의 웹 서버에 로드&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;rarr; &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;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cf. 모든 클라이언트가 지원하는 것은 아님 : &lt;b&gt;ALB와 NLB, CloudFront에서만 동작&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;시험 : 어떤 로드 밸런서에 SSL 인증서가 여러 개 있다 &amp;rarr; ALB나 NLB 중 하나&lt;/li&gt;
&lt;li&gt;보충
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SNI는 TLS 프로토콜의 확장, TLS의 제약을 해결하기 위해 설계&lt;/li&gt;
&lt;li&gt;SNI가 도입되기 전에는 하나의 IP 주소가 하나의 SSL 인증서만 연관&lt;/li&gt;
&lt;li&gt;&amp;rarr; 동일한 서버에서 서로 다른 도메인 이름을 가진 여러 안전한 웹사이트를 호스팅하는 데 제약이 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ALB가 있고, target group이 2개 존재&lt;/li&gt;
&lt;li&gt;2개의 SSL 인증서 : 각 대상 그룹에 해당하는 인증서
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;클라이언트는 ALB에 접속하고 싶은 대상을 전달&lt;/li&gt;
&lt;li&gt;ALB는 대상을 파악하고 해당하는 SSL 인증서를 로드&lt;/li&gt;
&lt;li&gt;연결을 제공&lt;/li&gt;
&lt;/ol&gt;
SSL 인증서 지원 항목 정리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CLB (V1) : SSL 인증서를 하나만 둘 수 있다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 개의 인증서로 여러 호스트 이름을 지원하려면 CLB 자체를 여러 개 둬야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ALB (V2) : &lt;b&gt;여러 개의 SSL 인증서, 다중 리스너&lt;/b&gt;를 지원 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SNL 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;NLB (V2) : &lt;b&gt;여러 개의 SSL 인증서&lt;/b&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;SNI 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
※ SSL Termination
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSL로 암호화된 데이터 트래픽이 해독되는 프로세스&lt;/li&gt;
&lt;li&gt;암호 해독 프로세스의 속도를 높이고, 백엔드 서버의 처리 부담을 줄일 수 있다&lt;/li&gt;
&lt;li&gt;ALB와 조합해서 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Connection Draining (연결 드레이닝)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cf. draining : 배수&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CLB를 사용할 때는 연결 드레이닝이라 부르고, &lt;b&gt;ALB나 NLB를 사용&lt;/b&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;&amp;rarr; 인-플라이트 요청(활성 요청)을 완료할 수 있도록 하는 기능&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;연결(인스턴스)이 드레이닝 되면, &lt;b&gt;ELB는 등록 취소 중인 EC2 인스턴스로 새로운 요청을 보내지 않음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;도식 설명
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스가 3개 존재, 그 중 &lt;b&gt;하나는 드레이닝 모드로 설정&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;EC2 인스턴스에 이미 연결된 유저는 충분한 드레이닝 시간을 얻게 되고, 기존 연결 및 기존 요청을 완료할 수 있게 됨&lt;/li&gt;
&lt;li&gt;작업이 끝나면 모든 연결이 정지됨&lt;/li&gt;
&lt;li&gt;만약 새로운 유저가 ELB에 연결을 시도&amp;rarr; 새로운 연결은 다른 EC2 인스턴스와 수립될 것 (2번째나 3번째)&lt;/li&gt;
&lt;li&gt;&amp;rarr; ELB는 EC2 인스턴스가 드레이닝 상태에 있으므로&lt;/li&gt;
&lt;li&gt;연결 파라미터 값은 1-3,600초 사이의 값으로 설정 가능 (기본적으로 300초, 5분)&lt;/li&gt;
&lt;li&gt;0으로 설정하면 드레이닝을 비활성화&lt;/li&gt;
&lt;li&gt;짧은 요청의 경우, 낮은 값으로 설정하면 좋다 (1초 미만의 요청일 때 드레이닝 파라미터를 30초 정도로 설정)&lt;/li&gt;
&lt;li&gt;요청시간 긴 업로드의 경우 높은 값으로 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ASG (Auto Scaling Group)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹이나 앱을 배포할 때 웹 사이트 방문자가 갈수록 많아지면서 로드가 바뀔 수 있다&lt;/li&gt;
&lt;li&gt;클라우드에서 &lt;b&gt;EC2 인스턴스 생성 API 호출을 통해 서버를 빠르게 생성하고 종료&lt;/b&gt;할 수 있다&lt;/li&gt;
&lt;li&gt;이 과정을 자동화하기 위해 ASG를 생성할 수 있다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ASG의 목표는 스케일 아웃 / 스케일 인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스케일 아웃 : 증가한 로드에 맞춰 EC2 인스턴스를 추가&lt;/li&gt;
&lt;li&gt;스케일 인 : 감소한 로드에 맞춰 EC2 인스턴스를 제거하는 것&lt;/li&gt;
&lt;/ul&gt;
&amp;rArr; ASG는 시간에 따라 크기가 변함&lt;/li&gt;
&lt;li&gt;ASG에서 실행되는 ASG 인스턴스의 최대 &amp;amp; 최소의 개수를 유지하기 위해 매개변수를 정의할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;로드 밸런서와 페어링 &amp;rarr; ASG에 속한 모든 EC2 인스턴스가 로드 밸런서에 연결&amp;rarr; 트래픽을 자동으로 인스턴스 그룹에 할당, ASG는 필요한 경우 인스턴스를 자동으로 늘리거나 줄인다&lt;/li&gt;
&lt;li&gt;cf. 로드 밸런서와 ASG를 연결 &amp;rarr; 로드 밸런서는 ASG 인스턴스 그룹에 들어오는 트래픽을 분산&lt;/li&gt;
&lt;li&gt;한 인스턴스가 비정상이면 종료하고, 이를 대체할 새 EC2 인스턴스를 생성&lt;/li&gt;
&lt;li&gt;ASG는 무료, EC2 인스턴스와 같이 생성된 하위 리소스에 대한 비용만 내면 된다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;작동 과정&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ASG 내 인스턴스의 최소 개수를 설정&lt;/li&gt;
&lt;li&gt;희망 용량 개수를 설정&lt;/li&gt;
&lt;li&gt;최대 용량 개수를 설정 : 최대 용량 개수를 희망 용량 개수보다 더 높게 설정하면 스케일 아웃&lt;/li&gt;
&lt;li&gt;&amp;rArr; EC2 인스턴스를 추가, ASG가 더 커진다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로드 밸런서와 작동하는 ASG&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ASG에 4개의 인스턴스가 등록되어 있다면&lt;/li&gt;
&lt;li&gt;ELB가 모든 인스턴스에 트래픽을 즉시 분산&lt;/li&gt;
&lt;li&gt;&amp;rarr; 사용자가 로드 밸런싱된 웹사이트에 액세스 가능토록 한다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ELB는 상태 확인&lt;/b&gt;을 통해 EC2 인스턴스의 상태를 확인하고, &lt;b&gt;ASG로 전달&lt;/b&gt;할 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&amp;rArr; 로드 밸런서가 비정상이라 판단하는 EC2 인스턴스를 ASG가 종료할 수 있어 매우 편리하다&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;스케일 아웃이 되면 ELB가 트래픽을 보내고 로드를 분산시킴&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rArr; 로드 밸런서와 ASG는 좋은 조합&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Auto Scaling Group Attribute&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인스턴스 속성을 기반으로 ASG를 생성 &amp;rarr; &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;시작 템플릿에서는 ASG 내에서 EC2 인스턴스를 시작하는 방법에 대한 정보가 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;최소 용량 / 최대 용량 / 초기 용량을 정의해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CloudWatch 경보가 오토 스케일링과 통합되는 방식&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CloudWatch : &lt;b&gt;경보&lt;/b&gt;를 기반으로 ASG를 스케일 인/아웃 할 수 있다&lt;/li&gt;
&lt;li&gt;지표를 기준으로 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모니터링 할 수 있는 평균 CPU, 원하는 사용자 지정 지표 등을 지정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ASG의 스케일링 정책 - 동적 스케일링 정책&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3가지(+1) 유형으로 나뉨
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Target Tracking 스케일링
&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;ex) 모든 EC2 인스턴스에서 ASG의 평균 CPU 사용률을 추적, 수치가 40%대에 머물 수 있도록 할 때에 사용&lt;/li&gt;
&lt;li&gt;기본 기준선을 세우고 상시 가용이 가능하도록 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Simple / Step 스케일링
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CloudWatch 경보를 설정하고 단계적 설정에 따라 변경됨
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU 사용률이 30% 이하로 떨어지면 유닛 하나를 제거 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ex) 전체 ASG에 대한 CPU 사용률이 70%를 초과할 때 용량을 두 유닛 추가하도록 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scheduled Action&lt;/li&gt;
&lt;/ol&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;ex) 금요일 오후 5시에 이벤트가 예정, 이에 대비해 최소 ASG 용량을 일정 기간 동안 자동으로 늘리도록 함&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Predictive 스케일링
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;과거 로드를 분석해서 흐름을 예측&lt;/li&gt;
&lt;li&gt;머신러닝 기술을 이용해 향후 자주 사용될 것으로 예상됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;대표적인 지표&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;CPU 사용률&lt;/li&gt;
&lt;li&gt;테스트를 기반으로 하는 대상 별 요청의 수
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2는 한 번에 1개 씩, 1,000개의 요청까지만 최적으로 작동&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;평균 네트워크 I/O 사용량&lt;/li&gt;
&lt;li&gt;커스텀 지표&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Scaling Cooldowns&lt;/h3&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;b&gt;기본적인 휴식 기간을 갖는 것&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;휴지 기간에는 ASG가 추가 인스턴스를 실행 또는 종료할 수 없음&lt;/li&gt;
&lt;li&gt;새로운 인스턴스가 안정화 &amp;rarr; 새로운 지표의 양상을 살펴보기 위함&lt;/li&gt;
&lt;li&gt;즉시 사용 가능한 AMI를 이용해서, EC2 인스턴스 구성 시간을 단축&lt;/li&gt;
&lt;li&gt;&amp;rarr; 요청을 신속히 처리 : ASG 상에서 더 많은 동적 스케일링이 가능해진다&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Cloud</category>
      <category>AWS</category>
      <category>cloud</category>
      <category>강의노트</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/359</guid>
      <comments>https://hei-jayden.tistory.com/359#entry359comment</comments>
      <pubDate>Sun, 10 Sep 2023 00:34:23 +0900</pubDate>
    </item>
    <item>
      <title>[AWS/Cloud] 강의 노트 : EC2 인스턴스 스토리지</title>
      <link>https://hei-jayden.tistory.com/358</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;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oXocY/btssNmvI26K/FJNDc97wsTjoUkqQhKzRy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oXocY/btssNmvI26K/FJNDc97wsTjoUkqQhKzRy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oXocY/btssNmvI26K/FJNDc97wsTjoUkqQhKzRy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoXocY%2FbtssNmvI26K%2FFJNDc97wsTjoUkqQhKzRy0%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;576&quot; height=&quot;302&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&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 style=&quot;list-style-type: none;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EBS&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Elastic Block Store의 줄임말&lt;/li&gt;
&lt;li&gt;인스턴스가 실행 중인 동안 연결 가능한 네트워크 드라이브&lt;/li&gt;
&lt;li&gt;EBS 볼륨을 사용하면 &lt;b&gt;인스턴스가 종료된 후에도 데이터를 지속할 수 있다&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;한 번에 하나의 인스턴스에만 마운트할 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특정 가용 영역에서만 가능&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EBS 볼륨&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 USB 스틱이라고 생각하자
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;USB 스틱처럼 한 컴퓨터에서 꺼내 다른 컴퓨터에 꽂아 사용&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;하나의 가용 영역에 한정됨&lt;/li&gt;
&lt;li&gt;cf. 스냅샷을 이용하면 다른 가용 영역으로도 볼륨을 옮길 수 있다&lt;/li&gt;
&lt;li&gt;사용량 프로비저닝 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;EC2 인스턴스를 통해 EBS 볼륨을 생성할 경우 &amp;rArr; 종료 시 삭제 속성이 있다&lt;/li&gt;
&lt;li&gt;인스턴스가 종료될 때 루트 볼륨을 유지하고자 하는 경우 &amp;rarr; 즉 데이터를 저장하고자 하는 등의 경우, 루트 볼륨의 종료 시 삭제 속성을 비활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EBS 스냅샷&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;EBS 볼륨의 특정 시점에 대한 백업&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다른 가용 영역이나 다른 리전에도 복사할 수 있다&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스냅샷의 기능&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스냅샷 아카이브 : 아카이브 티어로 스냅샷을 옮길 수 있는 기능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아카이브로 옮기면 아카이브를 복원하는데 24시간에서 72시간이 걸린다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;EBS 스냅샷 휴지통 : 스냅샷을 삭제할 때 영구 삭제하는 대신 휴지통에 넣을 수 있다 &amp;rarr; 실수로 넣었을 때 복원 가능&lt;/li&gt;
&lt;li&gt;빠른 스냅샷 복원(FSR) : 스냅샷을 완전 초기화, 지연 시간을 없애는 기능, 많은 비용 발생
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Fast Snapshot Restore&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AMI (Amazon Machine Image)&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;EC2 인스턴스를 통해 만든 이미지&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;AMI에 원하는 소프트웨어 or 설정 파일을 추가, 별도의 운영 체제를 설치, 모니터링 툴 추가 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AMI를 따로 구성하면 부팅 및 설정에 드는 시간을 줄일 수 있다&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스에 설치하고자 하는 모든 소프트웨어를 AMI가 미리 &lt;b&gt;패키징&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;AMI를 특정 지역에 구축한 다음, &lt;b&gt;다른 지역으로 복사&lt;/b&gt; &amp;rarr; AWS 글로벌 인프라를 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;EC2 인스턴스 launch 방식
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;퍼블릭 AMI&lt;/li&gt;
&lt;li&gt;직접 구축한 AMI&lt;/li&gt;
&lt;li&gt;다른 사람이 구축한 AMI를 AWS 마켓플레이스를 통해 구매해서 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AMI 처리 과정&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;EC2 인스턴스를 원하는 대로 설정&lt;/li&gt;
&lt;li&gt;인스턴스를 중지해 데이터 무결성을 확보&lt;/li&gt;
&lt;li&gt;인스턴스를 바탕으로 AMI를 구축
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 과정에서 EBS 스냅샷 생성 &amp;rarr; 다른 AMI에서 인스턴스를 실행 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;인스턴스 스토어&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2는 가상 머신이지만, 실제로는 하드웨어 서버에 연결되어 있다&lt;/li&gt;
&lt;li&gt;특정 유형의 EC2 인스턴스는 &lt;b&gt;EC2 인스턴스 스토어&lt;/b&gt;라고 불림 &amp;rarr; &lt;b&gt;물리적 서버에 연결된 하드웨어 드라이버&lt;/b&gt;를 가리킴&lt;/li&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;I/O 성능의 향상&lt;/li&gt;
&lt;li&gt;인스턴스 스토어를 중지 또는 종료하면 해당 스토리지 또한 손실됨 &amp;rarr; &lt;b&gt;임시 스토리지&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;rArr; &lt;b&gt;장기적으로 데이터를 보관하는 장소 x&lt;/b&gt; (cf. 장기 스토리지의 경우 EBS가 적합)&lt;/li&gt;
&lt;li&gt;버퍼나 캐시, 스크래치 데이터나 임시 콘텐츠를 사용할 때 사용&lt;/li&gt;
&lt;li&gt;EC2 인스턴스의 기본 서버에 장애가 발생할 때 &lt;b&gt;데이터 손실에 대한 위험&lt;/b&gt;이 존재&lt;/li&gt;
&lt;li&gt;&amp;rarr; 필요에 따라 데이터를 백업이나 복제해두어야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EBS 볼륨 유형&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;총 6개의 유형이 있다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;gp2 / gp3 (SSD)&lt;/b&gt; : 범용 볼륨&lt;/li&gt;
&lt;li&gt;&lt;b&gt;io1 / io2 (SSD)&lt;/b&gt; : 최고 성능을 가진 볼륨, 업무가 크리티컬하고, 지연 시간을 낮게 유지해야하는 대용량의 워크로드에 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;st 1 (HDD)&lt;/b&gt; : 저비용, 잦은 접근과 처리량이 많은 워크로드에 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;sc 1 (HDD)&lt;/b&gt; : 가장 비용이 적게 드는 볼륨, 접근 빈도가 낮은 워크로드를 위해 설계&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;EBS 볼륨은 크기, 처리량 IOPS(초당 작업 수) 를 기준으로 구분&lt;/li&gt;
&lt;li&gt;gp2, gp3, io1, io2만이 부팅 볼륨으로 사용될 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;GP 2/3 (General Purpose SSE)&lt;/h3&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;1GB - 16TB까지 지원&lt;/li&gt;
&lt;li&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;gp3에서는 IOPS와 처리량을 독자적으로 설정 가능&lt;/li&gt;
&lt;li&gt;gp2에서는 IOPS와 처리량이 연결되어 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Provisioned IOPS&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IOPS 성능을 유지해야 하는 비즈니스 애플리케이션이나 16,000 IOPS 이상을 요구하는 애플리케이션에 적합&lt;/li&gt;
&lt;li&gt;일반적인 DB 워크로드에 알맞다&lt;/li&gt;
&lt;li&gt;스토리지 성능과 일관성에 아주 민감할 때 io1 또는 io2 볼륨으로 변경하는 것을 권장&lt;/li&gt;
&lt;li&gt;4GB - 16TB까지 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;32,000 IOPS 이상&lt;/b&gt;을 요구할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;st1, sc1&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;st1
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처리량 최적화 HDD&lt;/li&gt;
&lt;li&gt;빅데이터나 데이터 웨어하우징 로그 처리에 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sc1
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아카이브 데이터용&lt;/li&gt;
&lt;li&gt;접근 빈도가 낮은 데이터 저장에 사용&lt;/li&gt;
&lt;li&gt;최저 비용으로 데이터 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cf. 대략적으로 모든 볼륨의 차이를 이해할 필요&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EBS 다중 연결&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;하나의 EBS 볼륨을 같은 가용 영역에 있는 여러 EC2 인스턴스에 연결&lt;/b&gt;할 수 있게 해준다&lt;/li&gt;
&lt;li&gt;EBS 볼륨 중 io1, io2 제품 군에서만 사용 가능한 기능&lt;/li&gt;
&lt;li&gt;각 인스턴스는 고성능 볼륨에 대한 읽기 및 쓰기 권한을 전부 갖는다 &amp;rarr; &lt;b&gt;동시에 읽고 쓰기 가능&lt;/b&gt;&lt;/li&gt;
&lt;li&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;한 번에 16개의 EC2 인스턴스만 같은 볼륨에 연결할 수 있다&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;다중 연결을 실행하려면 &lt;b&gt;반드시 클러스터 인식 파일 시스템을 사용해야&lt;/b&gt; 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EBS 암호화&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EBS 암호화 사용시 &amp;rarr; 암호화가 동시다발적으로 일어남
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;저장 데이터가 볼륨 내부에 암호화&lt;/li&gt;
&lt;li&gt;인스턴스와 볼륨 간의 전송 데이터가 암호화&lt;/li&gt;
&lt;li&gt;스냅샷, 스냅샷으로 생성한 볼륨 모두 암호화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;암호화 및 복호화 매커니즘은 보이지 않게 처리됨 (백그라운드에서 EC2와 EBS가 모두 처리)&lt;/li&gt;
&lt;li&gt;암호화는 지연시간에 영향이 거의 없고, KMS에서 암호화 키를 생성 &amp;rarr; AES-256 암호화 표준을 갖는다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EBS 볼륨의 암호화 및 복호화 풀기&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;볼륨의 EBS 스냅샷을 생성&lt;/li&gt;
&lt;li&gt;복사 기능을 통해 EBS 스냅샷을 암호화 함&lt;/li&gt;
&lt;li&gt;스냅샷을 이용해 새 EBS 볼륨을 생성하면 해당 볼륨도 암호화 됨&lt;/li&gt;
&lt;li&gt;암호화된 볼륨을 인스턴스 원본에 연결한다&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Amazon EFS - Elastic File System&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EFS : 관리형 NFS, &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;여러 EC2 인스턴스에 마운트 될 수 있다&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;EC2 인스턴스들은 &lt;b&gt;여러 가용 영역&lt;/b&gt;에 있을 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;가용성, 확장성, 높은 가격 (gp2 EBS 볼륨의 3배 정도)&lt;/li&gt;
&lt;li&gt;사용량만큼 지불 &amp;rarr; 미리 용량을 프로비저닝하지 않아도 됨&lt;/li&gt;
&lt;li&gt;내부적으로는 NFS 프로토콜을 사용&lt;/li&gt;
&lt;li&gt;EFS에 대한 액세스 제어를 위해 보안 그룹을 설정해야 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Linux 기반 AMI와 호환 (window x)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;KMS &amp;rarr; EFS 드라이브에 저장 데이터 암호화를 활성화&lt;/li&gt;
&lt;li&gt;리눅스 파일 저장 표준인 POSIX 시스템을 사용하고 표준 파일 API를 갖는다&lt;/li&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;EFS의 성능&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;수천 개의 NFS 클라이언트에서 EFS에 동시 액세스&lt;/b&gt;할 수 있게 확장, 초당 10GB의 처리량&lt;/li&gt;
&lt;li&gt;용량을 미리 &lt;b&gt;프로비저닝 하지 않아도&lt;/b&gt; 네트워크 파일 시스템이 PB 규모로 자동 확장&lt;/li&gt;
&lt;li&gt;다양한 성능 모드를 설정할 수 있음
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;범용 모드 : 기본 설정으로 지연 시간에 민감한 웹 서버, CMS와 같은 사용 사례에서 사용&lt;/li&gt;
&lt;li&gt;최대 I/O : I/O를 최대화하고 싶을 때
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지연 시간, 처리량, 병렬 처리 성능 향상&lt;/li&gt;
&lt;li&gt;빅데이터, 미디어 처리 작업이 있을 때 유용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;처리량 모드 : 버스팅 모드가 기본값 (1TB 파일 시스템의 데이터 전송 속도가 초당 50MiB, 초당 100MiB까지 버스트 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;버스팅 모드에서는 사용 공간이 많을 수록 버스팅 용량과 처리량이 늘어남&lt;/li&gt;
&lt;li&gt;프로비저닝 모드에서는 스토리지 크기에 상관없이 처리량을 설정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EFS - 스토리지 클래스&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;스탠다드 : 액세스가 빈번한 파일을 보통 저장&lt;/li&gt;
&lt;li&gt;EFS-IA 계층
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일을 검색할 때 검색에 대한 비용이 발생&lt;/li&gt;
&lt;li&gt;저장 비용은 낮음&lt;/li&gt;
&lt;li&gt;EFS-IA를 활성화하기 위해 수명 주기 정책을 사용해야 함 (cf. EFS-IA; Infrequent Access)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
cf. 스탠다드 계층에 60일 이상 액세스 하지 않은 파일이 있다고 가정할 때&lt;/li&gt;
&lt;li&gt;설정한 수명 주기 정책에 따라 EFS-IA 계층으로 옮겨짐 &amp;rarr; 비용이 낮아짐&lt;/li&gt;
&lt;li&gt;가용성과 내구성 측면, 2가지 옵션
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;스탠다드 : &lt;b&gt;EFS를 다중 AZ에 설정&lt;/b&gt;, 프로덕션 사용 사례에 적합
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 가용 영역이 중단되더라도 EFS 파일 시스템에 영향을 주지 않기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;One Zone EFS 파일 시스템으로 개발하는 것도 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 AZ이므로 기본적으로 백업이 활성화된다&lt;/li&gt;
&lt;li&gt;EFS-IA 스토리지 계층과 호환 가능 &amp;rarr; EFS One Zone-IA라고 부른다&lt;/li&gt;
&lt;li&gt;요금이 훨씬 큰 폭으로 할인 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cf. 언제 EFS를 사용하는지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유효성 검사와 요구 사항 준수를 위해 EFS 네트워크 파일 시스템에 설정해야 하는 옵션&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EBS vs EFS&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EBS 볼륨&lt;/h3&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;gp2 : 디스크 크기가 늘어나면 IO도 함께 증가&lt;/li&gt;
&lt;li&gt;io1 : IO를 볼륨 크기와 관계없이 독립적으로 증가 가능 &amp;rarr; 중요 DB를 실행할 때&lt;/li&gt;
&lt;li&gt;EBS 볼륨을 다른 가용 영역으로 옮기려면 가장 먼저 &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;다른 AZ에서 스냅샷을 복원시켜 사용&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;EBS 볼륨 내의 IO를 전부 사용하게 되므로 인스턴스가 EBS를 사용 중이 아닐 때에만 실행해야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EC2 인스턴스가 종료되면 인스턴스 내의 루트 EBS 볼륨도 기본적으로 종료됨&lt;/b&gt; (비활성화 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EFS&lt;/h3&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;EFS Mount Target을 사용해 &lt;b&gt;특정 AZ에서 EC2 인스턴스들과 EFS 드라이브를 연결&lt;/b&gt;해 줄 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;리눅스&lt;/b&gt; 인스턴스에서만 가능, POSIX 파일 시스템이라 윈도우에서 구동되지 않음&lt;/li&gt;
&lt;li&gt;EFS는 EBS보다 훨씬 비싸다 (거의 3배)&lt;/li&gt;
&lt;li&gt;비용을 절약하고 싶다면 스토리지 티어로 EFS-IA를 사용, 제품 수명 정책을 사용해 비용 절감&lt;/li&gt;
&lt;li&gt;EFS는 &lt;b&gt;사용한 만큼만 비용이 청구&lt;/b&gt;됨 (EBS는 실제 사용량이 아닌 드라이브의 크기에 따라 정해진 사용량을 지불하는 방식)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다수의 인스턴스에 걸쳐 연결해야 하는 네트워크 파일 시스템에 적합&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EFS vs EBS vs Instance Store&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EFS : 다수의 인스턴스에 걸쳐 연결해야 하는 네트워크 파일 시스템에 적합&lt;/li&gt;
&lt;li&gt;EBS : 네트워크 볼륨을 한 번에 하나의 인스턴스에 연결, 특정 AZ 내로 한정&lt;/li&gt;
&lt;li&gt;인스턴스 스토어 : EC2 인스턴스에 IO를 최대로 사용하게끔 해주지만, 인스턴스가 망가지면 함께 망가지는 임시 드라이브&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Cloud</category>
      <category>AWS</category>
      <category>cloud</category>
      <category>강의 노트</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/358</guid>
      <comments>https://hei-jayden.tistory.com/358#entry358comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:10:24 +0900</pubDate>
    </item>
    <item>
      <title>[AWS/Cloud] 강의 노트 : EC2 기초</title>
      <link>https://hei-jayden.tistory.com/356</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;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XHxXD/btssS235FtP/UR2U4efblsTcK5HaoQoLW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XHxXD/btssS235FtP/UR2U4efblsTcK5HaoQoLW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XHxXD/btssS235FtP/UR2U4efblsTcK5HaoQoLW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXHxXD%2FbtssS235FtP%2FUR2U4efblsTcK5HaoQoLW0%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;576&quot; height=&quot;302&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EC2 기초&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Elastic Compute Cloud&lt;/li&gt;
&lt;li&gt;AWS에서 제공하는 서비스형 인프라스트럭처&lt;/li&gt;
&lt;li&gt;하나의 서비스를 지칭하는 것이 아님
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스 : 임대한 가상 머신&lt;/li&gt;
&lt;li&gt;EBS 볼륨 : 데이터를 저장하는 가상 드라이브&lt;/li&gt;
&lt;li&gt;ELB : 로드를 분산&lt;/li&gt;
&lt;li&gt;ASG : 서비스를 확장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EC2 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OS : Linus, Window, Mac OS&lt;/li&gt;
&lt;li&gt;CPU 개수, RAM 용량&lt;/li&gt;
&lt;li&gt;네트워크를 통해 연결할 스토리지 필요 여부
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EBS &amp;amp; EFS : 네트워크 연결&lt;/li&gt;
&lt;li&gt;EC2 Instance Store : 하드웨어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;EC2 인스턴스에 연결할 네트워크의 종류 선택&lt;/li&gt;
&lt;li&gt;방화벽 규치&lt;/li&gt;
&lt;li&gt;인스턴스를 구성 : 부트스트랩 스크립트&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EC2 User Data&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 사용자 데이터 스크립트를 사용 &amp;rarr; 인스턴스 부트스트래핑 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;부트스트랩 : 머신이 작동될 때 명령을 시작하는 것&lt;/li&gt;
&lt;li&gt;스크립트는 처음 시작할 때, 한 번만 실행&lt;/li&gt;
&lt;li&gt;EC2 사용자 데이터에는 특정한 목적이 있는데, 부팅 작업을 자동화하기 때문에 부트스트래핑이라는 이름이 붙음&lt;/li&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용자 데이터 스크립트에 작업을 추가할 수록, 부팅 시 인스턴스가 할 일이 늘어남&lt;/li&gt;
&lt;li&gt;EC2 사용자 데이터 스크립트는 루트 계정에서 실행&lt;/li&gt;
&lt;li&gt;&amp;rarr; 모든 명령문은 sudo로 해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EC2 인스턴스의 종류&lt;/h3&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EC2 인스턴스 유형 기본 사항&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목적에 따른 분류&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;General Purpose : 일반적인 목적&lt;/li&gt;
&lt;li&gt;Compute Optimized(C) : 컴퓨터 집약적인 작업
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일부 데이터의 일괄 처리, 고성능 웹 서버, HPC, 머신러닝, 전용 게임 서버 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Memory Optimized(R) : 대규모 데이터셋 처리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고성능의 데이터베이스, 분산 웹스케일 캐시 저장소, BI에 최적화된 인 메모리 데이터베이스, 대규모 비정형 데이터의 실시간 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Accelerate Computing&lt;/li&gt;
&lt;li&gt;Storage Optimized(I, G, H) : 로컬 스토리지에서 대규모 데이터 셋에 액세스 할 때 적합
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OLTP, NoSQL 데이터베이스, Redis 같은 메모리 데이터베이스의 캐시, 데이터 웨어하우징 애플리케이션, 분산 파일 시스템&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Instance Features&lt;/li&gt;
&lt;li&gt;Measuring Instance Performance&lt;/li&gt;
&lt;/ol&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보안 그룹 : AWS에서 네트워크 보안을 실행하는 데 핵심
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스에 들어오고 나가는 트래픽을 제어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;허용 규칙만 포함&lt;/li&gt;
&lt;li&gt;IP 주소를 참조해 규칙을 만들 수 있다. 보안 그룹끼리 서로 참조 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보안 그룹
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스의 방화벽&lt;/li&gt;
&lt;li&gt;포트로의 액세스를 통제 &amp;rarr; 인증된 IP 주소의 범위를 확인 (IPv4, IPv6)&lt;/li&gt;
&lt;li&gt;인바운드, 아웃바운드 네트워크 통제&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 인스턴스에 연결 가능&lt;/li&gt;
&lt;li&gt;보안 그룹과 인스턴스 간의 일대일 관계는 없다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안 그룹은 지역과 VPC 결합으로 통제됨 &lt;/b&gt;&lt;b&gt;&amp;rarr; 지역을 전환하면 새 보안 그룹을 생성하거나 다른 VPC를 생성해야 함&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;보안 그룹은 EC2 외부에 존재&amp;nbsp;&amp;rarr; 트래픽이 차단 여부를 EC2 인스턴스에서 확인할 수 없다&lt;/li&gt;
&lt;li&gt;SSH 액세스를 위해 하나의 별도 보안 그룹을 유지하는 것이 좋다&lt;/li&gt;
&lt;li&gt;연결에 실패하면 타임아웃이 발생하거나, 어떤 포트에 연결을 시도하는데 컴퓨터가 멈추고 대기만 한다면? &amp;rArr; 보안 그룹의 문제&lt;/li&gt;
&lt;li&gt;연결 거부 오류가 발생하면(거부 응답을 받으면)&amp;nbsp;&amp;rArr; 보안 그룹은 실행되어 트래픽을 통과했지만, 애플리케이션에 문제가 생긴 것&lt;/li&gt;
&lt;li&gt;기본적으로 모든 인바운드 트래픽은 차단, 아웃바운드 트래픽은 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다이어그램&lt;/h3&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;보안 그룹 1의 인바운드를 보안 그룹 2에 허용했다면
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;허용된 그룹 내에 있거나, 같은 보안 그룹이면 통신 가능&lt;/li&gt;
&lt;li&gt;그렇지 않으면 거부&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시험을 위해 알아야 하는 포트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;22 : SSH (Linux &amp;rarr; EC2)&lt;/li&gt;
&lt;li&gt;21 : FTP (파일 전송 프로토콜), 파일 공유 시스템에 파일을 업로드하는데 사용&lt;/li&gt;
&lt;li&gt;22 : SFTP(Secure File Transfer Protocol), SSH를 사용해서 업로드하기 때문에 SSH와 같은 포트 사용&lt;/li&gt;
&lt;li&gt;80 : HTTP, 보안되지 않은 사이트에 액세스&lt;/li&gt;
&lt;li&gt;443 : HTTPS, 보안 사이트에 액세스, 현재 표준&lt;/li&gt;
&lt;li&gt;3389 : RDP(Remote Descktop Protocol), 윈도우 인스턴스에 로그인할 때 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SSH (Secure Shell) 개요&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Linux는 SSH를 서버에 사용해 연결
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH : 명령줄 인터페이스 도구, Mac, Linux에서 사용&lt;/li&gt;
&lt;li&gt;Putty : SSH와 동일, window에서 사용&lt;/li&gt;
&lt;li&gt;EC2 Instance Connect : 웹 브라우저에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSH 프로토콜을 사용 &amp;rarr; EC2 인스턴스에 연결하도록 함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EC2 인스턴스 구매 옵션&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;On-demand : 단기적인 워크로드에 좋다&lt;/li&gt;
&lt;li&gt;Reserved
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Reverved Instance : &lt;b&gt;1년 or 3년 단위&lt;/b&gt; 장기간의 워크로드&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Convertible&lt;/b&gt; Reserved Instance : 시간이 지나면 인스턴스 &lt;b&gt;타입을 변경,&lt;/b&gt; 유연한 인스턴스&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Saving Plans&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1년 or 3년&lt;/li&gt;
&lt;li&gt;달러 단위로 사용량을 약정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용량 한도를 넘어가면 온디맨드 가격으로 청구&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Spot Instance&lt;/b&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;지불 최대 가격을 넘으면 언제든지 손실될 위험 &amp;rarr; &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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dedicated hosts : 실제 물리적 서버 전체를 예약, 전용 호스트&lt;/li&gt;
&lt;li&gt;Dedicated Instacne : 다른 고객이 하드웨어를 공유하지 않음, 전용 인스턴스&lt;/li&gt;
&lt;li&gt;Capacity Reservations : 원하는 기간 동안 특정 AZ에 용량을 예약할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스팟 인스턴스&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;온디맨드 방식에 비해 비용 절감&lt;/li&gt;
&lt;li&gt;정의한 최대 가격보다 현재 스팟 가격이 높아지는 경우 - 2분 간의 유예 시간 제공
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;인스턴스 중단
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업을 멈추고, 인스턴스를 중단&amp;rarr; &lt;b&gt;중단했던 부분부터 이어서 작업 &lt;/b&gt;&amp;rarr; 스팟 가격이 최대 가격보다 낮아지는 때에 인스턴스 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;인스턴스 종료&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Spot Block 전략 &amp;rarr; 서비스 중지&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스팟 인스턴스의 종료&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원리 &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Spot Fleets&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 세트의 스팟 인스턴스 + 선택적 온디맨드 인스턴스 조합&lt;/li&gt;
&lt;li&gt;정의된 비용 제한 내에서 용량을 맞추기 위해 노력
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용 가능한 런치풀(Launch Pool)을 통해 실행&lt;/li&gt;
&lt;li&gt;플릿이 적절한 런치풀을 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;원하는 비용 용량에 도달한 경우 &amp;rarr; 인스턴스 실행을 중단&lt;/li&gt;
&lt;li&gt;스팟 인스턴스를 할당해 줄 전략을 정의하게 됨
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;lowestPrice&lt;/b&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;&amp;rarr; &lt;b&gt;비용 최저&lt;/b&gt;, 짧은 워크로드 시 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;diversified 전략
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존에 정의한 모든 풀에 걸쳐 분산이 된다&lt;/li&gt;
&lt;li&gt;긴 워크로드에 적합, 가용성이 뛰어남
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 풀이 중단되더라도 다른 풀이 활성화되어 있기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;capacityOptimized 전략
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인스턴스의 개수에 따라서 최적 용량으로 실행, 적절한 풀을 찾아주는 옵션&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Cloud</category>
      <category>AWS</category>
      <category>cloud</category>
      <category>강의노트</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/356</guid>
      <comments>https://hei-jayden.tistory.com/356#entry356comment</comments>
      <pubDate>Sat, 2 Sep 2023 21:06:12 +0900</pubDate>
    </item>
    <item>
      <title>[AWS/Cloud] 강의 노트: IAM 및 AWS CLI</title>
      <link>https://hei-jayden.tistory.com/355</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;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RGrWj/btssvf4CJcR/lw8Z0Vuv0yBjN37jVJbHWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RGrWj/btssvf4CJcR/lw8Z0Vuv0yBjN37jVJbHWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RGrWj/btssvf4CJcR/lw8Z0Vuv0yBjN37jVJbHWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRGrWj%2Fbtssvf4CJcR%2Flw8Z0Vuv0yBjN37jVJbHWK%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;576&quot; height=&quot;302&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IAM 소개 : 사용자, 그룹, 정책&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IAM : Identity and Access Mangement
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자를 생성, 그룹에 배치 &amp;rarr; 글로벌 서비스 해당&lt;/li&gt;
&lt;li&gt;루트 계정 : 오직 계정을 생성할 때만 사용되야 함 &amp;rarr; 사용자를 생성해서 사용&lt;/li&gt;
&lt;li&gt;하나의 사용자는 조직 내의 한 사람에 해당&lt;/li&gt;
&lt;li&gt;필요에 따라 그룹으로 묶을 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;그룹에는 사용자만 배치 &amp;rarr; 다른 그룹을 포함시킬 수 없다&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;IAM : Permission&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;권한을 부여하기 위해 IAM 정책이라고 불리는 JSON 문서를 지정할 수 있다&lt;/li&gt;
&lt;li&gt;AWS에서는 &lt;b&gt;최소 권한의 원칙&lt;/b&gt;을 적용&lt;/li&gt;
&lt;li&gt;cf. 사용자에게 필요로 하는 것 이상의 권한을 주지 않는다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IAM 정책&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹을 생성하고 정책을 그룹 레벨에서 연결&lt;/li&gt;
&lt;li&gt;&amp;rarr; 정책이 그룹의 모든 구성원에게 적용, 정책의 상속이 가능&lt;/li&gt;
&lt;li&gt;특정 사용자에게만 연결이 가능한 정책의 생성도 가능 : &lt;b&gt;Inline 정책&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정책의 구조&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Sid : 문장 ID&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IAM MFA 개요&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹과 사용자들의 정보가 침해당하지 않도록 보호&lt;/li&gt;
&lt;li&gt;방어 매커니즘 2가지
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;비밀번호 정책&lt;/li&gt;
&lt;li&gt;MFA&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;IAM - Password Polity&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;특정 글자 요구 : 대문자, 소문자, 특수문자&lt;/li&gt;
&lt;li&gt;IAM 사용자들의 비밀번호 변경 허용/금지&lt;/li&gt;
&lt;li&gt;일정 기간 후 비밀번호 만료, 새 비밀번호 요구&lt;/li&gt;
&lt;li&gt;비밀번호 재사용 금지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MFA (Multi Factor Athentication)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다요소 인증 : 비밀번호 + 보안 장치
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MFA 생성 토큰 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AWS에서 MFA 매커니즘 사용을 필수 권장&lt;/li&gt;
&lt;li&gt;해킹으로 인해 비밀번호가 누출되더라도 계정 침해되는 것을 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MFA 옵션&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가상 MFA 장치&lt;/li&gt;
&lt;li&gt;U2F 보안 키 : 물리적 보안 장치&lt;/li&gt;
&lt;li&gt;하드웨어 키 팝 MFA 장치&lt;/li&gt;
&lt;li&gt;..&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS 액세스 키, CLI, SDK&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유저가 AWS에 액세스 하는 방법은 3가지
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;AWS 콘솔 : password + MFA 보안&lt;/li&gt;
&lt;li&gt;CLI (Command Line Interface, 명령줄 인터페이스) : 액세스 키 보안&lt;/li&gt;
&lt;li&gt;SDK (Software Developer Kit) : 액세스 키 보안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;애플리케이션 코드 내에서 API를 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;액세스 키의 생성 &amp;rArr; 관리 콘솔 사용&lt;/li&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;AWS CLI&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령줄 셸에서 명령어를 사용해서 AWS 서비스들과 상호작용할 수 있도록 해주는 도구&lt;/li&gt;
&lt;li&gt;모든 명령어가 aws로 시작&lt;/li&gt;
&lt;li&gt;AWS 서비스의 공용 API로 직접 액세스가 가능&lt;/li&gt;
&lt;li&gt;CLI를 통해 리소스를 관리하는 스크립트를 개발해 일부 작업을 자동화 가능&lt;/li&gt;
&lt;li&gt;오픈 소스이며 관리 콘솔을 사용하지 않고 CLI만으로도 사용이 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;AWS SDK&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;특정 언어로 된 라이브러리의 집합 &amp;rarr; 프로그래밍 언어에 따라 개별 SDK가 존재&lt;/li&gt;
&lt;li&gt;터미널 내에서 사용하는 것이 아님 &amp;rarr; 코딩을 통해 애플리케이션 내에 심어두는 것&lt;/li&gt;
&lt;li&gt;다양한 프로그래밍 언어 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IAM Role&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이를 위해 사용자와 마찬가지로 권한이 필요AWS 서비스 몇 가지는 우리의 계정에서 실행해야 함 &lt;br /&gt;&amp;rArr; AWS 서비스에 권한을 부여해야 한다 &amp;rArr; IAM Role을 생성&lt;/li&gt;
&lt;li&gt;EC2 인스턴스를 사용하기 위해, 권한을 부여해야 함&lt;/li&gt;
&lt;li&gt;IAM Role을 만들어 EC2, IAM Role을 하나의 개체로 만든다&lt;/li&gt;
&lt;li&gt;EC2 인스턴스가 AWS에 있는 어떤 정보에 접근하려고 할 때, IAM Role 사용&lt;/li&gt;
&lt;li&gt;권한을 올바르게 부여한 경우, 호출에 접근&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IAM 보안 도구&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;IAM 자격 증명 보고서
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계정 수준&lt;/li&gt;
&lt;li&gt;계정이 있는 사용자와 다양한 자격 증명의 상태를 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IAM 액세스 관리자
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 수준&lt;/li&gt;
&lt;li&gt;사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IAM 모범 사례&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;누군가 여러분의 AWS를 이용하고 싶다면&amp;nbsp;&amp;rarr; 자격 증명을 주지 말고 새로운 사용자를 만들어 준다&lt;/li&gt;
&lt;li&gt;사용자를 그룹에 넣고, 해당 그룹에 권한을 부여&lt;/li&gt;
&lt;li&gt;MFA 사용을 권장&lt;/li&gt;
&lt;li&gt;권한을 부여할 때마다 역할을 만들고 사용해야 함&lt;/li&gt;
&lt;li&gt;CLI, SDK를 사용할 경우 &amp;rarr; 반드시 액세스 키를 만든다&lt;/li&gt;
&lt;li&gt;cf. 액세스 키는 비밀번호와 같다&lt;/li&gt;
&lt;li&gt;계정 권한의 감사 &amp;rarr; IAM 자격 증명 보고서, IAM 액세스 분석기를 사용할 수 있다&lt;/li&gt;
&lt;li&gt;절대로 IAM 사용자와 액세스 키를 공유하지 말 것&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IAM 요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS 사용자와 IAM 사용자가 매핑&lt;/li&gt;
&lt;li&gt;사용자는 AWS 콘솔에 대한 비밀번호를 갖는다&lt;/li&gt;
&lt;li&gt;사용자를 그룹에 두어 사용하는 것이 바람직
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹은 사용자만을 포함&lt;/li&gt;
&lt;li&gt;다른 그룹을 포함할 수는 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용자나 그룹에 권한을 부여&lt;/li&gt;
&lt;li&gt;IAM 정책을 생성 &amp;rarr; JSON 문서&lt;/li&gt;
&lt;li&gt;AWS에서 역할을 사용할 수 있다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 권한을 주려고 할 때는 IAM 역할을 만들어야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;보안과 관련해 MFA를 활성화 &amp;rarr; 로그인 시 2번째 장치를 이용, 강한 비밀번호 정책&lt;/li&gt;
&lt;li&gt;CLI 또는 SDK를 이용해 액세스하려면, 반드시 액세스 키를 만들어야 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그래밍 방식으로 접근할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IAM 대시보드를 감사 &amp;rarr; 자격 증명 보고서(사용자 관련 정보), IAM 액세스 관리자(특정 사용자 정보)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Cloud</category>
      <category>AWS</category>
      <category>cloud</category>
      <category>강의노트</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/355</guid>
      <comments>https://hei-jayden.tistory.com/355#entry355comment</comments>
      <pubDate>Thu, 31 Aug 2023 20:06:49 +0900</pubDate>
    </item>
    <item>
      <title>[AWS/Cloud] 강의 노트: AWS 시작하기</title>
      <link>https://hei-jayden.tistory.com/354</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;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ewEs84/btssDOEv1n0/DfRk3EaK6qGwMTktvkkm31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ewEs84/btssDOEv1n0/DfRk3EaK6qGwMTktvkkm31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ewEs84/btssDOEv1n0/DfRk3EaK6qGwMTktvkkm31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FewEs84%2FbtssDOEv1n0%2FDfRk3EaK6qGwMTktvkkm31%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;576&quot; height=&quot;302&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;AWS Region&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리전 : 데이터 센터의 집합&lt;/li&gt;
&lt;li&gt;대부분의 서비스들은 특정 리전에 연결되어 국한됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;리전을 선택 요소&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;법률 준수&lt;/li&gt;
&lt;li&gt;지연 시간&lt;/li&gt;
&lt;li&gt;서비스 가능 여부&lt;/li&gt;
&lt;li&gt;요금&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;가용 영역&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각각의 리전은 많은 가용 영역을 갖는다&lt;/li&gt;
&lt;li&gt;보통은 세 개씩&lt;/li&gt;
&lt;li&gt;재난 상황에 대비해 서로 분리&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Cloud</category>
      <category>AWS</category>
      <category>cloud</category>
      <category>강의노트</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/354</guid>
      <comments>https://hei-jayden.tistory.com/354#entry354comment</comments>
      <pubDate>Wed, 30 Aug 2023 18:52:11 +0900</pubDate>
    </item>
    <item>
      <title>[코트드리/Java] 최적의 십자 모양 폭발</title>
      <link>https://hei-jayden.tistory.com/353</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner; 

public class Main {
    public static final int DIR_NUM = 4; 
    public static final int MAX_N = 50;

    public static final int[] dx = new int[]{-1,0,1,0};
    public static final int[] dy = new int[]{0,1,0,-1};
    
    public static int n, ans;

    public static int[][] orgGrid = new int[MAX_N][MAX_N];
    public static int[][] grid = new int[MAX_N][MAX_N];
    public static int[][] temp = new int[MAX_N][MAX_N];
    public static boolean[][] visited = new boolean[MAX_N][MAX_N];

    public static void initializeGrid() {
        for (int i=0; i&amp;lt;n; i++) {
            for (int j=0; j&amp;lt;n; j++) {
                grid[i][j] = orgGrid[i][j];
            }
        }
    }

    public static void initializeVisited() {
        for (int i=0; i&amp;lt;n ;i++) {
            for (int j=0; j&amp;lt;n; j++) {
                visited[i][j] = false; 
            }
        }
    }

    public static boolean inRange(int x, int y) {
        return 0&amp;lt;=x &amp;amp;&amp;amp; x&amp;lt;n &amp;amp;&amp;amp; 0&amp;lt;=y &amp;amp;&amp;amp; y&amp;lt;n;
    }

    public static void initializeTemp() {
        for (int i=0; i&amp;lt;n; i++) {
            for (int j=0; j&amp;lt;n; j++) {
                temp[i][j] = 0;
            }
        }
    }

    public static void explode(int x, int y, int power) {
        for (int d=0; d&amp;lt;DIR_NUM; d++) {
            for (int p=0; p&amp;lt;power; p++){
                int nx = x + dx[d]*p;
                int ny = y + dy[d]*p;
                
                if (inRange(nx, ny)) {
                    grid[nx][ny] = 0;
                }
            }
        }
    }

    // **i, j 확인 순서 주의
    public static void drop() {  
        initializeTemp();

        for (int j=0; j&amp;lt;n; j++) {
            int currIdx = n-1; 

            for (int i=n-1; i&amp;gt;=0; i--) {
                if (grid[i][j] == 0) continue;  // *빠지면 안됨
                temp[currIdx--][j] = grid[i][j];
            }
        }

        // grid 업데이트: temp
        for (int i=0; i&amp;lt;n; i++) {
            for (int j=0; j&amp;lt;n; j++) {
                grid[i][j] = temp[i][j];
            }
        }
    }

    public static int cntPair() {
        initializeVisited();  // *초기화 필수: 시간 많이 잡아먹힘
        int ret = 0;

        for (int x=0; x&amp;lt;n; x++) {
            for (int y=0; y&amp;lt;n; y++) {
                if (grid[x][y] == 0) continue;

                for (int d=0; d&amp;lt;DIR_NUM; d++) {
                    int nx = x+dx[d];
                    int ny = y+dy[d];

                    if (inRange(nx, ny) &amp;amp;&amp;amp; (grid[x][y]==grid[nx][ny]) &amp;amp;&amp;amp; (!visited[x][y]||!visited[nx][ny])) {
                        ret ++; 
                        visited[x][y] = true;
                        visited[nx][ny] = true;
                    }
                }
            }
        }
        return ret;
    }

    public static int pairCnt(int x, int y) {
        initializeGrid();
        int ret = -1;

        explode(x, y, grid[x][y]);
        drop();
        ret = Math.max(ret, cntPair());

        return ret;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();

        for (int i=0; i&amp;lt;n; i++) {
            for (int j=0; j&amp;lt;n; j++) {
                orgGrid[i][j] = sc.nextInt();
            }
        }

        initializeGrid();

        for (int i=0; i&amp;lt;n; i++) { 
            for (int j=0; j&amp;lt;n; j++){
                ans = Math.max(ans, pairCnt(i, j));
            } 
        }
        
        System.out.println(ans);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;pre id=&quot;code_1693385397171&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static int pairCnt(int x, int y) {
    ..
    explode(x, y, grid[x][y]); 
    drop();
    ret = Math.max(ret, cntPair());
    ..
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;폭발 / 떨어뜨리기 / 쌍 개수 구하기로 구분해서 풀이 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/2/problems/best-cross-shape-bomb?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot;&gt;https://www.codetree.ai/missions/2/problems/best-cross-shape-bomb?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1693385349593&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&quot; data-og-description=&quot;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&quot; data-og-host=&quot;www.codetree.ai&quot; data-og-source-url=&quot;https://www.codetree.ai/missions/2/problems/best-cross-shape-bomb?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; data-og-url=&quot;https://codetree.ai/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/byR0SI/hyTMdEv7HI/pHS5LKZgAR42XeS6Krerfk/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/2/problems/best-cross-shape-bomb?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.codetree.ai/missions/2/problems/best-cross-shape-bomb?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/byR0SI/hyTMdEv7HI/pHS5LKZgAR42XeS6Krerfk/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508');&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;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.codetree.ai&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;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;</description>
      <category>Algorithm Study/Java</category>
      <category>java</category>
      <category>알고리즘</category>
      <category>완전탐색</category>
      <category>최적의 십자 모양 폭발</category>
      <category>코드트리</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/353</guid>
      <comments>https://hei-jayden.tistory.com/353#entry353comment</comments>
      <pubDate>Wed, 30 Aug 2023 17:51:34 +0900</pubDate>
    </item>
    <item>
      <title>[코드트리/Java] 금 채굴하기</title>
      <link>https://hei-jayden.tistory.com/352</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner;

public class Main {
    public static final int MAX_N = 20;
    public static final int MAX_M = 10; 

    public static int n, m;

    public static int[][] grid = new int[MAX_N][MAX_N];

    // 채굴에 들어가는 비용
    public static int getArea(int k) {
        return k*k + (k+1)*(k+1);  
    }

    // 주어진 k에 대해 채굴 가능한 금의 개수
    public static int getNumOfGold(int x, int y, int k) {
        int numOfGold = 0;

        for (int i=0; i&amp;lt;n; i++) {
            for (int j=0; j&amp;lt;n; j++) {
                // **k보다 작은 마름모 범위에서 금의 개수 확인
                if (Math.abs(i-x) + Math.abs(j-y) &amp;lt;= k) { 
                    numOfGold += grid[i][j];
                }
            }
        }
        return numOfGold;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();  // 금의 가격, 채굴 비용: k*k + (k+1)*(k+1)

        for (int i=0; i&amp;lt;n; i++) {
            for (int j=0; j&amp;lt;n; j++) {
                grid[i][j] = sc.nextInt();
            }
        }

        int ans = 0;
        for (int i=0; i&amp;lt;n; i++) {
            for (int j=0; j&amp;lt;n; j++) {
                // *2*(n-1) 범위: (0, 0)~(n-1, n-1)를 포함하기 위한 k값 설정
                // *등호 주의
                for (int k=0; k &amp;lt;= 2*(n-1); k++) {  
                    int numOfGold = getNumOfGold(i, j, k);

                    if (numOfGold*m &amp;gt;= getArea(k)) {  // 금의 가치 &amp;gt;= 채굴비용일 때, 비교
                        ans = Math.max(ans, numOfGold);
                    }
                }
            }
        }
        
        System.out.println(ans); 
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마름모 범위 : |i-x| + |j-y| &amp;lt;= k 를 통해 간단하게 설정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/2/problems/gold-mining?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot;&gt;https://www.codetree.ai/missions/2/problems/gold-mining?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1693164420351&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&quot; data-og-description=&quot;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&quot; data-og-host=&quot;www.codetree.ai&quot; data-og-source-url=&quot;https://www.codetree.ai/missions/2/problems/gold-mining?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; data-og-url=&quot;https://codetree.ai/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dWHDUS/hyTL5Fwqko/KCaiGETfBLQnvkdJDbdSAk/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/2/problems/gold-mining?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.codetree.ai/missions/2/problems/gold-mining?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dWHDUS/hyTL5Fwqko/KCaiGETfBLQnvkdJDbdSAk/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508');&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;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.codetree.ai&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm Study/Java</category>
      <category>금채굴하기</category>
      <category>시뮬레이션</category>
      <category>완전탐색</category>
      <category>코드트리</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/352</guid>
      <comments>https://hei-jayden.tistory.com/352#entry352comment</comments>
      <pubDate>Mon, 28 Aug 2023 04:31:07 +0900</pubDate>
    </item>
    <item>
      <title>[AWS/Cloud] SAA-03 취득 주절주절 후기, 공부 방법 정리</title>
      <link>https://hei-jayden.tistory.com/351</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;프롤로그&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;싸피에서 한 기업의 인사담당자와 취업 상담을 진행한 적이 있었다. 해당 기업은 앞으로 클라우드 직무 채용 비중을 늘릴 계획이 있으며, 클라우드 직무는 앞으로 유망할 분야이므로 관심을 갖고 지원해 달라는 말을 전해주셨다. 당시에 진행중이던 인프라 담당 업무에 애를 먹고 있었고, 유능한 친구들처럼 MSA, 쿠버네티스 같은 기술에 대해 두려움이 꽤 있었기 때문에 내가 도전할 직무는 아닌가.. 싶었지만 인사담당자분은 꽤나 희망적인 메시지를 전해주셨다.&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;&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;'자격증만이라도 일단 취득해볼까?' 남일 처럼 듣고 있던 상담이 갑자기 귀에 들어온 것을 보면, 인프라 직무에 관심이 없는게 아니라 어떤 두려움이 아니었을까 싶었다. 정보처리기사 실기 시험을 치르고 나서 발표까지 무려 한달. 방콕하며 공부했던 기세를 몰아 클라우드 자격증에 도전하기로 계획했다&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;h4 data-ke-size=&quot;size20&quot;&gt;자격증 응시 결과&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clZaVM/btssgm2NdBU/JRs08JfmuU3nXjfZPjl3t1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clZaVM/btssgm2NdBU/JRs08JfmuU3nXjfZPjl3t1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clZaVM/btssgm2NdBU/JRs08JfmuU3nXjfZPjl3t1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclZaVM%2Fbtssgm2NdBU%2FJRs08JfmuU3nXjfZPjl3t1%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;387&quot; height=&quot;259&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A4RNF/btssinmkp8L/1pKVkHlXGNwYmZQq501cb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A4RNF/btssinmkp8L/1pKVkHlXGNwYmZQq501cb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A4RNF/btssinmkp8L/1pKVkHlXGNwYmZQq501cb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA4RNF%2Fbtssinmkp8L%2F1pKVkHlXGNwYmZQq501cb0%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;374&quot; height=&quot;284&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;취득 후기 글들을 보면 '시험 직후에 결과가 나온다' 혹은 '5시간 정도 걸린다' 등의 글을 보았기 때문에 시험을 보고나서 꽤나 마음을 많이 졸였었다. 밤 11시쯤에 끝내 시험 결과가 언제 나올지 몰라 새벽녘까지 잠도 못잤었는데, 결과적으로 다음날 오후 6시에 발표되었다. 내 추측으로는 어느 시간을 기준으로 일괄적으로 처리하고 6시쯤 결과를 전해주는게 아닐까 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;결과 발표는 등록해두었던 gmail로 전송되었다. 정확하게는 aws보다 뱃지(?)를 인증해주는 곳에서 먼저 메일을 전달받았다. 뱃지가 온다면 합격이라는 건가? 탈락 뱃지도 있는건 아니겠지? 하며 서둘러 결과 페이지를 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lrFf9/btssfvTtDU9/CWhD7CrY3kMaIdPaKNoPC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lrFf9/btssfvTtDU9/CWhD7CrY3kMaIdPaKNoPC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lrFf9/btssfvTtDU9/CWhD7CrY3kMaIdPaKNoPC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlrFf9%2FbtssfvTtDU9%2FCWhD7CrY3kMaIdPaKNoPC1%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;543&quot; height=&quot;205&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;엌..! 731/720으로 간신히 턱걸이 합격이라니. 까딱했다가는 다시 시험을 볼 수도 있었다는 생각에 손이 벌벌 떨렸다. 900점대 점수를 보유한 블로거들을 보며 나 또한 마스터를 꿈꿨었는데, 만점을 맞아야지 하며 공부했던 순간이 부끄러웠다. 그래도 합격만 하면 끝낸거잖아? 가성비로 시험 공부를 마쳤다는 생각에 기분이 금새 좋아졌었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;시험 할인 혜택&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험에 재도전하기 정말 싫었던 이유중 하나는 아무래도 비용 때문이었다. 17만원이나 되는 자격증 시험료를 다시 짜내야 할 걸 생각하면 꽤나 아찔했다. 때문에 한번에 취득하는 것이 필요했다. 합격 후기들을 찾아보던 중에 시험료 할인 혜택이 제공된다는 사실을 알게 되었다. 많은 분들이 정가로 시험을 치르시던 것 같던데, 많은 분들이 저렴하게 시험 응시 기회를 얻길 바란다.&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;723&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqjwqf/btssilPzON7/puFAgnZ92nlbmRSJlKAfg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqjwqf/btssilPzON7/puFAgnZ92nlbmRSJlKAfg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqjwqf/btssilPzON7/puFAgnZ92nlbmRSJlKAfg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqjwqf%2FbtssilPzON7%2FpuFAgnZ92nlbmRSJlKAfg0%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;451&quot; height=&quot;221&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMnuC5/btsshroZVpK/enTGMFPgFSRORcLmRnc5r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMnuC5/btsshroZVpK/enTGMFPgFSRORcLmRnc5r0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMnuC5/btsshroZVpK/enTGMFPgFSRORcLmRnc5r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMnuC5%2FbtsshroZVpK%2FenTGMFPgFSRORcLmRnc5r0%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;444&quot; height=&quot;269&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 aws certified challenge 2023을 검색해준다. 가장 첫번째로 나오는 페이지를 클릭하면 위와 같은 페이지가 나오는데 Register를 진행 해주면 된다&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;640&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yvl9u/btssigHwrvI/U3ZchwfKZemStioI1zpGyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yvl9u/btssigHwrvI/U3ZchwfKZemStioI1zpGyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yvl9u/btssigHwrvI/U3ZchwfKZemStioI1zpGyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyvl9u%2FbtssigHwrvI%2FU3ZchwfKZemStioI1zpGyk%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;380&quot; height=&quot;304&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx1tjA/btsshuF0BzM/PabkSHKvbkhXVmbmzPVq00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx1tjA/btsshuF0BzM/PabkSHKvbkhXVmbmzPVq00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx1tjA/btsshuF0BzM/PabkSHKvbkhXVmbmzPVq00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx1tjA%2FbtsshuF0BzM%2FPabkSHKvbkhXVmbmzPVq00%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;393&quot; height=&quot;213&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록을 마치면 할인 코드가 제공된다. 쿠폰을 등록하면 50%할인이 적용되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;공부 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;SAA-03은 꽤나 불친절한 시험이었다. 여느 블로거들과 똑같이 Udemy 강의를 이용해 이론학습을 진행했고, 중고나라를 통해 더미 문제집을 구했다(5천원~1만원 정도했던 것 같다). 그런데 나의 경우, 한국어로 된 문제집과 애매한 답안지..는 정답을 선택하는데 큰 도움이 되지 못했다. 정답은 해설을 보고 알겠는데, 오답이 왜 오답인지에 대해서도 알아야 넘어갈 수 있는 성격 탓에 다시 examtopic 사이트를 이용했다. 애매한 문항의 경우 유료로 구매한 문제집 정답을 기준으로 이해했고, 대부분의 문제는 문제 아래 댓글을 통해 이해했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2mOda/btssigOiona/aulic2Z3zCvpjHwaP4rF80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2mOda/btssigOiona/aulic2Z3zCvpjHwaP4rF80/img.png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;476&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;46.28&quot; style=&quot;width: 45.739%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2mOda/btssigOiona/aulic2Z3zCvpjHwaP4rF80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2mOda%2FbtssigOiona%2Faulic2Z3zCvpjHwaP4rF80%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;690&quot; height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZzxhX/btsshvSrPw9/7aZUZDc2fEmXM1bFbEF3i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZzxhX/btsshvSrPw9/7aZUZDc2fEmXM1bFbEF3i1/img.png&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;413&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;53.72&quot; style=&quot;width: 53.0982%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZzxhX/btsshvSrPw9/7aZUZDc2fEmXM1bFbEF3i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZzxhX%2FbtsshvSrPw9%2F7aZUZDc2fEmXM1bFbEF3i1%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;695&quot; height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;크롬의 번역기를 이용해서 한글로 번역했다. 위와 같은 상황이 학습 단계에서 꽤나 난감하게 느껴진다. C가 정답인데 최다 투표는 A를 가리키는 것 처럼 표기된 정답은 일단 믿으면 안된다. 최다 투표가 정답인 경우가 많긴 한데, gpt에 질문해보면 최다 투표가 꼭 정답을 가리키는 것은 아닌 것 같다. 따라서 단순히 문제만 암기하지 말고, 키워드 검색을 통해 지식을 다져가는 것을 추천한다.&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;더미 문제는 290번 문제까지만 풀고 시험을 치렀다. 구매한 더미 문제는 580번대 까지 문항이 있었는데, 모호한 정답과 부분적인 해설을 가지고 공부하면서 머리에 쥐가 나기 시작했기 때문에 참지 못하고 시험을 보는 것을 선택했다. 시험은 총 65문항이고, 일부 문제는 점수에 적용되지 않는 문항이다. 더미 문제가 시험에 그대로, 많이 나온다는 정보는 사실이었다. 체감으로는 25%~40%정도가 눈에 익은 문제들이었다. 잔꾀가 있는 분들은 더미만 보고도 취득할 수는 있을 것 같았다.&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;4개의 보기 중 많아봤자 2문제 이상 고르는 문항은 나오지 않을 것이라 생각했었는데, 예상과 다른 문제도 출제되었다. 7문항 중 3개를 선택하는 문제도 있다보니 참고가 되었으면 좋겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;시험 환경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;OnVue로 집에서 응시했다. 인증 과정이 까다롭다는 의견들이 있어서 현장 응시를 생각했었지만, 8시까지 타지역의 컴퓨터 학원에 도착하기는 귀찮은 점이 많았다. OnVue의 경우 장점이 한 가지 더 있는데, 장소 외에도 시간에 대한 제약이 없었다.&amp;nbsp; 평일/주말 가리지 않고 예약이 가능했고, 시간대 또한 이른 아침부터 밤, 새벽 가리지 않고 선택할 수 있어서 좋았다. 비싼 글로벌 자격증의 장점을 하나 발견했다. 응시 환경 점검 과정은 예상보다는 어렵지 않았다. 영어로 설명해주는 감독관의 이야기를 알아들을 수 있으면 되는 정도. 아마 중국인 감독관이 담당한 것 같았는데 꽤나 싸나웠던(?) 점만 빼면 별 문제 없었다. 시험 도중에 누구도 응시중인 방에 들어와선 안된다고 하며, 시선이 밖으로만 향해도 집중해달라는 메시지가 날아오니.. 별 의심사지 않고 고분고분 응시하도록 하자. 문제를 소리내어 읽는 것도 제한되었다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;취업 후기는 일단 여기까지다. 당분간은 강의 들으면서 정리했었던 노트를 블로그에 조금씩 풀어볼까 한다. 돈받고 구매했던 더미 자료는 원하는 분들이 있으면 공유해드려도 되지 않을까 싶다. 혹시 필요 하신 분이 있다면 댓글에 남겨주셔도 좋을것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Cloud</category>
      <category>AWS</category>
      <category>SAA-03</category>
      <category>자격증</category>
      <category>취득</category>
      <category>클라우드</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/351</guid>
      <comments>https://hei-jayden.tistory.com/351#entry351comment</comments>
      <pubDate>Sat, 26 Aug 2023 04:56:12 +0900</pubDate>
    </item>
    <item>
      <title>AWS SAA-C03 학습 중..</title>
      <link>https://hei-jayden.tistory.com/350</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;8월 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;미리 봐둔 강의가 몇개 있었지만, 1차로 강의보고 필기하는데 시간이 꽤 오래 걸렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후로는 더미문제집 풀이 + 해설 정리, 강의 2차 수강, 복습 및 암기로 시험을 준비할 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8월 안으로 취득까지 화이팅&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;897&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vSFLh/btsrhEipqoV/xzHeAe0ZtSJHP9pB9N4UHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vSFLh/btsrhEipqoV/xzHeAe0ZtSJHP9pB9N4UHk/img.png&quot; data-alt=&quot;보안 부분은 눈에 잘 안들어와..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vSFLh/btsrhEipqoV/xzHeAe0ZtSJHP9pB9N4UHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvSFLh%2FbtsrhEipqoV%2FxzHeAe0ZtSJHP9pB9N4UHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;748&quot; height=&quot;275&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보안 부분은 눈에 잘 안들어와..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>비정기적인 일기</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/350</guid>
      <comments>https://hei-jayden.tistory.com/350#entry350comment</comments>
      <pubDate>Tue, 15 Aug 2023 01:56:33 +0900</pubDate>
    </item>
    <item>
      <title>AI 역량검사 후기</title>
      <link>https://hei-jayden.tistory.com/349</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;서류를 통과하고 처음으로 AI 역량검사를 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음으로 본 AI 면접이라 많이 긴장도 했고, 끝나고 나서도 얼떨떨하다.&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;h4 data-ke-size=&quot;size20&quot;&gt;성향 파악&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;게임&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;눈이 빠지는 줄 알았다. 적어도 게임항목의 경우에는 한 세트 돌려보고 가는 것을 추천. 그렇지만 어렵던 게임에 대해 딱히 공략까지는 생각하지 못하고, 감이 가는대로 진행했다. 도형 회전하기에서 3번 정도 멍때린것이 먼저 생각나고, 어렵게 느껴졌던 마법약 만들기, 고양이 술래잡기 약속 정하기(특히 버스..)가 기억난다. n번째 이전의 카드 뽑기는 꽤나 충격적이었다. 반대로 순간의 감각으로 풀수 있는 문항들도 있으니, 눈의 피로를 고려해서 게임 순서를 전략적으로 택하는것도 좋을 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;영상면접&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;경험 면접의 경우, 목표를 달성했던 경험과 실패했던 경험, 이를 통해 배웠던 점에 대해서 질문 받았다. 성공 경험은 자소서 작성할 때 준비했던 게 있었던 반면, 실패 경험에 대해서 키워드로 준비안한게 타격이 있었다. 머리로는 상황이 그려지는 데 짧은 시간 동안 애매한 부분에 대해 설명을 하려다보니 쩔쩔맸던 점이 있다.&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;상황면접에서는 프로젝트 리더에게 피드백을 적극적으로 요청할 것인지 vs 어느정도 해보고 요청을 할 것인지에 대한 질문이었는데, 장황하게 답변한 점이 아쉽다. 적극적인 피드백을 요청하되, 팀과 리더의 업무에 지장을 주지 않는지 확인할 것이라 대답했었는데, 그래도 어떤 시도를 했는지 정리하고 피드백을 요청했다고 했으면 더 좋지 않았을까 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>비정기적인 일기</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/349</guid>
      <comments>https://hei-jayden.tistory.com/349#entry349comment</comments>
      <pubDate>Sun, 23 Jul 2023 18:37:30 +0900</pubDate>
    </item>
    <item>
      <title>2023 정보처리기사 실기 2회차 후기</title>
      <link>https://hei-jayden.tistory.com/348</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;7.21일 정보처리기사 실기 시험을 보고 왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필기를 취득해두고 실기를 봐야지 하면서 못본게 어언 2년이 다되가는 터라..&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;amp;면접들이 있다보니..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 시험을 몇번 응시했던 경험이 있기 때문에, 실제 준비기간은 1달정도 된다고 생각하구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집중해서 빡세게 보기 시작한건 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;1달의 준비 기간에는 가지고 있던 문제집 살펴보기 + 문제 풀이를 진행했었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집중기간때는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;수제비에 올라온 문제&amp;amp;정답 족보 자료&lt;/b&gt;&lt;/span&gt;를 이용해서 정리했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;가채점 현황&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답 : 1 2 4 5 7 9 10 17 18 19 20 : 11개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부분 : 11 14 15&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오답 : 3 6 8 12 13 16&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;정답이 12~14개만 되도 참 마음이 편할 것 같은데, 턱걸이 합격을 예상중이라 뒤통수 맞는 일이 생기진 않을지 걱정되네요. 55점 + a해서 60을 간신히 넘길 수 있을 것으로 예상중입니다. 시험 결과 발표날이 9/1인지라 시험이 잊혀져 갈 때쯤 결과를 확인할 수 있겠네요. 잃어버릴(?) 복권이 부디 좋은 결과로 돌아와주길..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;시험 리뷰&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;수제비나 디씨 등 커뮤니티를 잠깐 돌아봤을 때 2회차 난이도는 1회차보다 어렵게 출제되었다고 하고, 실제로 손도 못대고 별표시하고 넘어간 문제들이 제 기준 3~4 문제 었습니다. 템퍼프루핑이나 hdlc, hamming은 공부를 하면서 주의깊게 본 기억자체가 없었던 것 같아요. 체감 난이도가 높게 설정된 이유도 아예 본 기억이 없는 지식에 대한 질문이 나오다보니 큰 영향이 있었지 않았을까 합니다. 그런데 사실 손 못댈 문제 3문제 정도는 예상했던지라 저는 난이도에 대해 큰 타격(?)은 조금 덜했던 듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cf. 야심차게 적었던 IDS가 아닌게 마음이 아프군요.&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;다음에 아리까리 했던 문제들이 4문항 정도 되었는데, 충분히 맞출 수 있었던 문항들이었다고 생각합니다.(지극히 얕게 공부한 내 잘못이 크지 않았을까) 대칭키/비대칭키 분류에서 AES, DES, SEED를 묶어 정리했던 적이 있었기에 ARIA를 비대칭키로 분류해버린 오류가 하나 있었고, 결정/조건 커버리지 둘 중에 정말 고민했었는데, 시험 끝나고 확인해보니 조건 커버리지였더라구요. 생구행 구분 기준을 조금만 더 세심히 읽었더라면.. visitor도 디자인 패턴 각 항목마다 정확하게 숙지할 수 있었다면 맞출 수 있었는데, 그렇지 못해서 아쉬웠습니다. 해시도 암호화 기법 분류 정리해둘걸&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;실기에서 40% 이상을 차지하는 알고리즘을 얘기해보자면, C언어 문제였던 '박영희'는 어떻게 작동하는 건지 아예 몰랐기에 틀릴 걸 예상했었는데 자바 문항 틀린건 반성하자.. String str1 = &quot;programming&quot;, String str2 = &quot;programming&quot;;으로 정의되어 있을 때 str1, str2 각 메모리마다 문자가 저장된다고 생각했어서 틀렸습니다. 수제비 문제 풀면서 파이썬 슬라이싱에서 마지막 인덱스를 포함하지 않도록 주의할 수 있었던 점이 좋았습니다.&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;정리하자면, 건들지 못할 문제 4문제 예상해두고, 순간의 기억력 부족 or 실수로 틀리는 문항이 없다면, 합격이 아예 불가능한 시험은 아니라는거.. 다만, 키워드만 암기하기보다는 각 항목이 무엇을 의미하는지 이해하는 파트가 있다는 점을 유의한다면 좋을 것 같습니다(특히 디자인패턴)&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;
&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>
      <category>정보처리기사</category>
      <category>후기</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/348</guid>
      <comments>https://hei-jayden.tistory.com/348#entry348comment</comments>
      <pubDate>Sun, 23 Jul 2023 13:58:59 +0900</pubDate>
    </item>
    <item>
      <title>프로세스와 쓰레드 (by 얄코)</title>
      <link>https://hei-jayden.tistory.com/347</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;링크 : &lt;a href=&quot;https://www.youtube.com/watch?v=iks_Xb9DtTM&quot;&gt;https://www.youtube.com/watch?v=iks_Xb9DtTM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;용어 설명&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로그램 :   식당 &amp;rarr; 배를 채우는 서비스 제공&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;윈도우에서 .exe라는 이름이 붙은 파일&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로세스 :  &amp;zwj;  요리사 &amp;rarr; 조리하는 기능&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램이 실행되서 돌아가고 있는 상태&lt;/li&gt;
&lt;li&gt;컴퓨터가 일을 하고 있는 상태&lt;/li&gt;
&lt;li&gt;운영체제가 여러개의 프로세스를 돌리기 때문에 컴퓨터로 멀티태스킹이 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동시적(Concurrentcy), 병렬적(Parallelism) 작업의 혼합으로 이루어짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;컴퓨터의 자원을 분할해서 사용 &amp;rarr; 하나의 프로세스는 다른 프로세스에 접근하지 못함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;쓰레드 :   조리 공간 &amp;rarr; 조리를 위한 작업&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 프로세스 내부에서 여러 갈래의 작업이 이루어짐&lt;/li&gt;
&lt;li&gt;프로세스에서 주어지는 자원을 모든 쓰레드가 공유&lt;/li&gt;
&lt;li&gt;cf. &lt;b&gt;속도와 효율&lt;/b&gt;면에서 장점, 프로세스 안에서 공유되는 변수에 &lt;b&gt;여러 쓰레드가 동시에 접근&lt;/b&gt; &amp;rarr; 원하는대로 작업되지 않을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드&lt;/h2&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package org.example;
import java.util.Scanner;

public class RamenProgram {

    public static void main(String[] args) {
        int num;
        Scanner input = new Scanner(System.in);
        System.out.println(&quot;라면 몇 개 끓일까요?&quot;);

        num = input.nextInt();
        System.out.println(num + &quot;개 주문 완료! 조리시작!&quot;);
        try {
            RamenCook ramenCook = new RamenCook(num);
            // 4개의 쓰레드를 만들어서 진행
            new Thread(ramenCook,&quot;A&quot;).start();
            new Thread(ramenCook,&quot;B&quot;).start();
            new Thread(ramenCook,&quot;C&quot;).start();
            new Thread(ramenCook,&quot;D&quot;).start();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

interface Runnable {
    public void run();
}

class currentThread extends Thread {
    public RamenCook ramenCook;
    static String name;

    currentThread() {
        this(new RamenCook(5) , &quot;&quot;);
    }

    currentThread(RamenCook ramenCook , String nam) {
        this.ramenCook = ramenCook;
        this.name = name;
    }
}

class RamenCook extends Thread implements Runnable {
    private int ramenCount;
    private String[] burners = {&quot;_&quot;,&quot;_&quot;,&quot;_&quot;,&quot;_&quot;};

    public RamenCook(int count) {
        ramenCount = count;
    }

    // 라면 끓이기 진행 
    @Override
    public void run() {
        while(ramenCount &amp;gt; 0) {
						
            // 하나의 라면 끓이기
            	synchronized(this) {  // 여러 쓰레드가 동시에 작동하지 않도록 방지
                ramenCount--;
                System.out.println(Thread.currentThread().getName() + &quot; : &quot; + ramenCount + &quot;개 남았습니다&quot;);
            }

            // 비어있는 버너를 찾아 사용
            for(int i = 0; i &amp;lt; burners.length; i++) {
                if(!burners[i].equals(&quot;_&quot;)) {
                    continue;
                }

                synchronized(this) {
                //if(burners[i].equals(&quot;_&quot;))
                //{
                burners[i] = Thread.currentThread().getName();
                System.out.println(&quot;     &quot; + Thread.currentThread().getName() + &quot; : [&quot; + (i + 1) + &quot;]번 버너 ON&quot;);
                showBurners();  // 버너의 상태 확인
                //}
                }

                try {
                    Thread.sleep(2000);
                } catch(Exception e) {
                    e.printStackTrace();
                }

                	synchronized(this) {
                    burners[i] = &quot;_&quot;;
                    System.out.println(&quot;     &quot; + Thread.currentThread().getName() + &quot; : [&quot; + (i + 1) + &quot;]번 버너 OFF&quot; );
                    showBurners();
                }

                break;
            }

            // 각 쓰레드가 랜덤 시간동안 정지 될 수 있도록 함 -&amp;gt; 쓰레드 실행의 순서가 않고 섞이도록 함
            try {
                Thread.sleep(Math.round(1000 * Math.random()));
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }

    // 버너의 상태 확인
    private void showBurners() {
        String stringToPrint = &quot;                                                             &quot;;
        for(int i = 0; i &amp;lt; burners.length; i++) {
            stringToPrint += (&quot; &quot; + burners[i]);
        }
        System.out.println(stringToPrint);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행 결과 창&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11.gif&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhdzFT/btsg0VWFZzD/1UfgQo2j5hc3yjB3E1uArk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhdzFT/btsg0VWFZzD/1UfgQo2j5hc3yjB3E1uArk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhdzFT/btsg0VWFZzD/1UfgQo2j5hc3yjB3E1uArk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bhdzFT/btsg0VWFZzD/1UfgQo2j5hc3yjB3E1uArk/img.gif&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;517&quot; height=&quot;565&quot; data-filename=&quot;11.gif&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Algorithm Study/Java</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/347</guid>
      <comments>https://hei-jayden.tistory.com/347#entry347comment</comments>
      <pubDate>Tue, 23 May 2023 13:18:14 +0900</pubDate>
    </item>
    <item>
      <title>[자바의 정석] 프로세스와 쓰레드</title>
      <link>https://hei-jayden.tistory.com/346</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&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;프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)를 할당 받아 프로세스가 된다&lt;/li&gt;
&lt;li&gt;프로그램 수행에 필요한 &lt;b&gt;데이터&lt;/b&gt; / 메모리 등의 &lt;b&gt;자원&lt;/b&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;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것&lt;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;싱글쓰레드로 서버 프로그램을 작성하면 사용자의 요청마다 새로운 프로세스를 생성해야 함&lt;/li&gt;
&lt;li&gt;프로세스를 생성하는 것은 쓰레드를 생성하는 것 보다 더 많은 시간과 메모리 공간이 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Thread 클래스를 상속받는 방법&lt;/li&gt;
&lt;li&gt;Runnable 인터페이스를 구현하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쓰레드의 구현&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업하고자 하는 내용을 run() 메서드 내부에 채워준다&lt;/li&gt;
&lt;li&gt;생성한 쓰레드를 start() 메서드를 호출해서 실행한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 주의사항&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;start()가 호출되었다고 바로 실행되는 것이 아니라, 실행 대기 상태에 있다가 자신의 차례가 되어야 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 실행이 종료된 쓰레드는 다시 실행할 수 없음 &amp;rarr; 하나의 쓰레드에 대해 start()가 한번만 호출 가능&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만 사용하는 작업의 경우 하나의 쓰레드로 작업하는 것과 두 개의 쓰레드로 작업하는 것의 속도는 거의 동일하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오히려 두 개의 쓰레드로 작업할 때 쓰레드 간 전환에 시간이 발생하기 때문에 멀티 쓰레드가 더 작업 속도가 느릴 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 쓰레드가 서로 다른 자원을 사용하는 작업의 경우 싱글 쓰레드보다 멀티 쓰레드가 더 효율적이다. 예를들어 데이터를 입력 받는 작업, 파일을 주고받는 작업, 파일을을 출력하는 작업과 같이 외부기기와의 입출력을 필요로 하는 경우가 이에 해당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/346</guid>
      <comments>https://hei-jayden.tistory.com/346#entry346comment</comments>
      <pubDate>Mon, 22 May 2023 17:57:49 +0900</pubDate>
    </item>
    <item>
      <title>자바에서 static 변수의 사용</title>
      <link>https://hei-jayden.tistory.com/345</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;static 변수를 사용할 때&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;myStaticVariable 변수는 클래스를 이용하는 전역에서 공유&lt;/li&gt;
&lt;li&gt;myStaticVariable을 obj1을 통해 정의했지만, obj2에서도 동일한 myStaticVairable 메모리를 가리키고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1684738104599&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class MyClass {
    static int myStaticVariable; // 정적 변수

    public static void main(String[] args) {
        MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass();

        obj1.myStaticVariable = 10; // obj1의 인스턴스에서 정적 변수에 값을 할당
        System.out.println(obj2.myStaticVariable); // 10 출력
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;static 변수를 사용하지 않을 때&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스가 생성될 때 각각의 인스턴스 변수로 myStaticVariable이 생성&lt;/li&gt;
&lt;li&gt;obj1에서 정의된 myStaticVariable은 obj2에서 정의된 myStaticVariable과 다른 메모리를 가리킴&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1684738124706&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class MyClass {
    int myStaticVariable; // 인스턴스 변수

    public static void main(String[] args) {
        MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass();

        obj1.myStaticVariable = 10; // obj1의 인스턴스 변수에 값을 할당
        obj2.myStaticVariable = 20; // obj2의 인스턴스 변수에 값을 할당

        System.out.println(obj1.myStaticVariable); // 10 출력
        System.out.println(obj2.myStaticVariable); // 20 출력
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm Study/Java</category>
      <category>java</category>
      <category>static</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/345</guid>
      <comments>https://hei-jayden.tistory.com/345#entry345comment</comments>
      <pubDate>Mon, 22 May 2023 15:54:32 +0900</pubDate>
    </item>
    <item>
      <title>Find My Tempo</title>
      <link>https://hei-jayden.tistory.com/344</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;싸피에서의 마지막 프로젝트가 끝났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뿌듯함보다도 아쉬움이 많이 남은 마지막 자율 프로젝트였지만, 그렇다고 노력을 하지 않았다고는 생각하지 않기에 그대로 결과를 받아들이려고 한다. 아직 부족함을 많이 느꼈던 프로젝트였으며, 문제를 해결해 가는 방식에 대해 수정사항이 많이 필요하다는 생각 해보았다. 프로젝트에 대한 후기는 차차 풀어가보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 오늘은 내 생일이다. 원칙적으로는 내 20대가 마무리되는 시점이다. 깊이 생각해보진 않았지만 지나온 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;개발이라는 영역에 새롭게 도전하고 SSAFY에서 정신없이 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;언제 또 비정기적 일기가 비공개가 되었다가 다시 또 공개가 될지도 모르겠지만, 하루를 살아낸 나를 위로하면서 꾸준하게 글을 써나가길 바랄 뿐이다.&lt;/p&gt;</description>
      <category>비정기적인 일기</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/344</guid>
      <comments>https://hei-jayden.tistory.com/344#entry344comment</comments>
      <pubDate>Sun, 21 May 2023 22:45:17 +0900</pubDate>
    </item>
    <item>
      <title>[체험단] 갤럭시 북 3, 1달 차 후기</title>
      <link>https://hei-jayden.tistory.com/343</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 본 컨텐츠는 SSAFY 갤럭시 북 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;안녕하세요 지난번 언박싱 글을 올리고 딱 한 달이 지난 시점에 글을 올려보려고 합니다.&lt;br /&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;&lt;a href=&quot;https://www.techm.kr/news/articleView.html?idxno=108281&quot;&gt;https://www.techm.kr/news/articleView.html?idxno=108281&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1682821292123&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;잘 나가는 삼성 '갤럭시 북3 울트라'&amp;hellip;'고성능-이동성' 두 마리 토끼 잡은 비결은 - 테크M&quot; data-og-description=&quot;노트북을 고를 때 가장 고민되는 점은 \'성능\'과 \'휴대성\'을 동시에 만족시키기 어렵다는 것이다. 평소에 가방에 넣고 다니려면 가벼울수록 좋지만, 영상 편집도 하고 게임도 돌릴 수 있는 제&quot; data-og-host=&quot;www.techm.kr&quot; data-og-source-url=&quot;https://www.techm.kr/news/articleView.html?idxno=108281&quot; data-og-url=&quot;https://www.techm.kr/news/articleView.html?idxno=108281&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfDk45/hySq25XrlD/bkZqALYS4bRaYctatVVtwk/img.jpg?width=600&amp;amp;height=391&amp;amp;face=408_98_432_124,https://scrap.kakaocdn.net/dn/cxxfR5/hySq3RmghV/kaGmSP8QnR0atoRFozIAJ0/img.jpg?width=600&amp;amp;height=391&amp;amp;face=408_98_432_124&quot;&gt;&lt;a href=&quot;https://www.techm.kr/news/articleView.html?idxno=108281&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.techm.kr/news/articleView.html?idxno=108281&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfDk45/hySq25XrlD/bkZqALYS4bRaYctatVVtwk/img.jpg?width=600&amp;amp;height=391&amp;amp;face=408_98_432_124,https://scrap.kakaocdn.net/dn/cxxfR5/hySq3RmghV/kaGmSP8QnR0atoRFozIAJ0/img.jpg?width=600&amp;amp;height=391&amp;amp;face=408_98_432_124');&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;잘 나가는 삼성 '갤럭시 북3 울트라'&amp;hellip;'고성능-이동성' 두 마리 토끼 잡은 비결은 - 테크M&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;노트북을 고를 때 가장 고민되는 점은 \'성능\'과 \'휴대성\'을 동시에 만족시키기 어렵다는 것이다. 평소에 가방에 넣고 다니려면 가벼울수록 좋지만, 영상 편집도 하고 게임도 돌릴 수 있는 제&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.techm.kr&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;갤럭시 북이 소개된 인터넷 기사인데요. 노트북 홍보를 위한 광고성 기사라는 점을 고려해도 갤럭시 북의 특징을 잘 드러내는 것 같아서 링크를 달아봅니다. 기사에서 언급되었다시피, 가장 큰 특징은 '&lt;b&gt;휴대성&lt;/b&gt;'과 '&lt;b&gt;성능&lt;/b&gt;'에서 만족할 수 있는 노트북이라는 점입니다. `&lt;i&gt;고성능, 고해상도 설정으로 게임을 무조건 즐겨야겠다!`가 아니면서, 노트북만의 이점을 원하는 소비자분들이 구매하시기에 알맞는 모델&lt;/i&gt;입니다.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 여전히 만족스러운 크기와 무게&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이전 글에서도 작성했었지만, 성인 남성인 제가 사용하기에 16인치 모델은 더 커지길 바라지도, 더 작아지길 바라지도 않는 정도의 사이즈였습니다. 오랜만에 기존에 사용하던 15인치 노트북을 사용하자니 역체감이 느껴질 정도로 16인치 사이즈에 익숙해졌고, 만족스럽게 사용하고 있습니다. 개인적으로 노트북을 가까이서 이용하기도 하고, 조금 떨어뜨려놓고 사용하기도 합니다. 알고리즘 문제를 풀거나 블로그 글을 쓰는 등 무언가 푹 빠져들어서 집중해야 할 때는 노트북 키보드를 이용해서 타이핑 하는 편인데, 이 때 시야각의 대부분이 화면으로 가득 차 있어서 몰입하기에 참 좋았습니다. 반대로 강의를 듣거나 장시간 컴퓨터를 사용해야 할 때는 거치대에 두고 블루투스 키보드를 연결해두고 사용합니다. 이 때에도 크기가 부족함 없다보니 글씨가 잘 보이지 않다거나, 확대하다보니 동시에 띄워놓은 작업 프로그램을 보기 어렵거나 등의 불편함을 피할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 디스플레이 스펙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2880&amp;times;1800의 WQXGA의 고해상도 디스플레이와 120Hz 주사율 덕분에 영상을 볼 맛이 납니다. 언박싱 했을 당시 화면에 제 모습이 다소 비치는 듯한 느낌이 들어서 별로라는 생각이 들었었는데요. 현재는 특유의 선명함이 눈을 더 편하게 하는 것 같다는 생각이 듭니다. 이전에 사용하더 노트북의 경우 눈을 아주 가까이 하면 픽셀 단위의 색상이 보이는 듯한 느낌이 들었다면, 갤럭시 북을 사용하면서 전혀 느낄 수 없었습니다. 굳이 따로 모니터를 연결해서 사용하지 않더라도 영상 시청에 잘 이용하고 있습니다. 그러고보니 갤럭시 북 3를 사용하면서 제 자취방에 32인치 모니터가 놀고 있네요 ㅎㅎ&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;고성능 노트북을 가지고 다니다보면 노트북 무게도 노트북 무게이지만, 충전기 무게 때문에 참 애를 많이 먹습니다. 이와 더불어 연결 선을 주섬주섬 가방에 넣어가지고 다니다보면, 가방인지 짐가방인지 구분이 잘 안가게 되는것 같아요. 갤럭시 북 3를 집에서 사용할 때는 구매할 때 들어있던 전용 충전기를 사용하고 있지만, 카페나 밖으로 이동할 때는 휴대폰 용 C타입 고속 충전기를 가지고 다니는 편입니다. 물론 전용 충전기만큼은 아니지만, 충분히 카페에서 노트북을 사용할 만큼을 커버할 수 있고, 불편함을 느낀적이 없었습니다. 2개의 썬터볼트 포트를 이용해서 아이패드와 연결해 듀얼모니터를 사용하거나, 휴대폰 충전도 하는 편입니다. 이전과 비교했을 때 제 방의 두께가 1/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;# 성능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;기회가 된다면 게임이나 머신러닝등을 돌려보고 싶었는데, 전문 블로거 분들 처럼 전문적인 부하 테스트를 해보진 못했습니다. 그래픽 카드 관련해서는 Iris Xe Graphics를 자세하게 리뷰하신 전문가분들의 글을 참고하면 좋을 것 같아요. 앞에서도 말씀드렸다시피, 게이밍 급의 성능을 요구하지 않는 선에서는 큰 불편함을 겪지 못했고, 게임을 즐기시더라도 중간 옵션에서 플레이가 가능하다고 하네요.&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;a href=&quot;https://blog.naver.com/ww31ni/222533782993&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/ww31ni/222533782993&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1682829827156&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;인텔 내장 그래픽, Iris Xe Graphics 성능 설명&quot; data-og-description=&quot;컴퓨터의 성능은 CPU와 GPU에 의해 결정된다. 다만 몇몇 제품은 CPU에 GPU를 포함한, 결합된 ...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/ww31ni/222533782993&quot; data-og-url=&quot;https://blog.naver.com/ww31ni/222533782993&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qmf4n/hySshAuLpr/4vtM7nDbi0LlIKKXKauhYK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://blog.naver.com/ww31ni/222533782993&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/ww31ni/222533782993&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qmf4n/hySshAuLpr/4vtM7nDbi0LlIKKXKauhYK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&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;인텔 내장 그래픽, Iris Xe Graphics 성능 설명&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;컴퓨터의 성능은 CPU와 GPU에 의해 결정된다. 다만 몇몇 제품은 CPU에 GPU를 포함한, 결합된 ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;장치관리자.png&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;1144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cESq0W/btsddG3n3ok/ohNQwb82xGTOlBkLS2oVlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cESq0W/btsddG3n3ok/ohNQwb82xGTOlBkLS2oVlk/img.png&quot; data-alt=&quot;그래픽 카드 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cESq0W/btsddG3n3ok/ohNQwb82xGTOlBkLS2oVlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcESq0W%2FbtsddG3n3ok%2FohNQwb82xGTOlBkLS2oVlk%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;646&quot; height=&quot;473&quot; data-filename=&quot;장치관리자.png&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;1144&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그래픽 카드 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_시스템정보.png&quot; data-origin-width=&quot;2044&quot; data-origin-height=&quot;1600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CrnwM/btsddHOMsqM/uZmTPZ8h75Zx4fGYabkjS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CrnwM/btsddHOMsqM/uZmTPZ8h75Zx4fGYabkjS1/img.png&quot; data-alt=&quot;시스템 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CrnwM/btsddHOMsqM/uZmTPZ8h75Zx4fGYabkjS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCrnwM%2FbtsddHOMsqM%2FuZmTPZ8h75Zx4fGYabkjS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;649&quot; height=&quot;508&quot; data-filename=&quot;edited_시스템정보.png&quot; data-origin-width=&quot;2044&quot; data-origin-height=&quot;1600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시스템 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-30 104034.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW9CvV/btsdeYCe2NR/QlggwXxbdzmiDE55jFxTm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW9CvV/btsdeYCe2NR/QlggwXxbdzmiDE55jFxTm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW9CvV/btsdeYCe2NR/QlggwXxbdzmiDE55jFxTm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW9CvV%2FbtsdeYCe2NR%2FQlggwXxbdzmiDE55jFxTm1%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;418&quot; height=&quot;495&quot; data-filename=&quot;스크린샷 2023-04-30 104034.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1704&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;체험단 리뷰를 처음 작성하다보니 어색하고 부족한 점이 많네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이동이 잦은 분들, 추가적인 CPU 구입을 필요로 하지 않는 분들, 노트북 가방을 휴대하시는 분들이 이용하시기에&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;추가적으로 궁금한 점이 있다면 댓글 남겨주세요&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>SSAFY</category>
      <category>SSAFY갤럭시북체험단</category>
      <category>SSAFY체험단</category>
      <category>갤럭시북</category>
      <category>갤럭시북3</category>
      <category>갤북3</category>
      <category>노트북추천</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/343</guid>
      <comments>https://hei-jayden.tistory.com/343#entry343comment</comments>
      <pubDate>Sun, 30 Apr 2023 13:57:12 +0900</pubDate>
    </item>
    <item>
      <title>[체험단] 갤럭시 북 3, 언박싱 후기</title>
      <link>https://hei-jayden.tistory.com/342</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;※ 본 컨텐츠는 SSAFY 갤럭시 북3 체험단 활동의 일환으로 제작되었습니다&lt;/h4&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;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;간단히 근황부터 설명드리자면, 2학기 특화 프로젝트를 하면서 지내고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일같이 기능 구현과 디버깅, 추가적인 기술 학습까지..! 교육과정이 얼마 남지 않다보니, 프로젝트 외에도 취업준비로 모두들 바쁜 나날보내고 있습니다 (8기 교육생 여러분 파이팅입니다)&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;SSAFY 2학기 과정에서 특별한 점이 있다면, 프로젝트를 위한 고성능 노트북이 대여된다는 점인데요. 노트북 무게가 있는 탓에 매번 들고다닐 수 없다보니, 일과시간에는 싸피에서 제공해주는 싸트북을, 집에 와서는 예전부터 사용하던 노트북을 사용해서 작업하고 있습니다.&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;문제는 집에서 사용하는 노트북이 오래되었다는 점입니다. 15년도에 첫 아르바이트 하면서 모은 돈으로 샀던 노트북. 대학생활을 같이한 정이 든 녀석이지만, 개발을 위해 사용하기에는 부족한 감이 있어요. 아무래도 문서작업과 영상시청을 기준으로 구매한 탓에 개발 프로젝트를 실행하면 빌드시간이 오래걸리고 발열이 심하게 발생하는 문제가 있었습니다. SSAFY가 종료되면 프로젝트에 사용중인 노트북을 반납해야하기 때문에 다음 노트북은 어떤 노트북을 구매해야할지 고민이 많아지던 차에 갤럭시 북 3체험단 공고를 보게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D1Nte/btr6x9xSWBi/8G5BIIP3M0y6kyVbeKkcy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D1Nte/btr6x9xSWBi/8G5BIIP3M0y6kyVbeKkcy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D1Nte/btr6x9xSWBi/8G5BIIP3M0y6kyVbeKkcy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD1Nte%2Fbtr6x9xSWBi%2F8G5BIIP3M0y6kyVbeKkcy1%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;554&quot; height=&quot;367&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 노트북에 대한 관심을 담아서 체험단 지원서를 보냈고, 운이 좋게도 갤럭시 북3를 체험할 수 있게 되었습니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델명 : 갤럭시북3 PRO / NT960XFG-KP71E&lt;/li&gt;
&lt;li&gt;출시 : 2023년 2월&lt;/li&gt;
&lt;li&gt;화면 : 16인치, WQXGA+AMOLED 디스플레이, 120z 주사율&lt;/li&gt;
&lt;li&gt;램 : 16G&lt;/li&gt;
&lt;li&gt;그래픽 : 내장그래픽, Iris Xe&lt;/li&gt;
&lt;li&gt;저장장치 : 512G&lt;/li&gt;
&lt;li&gt;충전: C타입&lt;/li&gt;
&lt;li&gt;두께 : 12.5mm&lt;/li&gt;
&lt;li&gt;무게 : 1.56kg&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;갤럭시북3 개봉기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20230329_012823035_16.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1689&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWD78E/btr6K24oCcF/YOnk1Ik8M0kiyab2Tgkgik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWD78E/btr6K24oCcF/YOnk1Ik8M0kiyab2Tgkgik/img.png&quot; data-alt=&quot;2023년 2월 출시한 갤럭시 북3 PRO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWD78E/btr6K24oCcF/YOnk1Ik8M0kiyab2Tgkgik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWD78E%2Fbtr6K24oCcF%2FYOnk1Ik8M0kiyab2Tgkgik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;1689&quot; data-filename=&quot;edited_KakaoTalk_20230329_012823035_16.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1689&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2023년 2월 출시한 갤럭시 북3 PRO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20230329_012823035_15.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AVagA/btr60fK8Zzt/hVldy9P0Hst5hY2fLdOXW0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AVagA/btr60fK8Zzt/hVldy9P0Hst5hY2fLdOXW0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AVagA/btr60fK8Zzt/hVldy9P0Hst5hY2fLdOXW0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAVagA%2Fbtr60fK8Zzt%2FhVldy9P0Hst5hY2fLdOXW0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;2252&quot; data-filename=&quot;KakaoTalk_20230329_012823035_15.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;첫인상&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;사실 다음 노트북으로 맥북을 가장 먼저 고려하고 있었기 때문에, 갤럭시 북에 대한 조사나 큰 기대는 하지 않았습니다. 하지만 갤럭시 북을 받아보고 많이 놀랬습니다. 은은한 베이지 색과 16인치 크기, 휴대하기에 적합한 가벼운 본체와 충전기의 무게가 마음에 들었고, 15인치 노트북 가방에 충분히 휴대할 수 있다는 점으로부터 꽤나 사용할만한데? 라는 생각을 하게 되었습니다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;제목 없음.png&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tfGtT/btr671qV9Bh/WFKyMUeI1nygf6oPhQUvY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tfGtT/btr671qV9Bh/WFKyMUeI1nygf6oPhQUvY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tfGtT/btr671qV9Bh/WFKyMUeI1nygf6oPhQUvY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtfGtT%2Fbtr671qV9Bh%2FWFKyMUeI1nygf6oPhQUvY1%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;2880&quot; height=&quot;1702&quot; data-filename=&quot;제목 없음.png&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;16인치 크기가 주는 개방감&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;갤럭시 북을 이용해보면서 가장 먼저 든 생각은 '시원하다'였습니다. 기존에 15인치 노트북을 사용해왔었고, 17인치 노트북은 너무 크다는 인식을 가지고 있었는데, 16인치 화면이 주는 개방감은 꽤나 만족스러웠습니다. 15인치 노트북이 전체화면으로 유튜브 영상이나 영화를 보는데 적합했다면, 16인치는 개발자들에게 좀더 적합한 크기인것 같습니다. IDE와 브라우저를 동시에 띄워두고 사용해야 할 때 특히 만족스러웠었고, 세로화면이 길다보니 수직 방향으로 읽어가야 하는 코드를 볼 때 만족감이 무척 컸습니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20230329_012823035_07.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SqQPW/btr6EVdJCJT/HxeF2nhHDZQ4R4afB3k5hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SqQPW/btr6EVdJCJT/HxeF2nhHDZQ4R4afB3k5hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SqQPW/btr6EVdJCJT/HxeF2nhHDZQ4R4afB3k5hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSqQPW%2Fbtr6EVdJCJT%2FHxeF2nhHDZQ4R4afB3k5hK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;2250&quot; data-filename=&quot;edited_KakaoTalk_20230329_012823035_07.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&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;기존에 사용하던 15인치 노트북과 기계식 키보드를 사용하면서 우측 숫자 배열을 잘 이용하지 않고 있습니다. 알고리즘 문제풀이나, 코딩을 할 때는 크게 문제없이 사용하고 있지만, 엑셀 작업이 필요한 경우에는 아쉬운 게 우측 숫자 배열입니다. 16인치라는 크기 덕분에 갤럭시 북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;추가적으로 타건음에 만족하고 있습니다. 슬림한 노트북이라 타건 깊이가 깊지는 않지만, 특유의 뽁뽁거리는 타건음이 은은하게 들려서 자판치는 맛이 느껴지네요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;크기 비교&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 크기 비교를 해보았습니다. 알고리즘 학습을 위해 요즘 가방에 항상 챙겨다니는 물품들을 꺼내보았습니다. 15인치 노트북 용 가방이지만 잘 담기는 덕분에 노트북을 들고 원할 때마다 카공하러 다니는 재미가 있는 것 같습니다. 뚱뚱한 가방을 가지고 다니는 것이 싫어서 마우스도 일부러 페블 마우스를 구매했었는데, 덕분에 여유롭게 수납공간을 활용할 수 있었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20230329_012823035_04.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CsPXo/btr6EV5S6Tz/9x2out6UjcFrgEsKKHckz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CsPXo/btr6EV5S6Tz/9x2out6UjcFrgEsKKHckz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CsPXo/btr6EV5S6Tz/9x2out6UjcFrgEsKKHckz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCsPXo%2Fbtr6EV5S6Tz%2F9x2out6UjcFrgEsKKHckz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;2250&quot; data-filename=&quot;edited_KakaoTalk_20230329_012823035_04.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20230329_012823035_01.jpg&quot; data-origin-width=&quot;2331&quot; data-origin-height=&quot;1748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGKXxf/btr60fLkSs4/nEyyRtTZQAdYz5Lpomeqx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGKXxf/btr60fLkSs4/nEyyRtTZQAdYz5Lpomeqx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGKXxf/btr60fLkSs4/nEyyRtTZQAdYz5Lpomeqx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGKXxf%2Fbtr60fLkSs4%2FnEyyRtTZQAdYz5Lpomeqx0%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;2331&quot; height=&quot;1748&quot; data-filename=&quot;edited_KakaoTalk_20230329_012823035_01.jpg&quot; data-origin-width=&quot;2331&quot; data-origin-height=&quot;1748&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20230329_012823035_02.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIWP00/btr6ANH22CT/OckQTBPJ1bqwa8Axz0kjWK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIWP00/btr6ANH22CT/OckQTBPJ1bqwa8Axz0kjWK/img.jpg&quot; data-alt=&quot;페블 마우스보다 얇은 갤럭시 북3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIWP00/btr6ANH22CT/OckQTBPJ1bqwa8Axz0kjWK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIWP00%2Fbtr6ANH22CT%2FOckQTBPJ1bqwa8Axz0kjWK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_20230329_012823035_02.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;페블 마우스보다 얇은 갤럭시 북3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상으로 갤럭시북3 노트북에 대한 첫인상에 대해 정리해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;남은 체험단 기간 동안에는 개발한 프로그램도 돌려보고, 성능적으로 테스트할 수 있는 부분을 찾아 후기 남겨보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>SSAFY</category>
      <category>SSAFY갤럭시북체험단</category>
      <category>SSAFY체험단</category>
      <category>갤럭시북</category>
      <category>갤럭시북3</category>
      <category>갤북3</category>
      <category>노트북추천</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/342</guid>
      <comments>https://hei-jayden.tistory.com/342#entry342comment</comments>
      <pubDate>Fri, 31 Mar 2023 13:19:49 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬]  #11003. 최솟값 찾기</title>
      <link>https://hei-jayden.tistory.com/341</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

N, L = map(int, input().split())
arr = list(map(int, input().split()))
myDeque = deque()

# ([인덱스][값]) 형태로 myDeque에 데이터 관리
for i in range(N):

    # 새로운 값이 기존의 값보다 클 때까지 기존의 값 (끝에서부터) 제거
    while myDeque and myDeque[-1][0] &amp;gt; arr[i]:
        myDeque.pop()
    myDeque.append((arr[i], i))     # 새로운 값 입력

    # 슬라이딩 윈도우가 인덱스 범위에서 벗어난 경우 제거
    if myDeque[0][1] &amp;lt;= i-L:
        myDeque.popleft()

    print(myDeque[0][0], end=' ')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;✅ 문제 분석&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;윈도우의 크기는 최솟값을 구하는 범위가 i-L+1 ~ i까지이므로 L로 생각&lt;/li&gt;
&lt;li&gt;N, L의 최대범위가 5,000,000이므로 정렬을 사용할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; O(N) 시간복잡도로 해결 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;슬라이딩 윈도우&lt;/b&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;덱 구조&lt;/b&gt;를 사용해서 사용&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;※ 덱을 사용해서 정렬 효과를 보는 방법 풀이   (p.73 참고)&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;새로운 값이 들어올 때, 뒤에서부터 값을 비교
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;값이 기존에 있던 값보다 클 경우, 그대로 추가&lt;/li&gt;
&lt;li&gt;값이 기존에 있던 값보다 작을 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 값이 기존의 값보다 클 때까지 기존의 값 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&amp;rArr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;오름차순으로 정렬되는 효과&lt;/b&gt;를 볼 수 있다&lt;/li&gt;
&lt;li&gt;최소값은 윈도우 범위 내에서 찾아야 하는 조건을 적용했을 때, 덱 구조에서 가장 앞에 있는 값이 최소 값이 된다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11003&quot;&gt;https://www.acmicpc.net/problem/11003&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679494290518&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;11003번: 최솟값 찾기&quot; data-og-description=&quot;N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i &amp;le;&amp;nbsp;0 인 Ai는 무시하고 D를 구해야 한다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11003&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11003&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cjW32h/hyR0ohbuHB/UYU1YtkhNFiMtlqZbgTY11/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11003&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11003&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cjW32h/hyR0ohbuHB/UYU1YtkhNFiMtlqZbgTY11/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;11003번: 최솟값 찾기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i &amp;le;&amp;nbsp;0 인 Ai는 무시하고 D를 구해야 한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&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>Algorithm Study/Python</category>
      <category>덱</category>
      <category>백준</category>
      <category>슬라이딩 윈도우</category>
      <category>최솟값 찾기1</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/341</guid>
      <comments>https://hei-jayden.tistory.com/341#entry341comment</comments>
      <pubDate>Wed, 22 Mar 2023 23:14:40 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ JAVA] #2750 수 정렬하기</title>
      <link>https://hei-jayden.tistory.com/340</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 첫번째 입력값 : 입력될 수의 갯수 
        int n = Integer.parseInt(br.readLine());

        // 입력되는 수를 arr에 기록
        int[] arr = new int[n];
        for (int i = 0; i &amp;lt; n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        // 리스트 정렬
        Arrays.sort(arr);

        // 리스트 값 출력
        StringBuilder sb = new StringBuilder();     // StringBuilder : 문자열 동적으로 생성, 수정 기능
        for (int i = 0; i &amp;lt; arr.length; i++) {
            sb.append(arr[i]);      // sb에 리스트 값을 append
            if(i != arr.length-1) sb.append(&quot;\n&quot;);      // 모든 리스트 요소가 담기지 않았을 경우 \n을 입력해서 줄 바꿈
        }
        System.out.println(sb.toString());
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm Study/Java</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/340</guid>
      <comments>https://hei-jayden.tistory.com/340#entry340comment</comments>
      <pubDate>Sun, 19 Feb 2023 12:29:48 +0900</pubDate>
    </item>
    <item>
      <title>[Error] Method springSecurityFilterChain in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration required a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' that cou..</title>
      <link>https://hei-jayden.tistory.com/339</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZvwi2/btrWp0qeyyL/lMy2DScvrBT3rIKDan8UGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZvwi2/btrWp0qeyyL/lMy2DScvrBT3rIKDan8UGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZvwi2/btrWp0qeyyL/lMy2DScvrBT3rIKDan8UGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZvwi2%2FbtrWp0qeyyL%2FlMy2DScvrBT3rIKDan8UGk%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;1415&quot; height=&quot;243&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;243&quot;/&gt;&lt;/span&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;소셜 로그인 기능 구현하고 집에와서 pull 받아 실행하려니 위와같은 에러가 발생했다&lt;/li&gt;
&lt;/ul&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;813&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ELcsp/btrWku6B7wH/kvbMnsnidTCfltgGbMXTok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ELcsp/btrWku6B7wH/kvbMnsnidTCfltgGbMXTok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ELcsp/btrWku6B7wH/kvbMnsnidTCfltgGbMXTok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FELcsp%2FbtrWku6B7wH%2FkvbMnsnidTCfltgGbMXTok%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;813&quot; height=&quot;219&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&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;OAuth에 사용된 아이디와 비밀 코드를 gitignore로 등록해두었기 때문에 발생&lt;/li&gt;
&lt;li&gt;application-oauth.properties를 생성해주면 해결 가능하다&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Error</category>
      <category>error</category>
      <category>gitignore</category>
      <category>소셜로그인</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/339</guid>
      <comments>https://hei-jayden.tistory.com/339#entry339comment</comments>
      <pubDate>Mon, 16 Jan 2023 21:18:48 +0900</pubDate>
    </item>
    <item>
      <title>[SSAFYcial] SSAFY 트랙 이동이 궁금하다면?</title>
      <link>https://hei-jayden.tistory.com/338</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요 알음알음 성장로그를 작성하고 있는 싸피셜 기자 김경민입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1/4일인 오늘, 저희 교육장에는 큰 변화가 하나 일어났는데요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 9기 교육생분이 오프라인 출석을 시작하셨다는 점입니다..!!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(코딩의 세계에 오신걸.. 환영합니다..)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;합격 문자를 확인하고 부푼 마음과 함께 첫 등원을 하던 순간을 저도 잊지 못하고 있는데요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그때의 기대와 긴장감을 가지고 싸피 기간을 풍족하게 누리셨으면 합니다 :)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;새로 입과하신 9기 교육생분들을 대상으로 무슨 정보를 전달하면 좋을까 고민하던 차에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;6개월 전 '트랙 이동'에 관심이 많았던 제 모습이 떠올랐습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이번 자율 기사는 '&lt;b&gt;트랙이동&lt;/b&gt;'을 주제로 경험과 정보를 전달해보려고 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;싸피의 교육과정&lt;/h4&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개의 트랙 [웹, 임베디드, 모바일]으로 운영됩니다. 지역별 캠퍼스에 따라 운영되는 트랙은 조금씩 차이가 있습니다. 제가 교육받고 있는 대전 캠퍼스의 경우 임베디드와 모바일 트랙없이 웹 트랙 교육만 이뤄지고 있습니다.&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;h4 data-ke-size=&quot;size20&quot;&gt;왜 자바반으로 이동하고 싶었나요?&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;트랙이동, 기회의 시기는?&lt;/h4&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;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;&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;그 이후 약 일주일이 지나서 결과를 전달받을 수 있었습니다. 안타깝게도 저는 트랙 이동 대상자로 선정되지 못했습니다. 제 경험에 의하자면, 6명의 인원 중 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;크게 실망했었지만, 돌이켜보면 1명 밖에 안되는 트랙이동의 TO가 이해는 됩니다. 사무국 입장에서 싸피 합격 후 취업으로 인해 퇴소한 결원을 보충하기 위해 트랙이동 제도를 만들었다고 생각합니다. 만약 결원이 많이 발생했다면 트랙이동의 기회가 더 커지는 것이고, 결원이 아무도 발생하지 않았다면 트랙 이동이 불가능했겠지요. 제가 원했던 비전공 자바반의 경우에도 트랙 이동 및 결원이 발생하지 않아 추가로 들어갈 수 없었던 상황이었다고 추측해볼 수 있었습니다.&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;h4 data-ke-size=&quot;size20&quot;&gt;자바반 트랙이동 실패, 후회하지는 않나?&lt;/h4&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;첫번째로 세웠던 목표를 달성하지 못했기 때문에 마음 한켠이 불편했던 것은 사실입니다. 그렇지만 시간이 지나고 생각해 보았을 때 비전공 자바반이 아닌 전공 자바반으로 제가 배정되었다면 꽤나 벅차했을 것이라고 생각합니다. 배경지식이나 경험이 부족했기 때문에 학습을 따라가기 어려웠을 뿐더러, 전공 교육생들 사이에서 기죽지 않고 살아남기 쉽지 않았을 것 같다고 판단을 마무리 지었습니다. (물론 타 기수, 타 지역 싸피 분들의 블로그를 보면 비전공자임에도 불구하고 전공 자바반에서 성과를 보이시는 이야기도 어렵지 않게 볼수 있습니다)&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;2학기가 시작되는 시점에서 다시 생각해보았을 때 &lt;b&gt;지금은 대수롭지 않게, 웃으며 넘어갈 수 있습니다&lt;/b&gt;. 2학기가 되서 전공자, 비전공자 가리지 않고 함께 프로젝트를 진행하게 되고, 새로운 기술을 함께 배워나가야 한다는 점은 반배정 여부와 관계가 없는 것 같습니다. 그저 주어지는 기회를 도전해보고, 주어지는 환경에서 최선을 다하신다면 파이썬 반이든, 자바 반이든 큰 차이는 없는 것 같다는 의견을 남겨봅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ps.&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q. 자바반에서 파이썬 반으로 이동할 수 있을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A. 실제로 이동하신 분들이 계신지는 잘 모르겠습니다. 특별히 예시를 들어보진 못했기 때문에 담당 프로이나 사무국에 직접 문의해보시는 것을 추천드립니다.&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;Q. 임베디드, 모바일에서 자바반으로 이동?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A. 위 경우의 트랙이동은 7기 선배 기수를 통해서 사례를 들어본 적이 있습니다. 임베디드, 모바일 트랙에서의 교육 이수가 어렵게 느껴지는 분들은 마찬가지로 프로님과 잘 상담하셔서 더 좋은 방향으로&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;지나고 나서보니 해프닝으로 끝난 일이지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 순간의 제게는 큰 고민과 갈등이 되었던 순간이었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;트랙 이동을 희망하시는 분에게 작지만 도움이 되는 정보가 되었으면 하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;혹시 원하는 결과를 받지 않았더라도 크게 낙담하지 않으셨으면 좋겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;추가적인 질문 사항이 있다면 문제되지 않을 범위 안에서 도움 드리겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;김경민 기자단 명함.png&quot; data-origin-width=&quot;3600&quot; data-origin-height=&quot;1960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE5B9k/btrVpvRmmXG/v6bmKHUq9HBtoQcLGmYULk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE5B9k/btrVpvRmmXG/v6bmKHUq9HBtoQcLGmYULk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE5B9k/btrVpvRmmXG/v6bmKHUq9HBtoQcLGmYULk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE5B9k%2FbtrVpvRmmXG%2Fv6bmKHUq9HBtoQcLGmYULk%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;600&quot; height=&quot;327&quot; data-filename=&quot;김경민 기자단 명함.png&quot; data-origin-width=&quot;3600&quot; data-origin-height=&quot;1960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;</description>
      <category>SSAFY/SSAFYcial</category>
      <category>SSAFY</category>
      <category>비전공</category>
      <category>싸피</category>
      <category>자바</category>
      <category>전공</category>
      <category>트랙이동</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/338</guid>
      <comments>https://hei-jayden.tistory.com/338#entry338comment</comments>
      <pubDate>Wed, 4 Jan 2023 21:19:07 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #11725. 트리의 부모 찾기</title>
      <link>https://hei-jayden.tistory.com/337</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가급적 pypy3로 채점할 것을 추천한다 - python3로 채점이 정말 오래 걸렸다&lt;/li&gt;
&lt;li&gt;트리 구조를 그리고, 각 노드의 부모를 찾는 문제&lt;/li&gt;
&lt;li&gt;DFS로 풀 경우 recursionlimit을 10**6까지는 열어둬야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BFS 풀이&lt;/p&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

def bfs(node):
    queue = deque()
    queue.append(node)
    while queue:
        n = queue.popleft()
        for i in graph[n]:
            if parent[i] == -1:
                parent[i] = n
                queue.append(i)


N = int(input())
graph = [[] for _ in range(N+1)]
parent = [-1 for _ in range(N+1)]
for _ in range(N-1):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

bfs(1)

for i in range(2, N+1):
    print(parent[i])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS 풀이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672193789904&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(10**6)

def find(node):
    for n in graph[node]:
        if parent[n] == -1:
            parent[n] = node
            find(n)

N = int(input())
graph = [[] for _ in range(N+1)]
parent = [-1 for _ in range(N+1)]
for _ in range(N-1):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

find(1)

for i in range(2, N+1):
    print(parent[i])&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;for문으로 각 노드를 탐색을 시도한다&lt;/li&gt;
&lt;li&gt;노드에 방문정보가 없을 때(parent == -1), 부모 노드 값을 입력한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11725&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/11725&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672193924415&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;11725번: 트리의 부모 찾기&quot; data-og-description=&quot;루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11725&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11725&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11725&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11725&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;11725번: 트리의 부모 찾기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&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;/ul&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;</description>
      <category>Algorithm Study/Python</category>
      <category>11725</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>트리</category>
      <category>트리의부모찾기</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/337</guid>
      <comments>https://hei-jayden.tistory.com/337#entry337comment</comments>
      <pubDate>Wed, 28 Dec 2022 11:19:17 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #1967. 트리의 지름</title>
      <link>https://hei-jayden.tistory.com/336</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;루트노드로부터 가장 먼 지점을 찾고, 해당 지점을 다시 루트 노드로하는 가장 먼 지점을 찾으면 트리의 지름을 구할 수 있다&amp;nbsp;&lt;/li&gt;
&lt;li&gt;recursionError가&amp;nbsp;발생하면&amp;nbsp;setrecursionlimit을&amp;nbsp;먼저&amp;nbsp;적용해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글링 참고&lt;/p&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 루트노드로부터 가장 먼 지점(가중치의 합)이 가장 큰 지점을 찾는 과정을 두번 반복
# visited를 음수값으로 설정하고 확인할 때마다 값을 바꿔준다면 방문 여부의 확인과 함께 거리를 나타낼 수 있다

import sys
sys.setrecursionlimit(10**6)    # 최대 재귀 깊이를 늘려주는 코드

def dfs(node, weight):
    for n, w in graph[node]:
        if visited[n] == -1:        # 확인한 적이 없는 노드에 대해
            visited[n] = weight + w     # 이전까지의 가중치 + 현재의 가중치
            dfs(n, weight + w)


N = int(input())
graph = [[] for _ in range(N+1)]
visited = [-1] * (N+1)
for _ in range(N-1):
    x, y, w = map(int, input().split())
    graph[x].append([y, w])
    graph[y].append([x, w])

# 첫번째 탐색
dfs(1, 0)   # 루트 노드에서 가장 먼 노트(far_node)를 찾음

# 두번째 탐색을 위한 준비
far_node = visited.index(max(visited))
visited = [-1] * (N+1)      # visited 초기화
visited[far_node] = 0

# 두번째 탐색
dfs(far_node, 0)    # far_node로부터 가장 먼 노드를 찾음

# 계산과정 줄이기
# far_node = visited.index(max(visited))
# print(visited[far_node])

print(max(visited))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;visited를 0으로 초기화하지 않도록 하자. -1로 두면 방문여부와 함께 가중치의 합을 표시할 수 있어서 효율이 높다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1967&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1967&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672147967102&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1967번: 트리의 지름&quot; data-og-description=&quot;파일의 첫 번째 줄은 노드의 개수 n(1 &amp;le; n &amp;le; 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1967&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1967&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bE1R5t/hyQ3TOZXVS/rrbyORdTeQe5ETV7KITNlk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1967&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1967&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bE1R5t/hyQ3TOZXVS/rrbyORdTeQe5ETV7KITNlk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;1967번: 트리의 지름&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파일의 첫 번째 줄은 노드의 개수 n(1 &amp;le; n &amp;le; 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&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;</description>
      <category>Algorithm Study/Python</category>
      <category>1967</category>
      <category>DFS</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>트리의지름</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/336</guid>
      <comments>https://hei-jayden.tistory.com/336#entry336comment</comments>
      <pubDate>Tue, 27 Dec 2022 22:38:17 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #2644. 촌수계산</title>
      <link>https://hei-jayden.tistory.com/335</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&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;양방향 간선 vs 단방향 간선 연결관계 중 어떤 것을 선택해야 할까&lt;/li&gt;
&lt;li&gt;BFS 풀이로 접근해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글링 참고&lt;/p&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 트리 구조를 그리고 visited 여부 체크
# 시작하는 노드로부터 부모, 자식에 관계없이 촌수를 체크할 수 있다 -&amp;gt; visited는 비교 노드간 거리가 됨

from collections import deque

def bfs(node):
    queue = deque()     # 덱 생성
    queue.append(node)  # 덱에 노드 정보 입력
    while queue:        # 큐가 살아있는 동안
        node = queue.popleft()      # 노트에서 하나의 요소를 빼서
        for i in graph[node]:       # 연결된 노드들에 대해 검사 진행
            if visited[i] == 0:         # 아직 검사되지 않은 노드일 때
                visited[i] = visited[node] + 1      # 기준이 되는 노드의 방문 기록 + 1
                queue.append(i)     # 방문 중인 노드를 큐에 삽입 -&amp;gt; bfs 진행


N = int(input())
a, b = map(int, input().split())
M = int(input())
graph = [[] for _ in range(N+1)]
visited = [0 for _ in range(N+1)]

for _ in range(M):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

bfs(a)

if visited[b] &amp;gt; 0:      # x에서 시작한 bfs를 통해 y를 방문할 수 있다면
    print(visited[b])       # y까지의 촌수를 출력
else:                   # 그렇지 못할 경우
    print(-1)               # -1을 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;pre id=&quot;code_1657846453577&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;graph[x].append(y)
graph[y].append(x)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왜 양방향으로 진행되어야 하는 지 잘 이해하지 못했었다. 양방향으로 연결정보를 모두 담았을 때, 부모자식에 관계없이 노드로부터 거리를 표시할 수 있다.&lt;/li&gt;
&lt;li&gt;bfs(node)에서 node값이 어떤 트리 구조의 중간 노드라고 하더라도, node를 중심으로 부모, 자식에 관계 없이 뻗어나가기 때문에, node가 루트 노드인 그래프를 두고 탐색할 때와 동일한 기능이 이뤄진다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2644&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2644&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672061410781&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2644번: 촌수계산&quot; data-og-description=&quot;사람들은 1, 2, 3, &amp;hellip;, n (1 &amp;le; n &amp;le; 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2644&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2644&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2644&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2644&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;2644번: 촌수계산&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;사람들은 1, 2, 3, &amp;hellip;, n (1 &amp;le; n &amp;le; 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트리구조를 중점적으로 공부해보자&lt;/li&gt;
&lt;li&gt;양방향 관계, 단방향 관계를 파악할 수 있어야 한다&lt;/li&gt;
&lt;/ul&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;</description>
      <category>Algorithm Study/Python</category>
      <category>BFS</category>
      <category>촌수계산</category>
      <category>트리구조</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/335</guid>
      <comments>https://hei-jayden.tistory.com/335#entry335comment</comments>
      <pubDate>Mon, 26 Dec 2022 22:36:27 +0900</pubDate>
    </item>
    <item>
      <title>[SSAFYcial] SSAFY 기업 탐방: 모빌리티 플랫폼 쏘카에 다녀오다!</title>
      <link>https://hei-jayden.tistory.com/334</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;SSAFY에서는 SW 역량 강화를 위한 교육 프로그램도 있지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;취업지원과에서 실시하는 &lt;b&gt;기업탐방 프로그램&lt;/b&gt;도 있습니다!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;운이 좋게도 기업탐방 참여자로 선정되서 쏘카를 다녀왔는데요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;모빌리티 플랫폼을 대표하는 쏘카!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 SSAFY에서 진행된 쏘카 기업탐방은 신청자들 중 &lt;b&gt;20명&lt;/b&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;저는 도로교통공단에서 진행했던 프로젝트 경험을 살려서, 실제로 사람들이 많이 이용하는 기업의 업무환경을 보고 싶었다는 것을 적었던 것 같습니다.&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;기업탐방 전날 사전 OT를 진행했고, 다음날 약속장소인 서울숲역 디타워에서 집결했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20221217_152802928_13.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRMEhU/btrUuYVOvgK/UsqyxuwVHPFjiQQ0ohDtm1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRMEhU/btrUuYVOvgK/UsqyxuwVHPFjiQQ0ohDtm1/img.jpg&quot; data-alt=&quot;멀리서 보이기 시작하는 SOCAR!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRMEhU/btrUuYVOvgK/UsqyxuwVHPFjiQQ0ohDtm1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRMEhU%2FbtrUuYVOvgK%2FUsqyxuwVHPFjiQQ0ohDtm1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; data-filename=&quot;KakaoTalk_20221217_152802928_13.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;멀리서 보이기 시작하는 SOCAR!&lt;/figcaption&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;골목골목을 거쳐서 현대오토에버, SM이 위치한 건물에 쏘카가 보이기 시작했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20221226_005833455_01.jpg&quot; data-origin-width=&quot;4608&quot; data-origin-height=&quot;2592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtf5Yy/btrUAcZowoC/WxmTLtZu8KyF4lt5iEzp70/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtf5Yy/btrUAcZowoC/WxmTLtZu8KyF4lt5iEzp70/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtf5Yy/btrUAcZowoC/WxmTLtZu8KyF4lt5iEzp70/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdtf5Yy%2FbtrUAcZowoC%2FWxmTLtZu8KyF4lt5iEzp70%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4608&quot; height=&quot;2592&quot; data-filename=&quot;KakaoTalk_20221226_005833455_01.jpg&quot; data-origin-width=&quot;4608&quot; data-origin-height=&quot;2592&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;&amp;nbsp;쏘카는 렌터카 회사 아니야? 라는 질문으로 시작해 쏘카가 지향하고 있는 '&lt;b&gt;이동이 즐겁고 행복한 세상&lt;/b&gt;'에 대해 설명을 들었 습니다. &lt;b&gt;자율주행 레벨 4단계&lt;/b&gt;에서 쏘카가 계획하고 있는 서비스를 실현시키기 위해 &lt;u&gt;SW역량&lt;/u&gt;을 가졌으면서도, &lt;u&gt;주어진 문제를 넘어서 도전하는 사람들&lt;/u&gt;, &lt;u&gt;목표에 대한 why가 있는 사람들&lt;/u&gt;, &lt;u&gt;도전으로 인해 현재와 과거가 어떻게 달라졌는지 설명할 수 있는 사람들&lt;/u&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;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20221226_005833455_05.jpg&quot; data-origin-width=&quot;2455&quot; data-origin-height=&quot;1295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ow7Tg/btrUxo0nn9y/wlXIAlGmCCJNy5g4OdiDH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ow7Tg/btrUxo0nn9y/wlXIAlGmCCJNy5g4OdiDH0/img.png&quot; data-alt=&quot;함께 면담했던 싸피 7, 8기분들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ow7Tg/btrUxo0nn9y/wlXIAlGmCCJNy5g4OdiDH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOw7Tg%2FbtrUxo0nn9y%2FwlXIAlGmCCJNy5g4OdiDH0%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;2455&quot; height=&quot;1295&quot; data-filename=&quot;edited_KakaoTalk_20221226_005833455_05.jpg&quot; data-origin-width=&quot;2455&quot; data-origin-height=&quot;1295&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;함께 면담했던 싸피 7, 8기분들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;다음 일정으로 조별 멘토링 시간을 가졌습니다. BE 개발을 담당하신 현직자분과 자유로운 질문을 나눌 수 있었습니다. 특별히 현직자 분께서 싸피 5기 수료생이셨고, 비전공자로 교육을 받으셨기 때문에 조금 더 의지할 수 있는 멘토링이 되었습니다. 대화한 이야기 전부를 블로그에 다 담을 수는 없겠지만, 1학기보다도 2학기 때 더 많이 (힘들어하면서)성장하기 때문에 1학기를 마치고 부족하다고 생각되더라도 2학기때 더 도전하고 꾸준하게 공부하라는 메시지를 받았습니다.&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;알고리즘, 포트폴리오도 중요하지만 멘토링을 통해 CS 공부의 중요성을 좀더 강하게 느낀 것 같습니다. 면접을 위한 CS는 이미 잘 알려진 규글이나, 잘 정리되어 있는 면접용 이론을 공부하면 되겠지만, 업무 현장에서 사용되는 언어나 기술에 대해서 이해하려면 많은 공부가 필요하다고 느꼈습니다. 함께 한 조원 분들 중 7기 분들과도 많은 대화를 나눌 수 있었는데 CAPFA, 웹 소켓, REST, FAST API, DB별 특징.. 등 알아야하고 공부해야 하는 것이 정말 많다는 점을 다시금 느낄 수 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20221226_005833455_02.jpg&quot; data-origin-width=&quot;2726&quot; data-origin-height=&quot;1687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4MQG3/btrUxp5W8JL/FAesX6jcrNlJLVB0NTR0UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4MQG3/btrUxp5W8JL/FAesX6jcrNlJLVB0NTR0UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4MQG3/btrUxp5W8JL/FAesX6jcrNlJLVB0NTR0UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4MQG3%2FbtrUxp5W8JL%2FFAesX6jcrNlJLVB0NTR0UK%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;2726&quot; height=&quot;1687&quot; data-filename=&quot;edited_KakaoTalk_20221226_005833455_02.jpg&quot; data-origin-width=&quot;2726&quot; data-origin-height=&quot;1687&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ps. 대부분 자유롭게 재택근무를 하셨습니다. 알고는 있었는데, 직접 방문해본 쏘카 근무환경.. 쵝오..!&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20221226_005833455_06.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/et6wJv/btrUuAAI0Xr/IXcE7hqhx3SvHkO0FiiDqk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/et6wJv/btrUuAAI0Xr/IXcE7hqhx3SvHkO0FiiDqk/img.jpg&quot; data-alt=&quot;이마가 찢긴 토끼속에는 간식이 들어있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/et6wJv/btrUuAAI0Xr/IXcE7hqhx3SvHkO0FiiDqk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fet6wJv%2FbtrUuAAI0Xr%2FIXcE7hqhx3SvHkO0FiiDqk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; data-filename=&quot;KakaoTalk_20221226_005833455_06.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이마가 찢긴 토끼속에는 간식이 들어있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.socar.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.socar.kr/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671990629812&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;쏘카 기업 블로그&quot; data-og-description=&quot;모빌리티 혁신 플랫폼, 쏘카&quot; data-og-host=&quot;blog.socar.kr&quot; data-og-source-url=&quot;https://blog.socar.kr/&quot; data-og-url=&quot;https://blog.socar.kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yeZAN/hyQ1jHdhTh/3nF4hOYK1op6LMgYMfnvYk/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cgBPVn/hyQ1iVRm5F/UVJD71YI1F6olcYucylw0k/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://blog.socar.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.socar.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yeZAN/hyQ1jHdhTh/3nF4hOYK1op6LMgYMfnvYk/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cgBPVn/hyQ1iVRm5F/UVJD71YI1F6olcYucylw0k/img.jpg?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; data-ke-size=&quot;size16&quot;&gt;쏘카 기업 블로그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;모빌리티 혁신 플랫폼, 쏘카&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.socar.kr&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;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;코로나 시국이 끝나지 않은 시점임에도 불구하고 많은 인원을 데리고 사내 방문을 허락해주신 쏘카&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기회를 마련해주신 취업지원과에 감사드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;김경민 기자단 명함.png&quot; data-origin-width=&quot;3600&quot; data-origin-height=&quot;1960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBUKvs/btrUwn8Gqs0/rFWXVHzADpaAZc3BnpEOX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBUKvs/btrUwn8Gqs0/rFWXVHzADpaAZc3BnpEOX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBUKvs/btrUwn8Gqs0/rFWXVHzADpaAZc3BnpEOX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBUKvs%2FbtrUwn8Gqs0%2FrFWXVHzADpaAZc3BnpEOX0%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;600&quot; height=&quot;327&quot; data-filename=&quot;김경민 기자단 명함.png&quot; data-origin-width=&quot;3600&quot; data-origin-height=&quot;1960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>SSAFY/SSAFYcial</category>
      <category>SOCAR</category>
      <category>SSAFY</category>
      <category>SSAFYcial</category>
      <category>기업탐방</category>
      <category>쏘카</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/334</guid>
      <comments>https://hei-jayden.tistory.com/334#entry334comment</comments>
      <pubDate>Mon, 26 Dec 2022 02:40:35 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #2206. 벽 부수고 이동하기</title>
      <link>https://hei-jayden.tistory.com/333</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;시간초과&lt;/span&gt;&lt;/b&gt;가 발생했다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 벽을 부셔서&amp;nbsp; 최단 거리를 구해보는 알고리즘으로 풀 수 없다?&lt;br /&gt;&amp;rarr; 시간초과 발생 : BFS 기본 시간 * 부술 수 있는 벽의 수 : 문제에서 1000*1000으로 시간제한에 걸린다&lt;br /&gt;참고: &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.acmicpc.net/board/view/84960&quot;&gt;https://www.acmicpc.net/board/view/84960&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;벽을 단 한번만 부실 수 있다는 조건&lt;/b&gt;을 이용해서 3차원으로 푸는 것이 일반적인 해답인 듯 하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글링을 참고&lt;/p&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 구글링 : 3차원 풀이 방식 사용
# 벽을 단 한번만 부술수 있기 때문에 벽을 부쉈는지의 여부를 하나의 차원에 나타내서 풀 수 있다

# 3차원방식 도입 풀이
from collections import deque

dcol = [-1, 0, 1, 0]
drow = [0, 1, 0, -1]

def find_route():
    queue = deque()
    queue.append((0, 0, 0))

    while queue:
        col, row, bkw = queue.popleft()     # bkw: 벽을 부순 횟수
        if col == N-1 and row == M-1:       # 목표지점에 도달했을 경우
            return visited[col][row][bkw]   # 이동 거리를 반환

        for v in range(4):
            ncol = col + dcol[v]
            nrow = row + drow[v]
            if 0&amp;lt;=ncol&amp;lt;N and 0&amp;lt;=nrow&amp;lt;M:     # arr 범위 내에서
                if arr[ncol][nrow] == 1 and bkw == 0:   # 탐색한 곳이 벽이고, 벽을 부순적이 없을 때
                    # 탐색한 곳으로 진행, 벽을 부슨 상태를 가정했기 때문에 [ncol][nrow][1](벽을 부쉈을 때)에 기록
                    # 현재까지 이동한 거리에서 +1
                    visited[ncol][nrow][1] = visited[col][row][0] + 1
                    queue.append((ncol, nrow, 1))

                elif arr[ncol][nrow] == 0 and visited[ncol][nrow][bkw] == 0:    # 탐색한 곳이 빈 공간,
                    # 현재까지 이동한 거리 +1
                    visited[ncol][nrow][bkw] = visited[col][row][bkw] + 1
                    queue.append((ncol, nrow, bkw))

    # 중간에 return 되지 않았을 경우(arr[N-1][M-1]에 도달하지 못함) : -1을 반환
    return -1


N, M = map(int, input().split())
arr = [list(map(int, input())) for _ in range(N)]
wall_lst = []

# 3차원 행렬 만들기 - visited[x][y][0]: 벽을 뚫지 않았을 때, visited[x][y][1]: 벽을 뚫었을 때
visited = [[[0]*2 for _ in range(M)] for _ in range(N)]
visited[0][0][0] = 1

print(find_route())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 시도했던 풀이 : 시간초과&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1671468815668&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 시간초과 &amp;amp; 메모리 초과
from collections import deque

dcol = [-1, 0, 1, 0]
drow = [0, 1, 0, -1]

def find_route():
    queue = deque()
    queue.append((0, 0))
    dist = 0
    while queue:
        dist += 1
        for i in range(len(queue)):
            col, row = queue.popleft()
            # arr_copy[col][row] = dist       # dist: 지나온 거리      # 메모리 초과 발생
            for v in range(4):
                ncol = col + dcol[v]
                nrow = row + drow[v]
                if 0&amp;lt;=ncol&amp;lt;N and 0&amp;lt;=nrow&amp;lt;M and arr_copy[ncol][nrow] == 0:    # 주어진 범위 내에서 벽/지나온 곳이 아닐 경우
                    arr_copy[ncol][nrow] = dist       # 메모리 초과 해결(?)
                    queue.append((ncol, nrow))

    # print()
    # for i in arr_copy:
    #     print(*i)

N, M = map(int, input().split())
arr_orgin = [list(map(int, input())) for _ in range(N)]
wall_lst = []
answer = 0xffff

# 벽이 위치한 인덱스 파악
for col in range(N):
    for row in range(M):
        if arr_orgin[col][row] == 1:
            wall_lst.append((col, row))

# 각 벽이 부셔진 상태로 진행했을 때 결과 확인
for col, row in wall_lst:
    arr_copy = [arr_orgin[i][:] for i in range(N)]
    arr_copy[col][row] = 0
    find_route()
    arr_copy[col][row] = 1

    if arr_copy[N-1][M-1]:   # 목적지 도달 여부 판단
        answer = min(arr_copy[N-1][M-1], answer)

# 정답 출력
if answer == 0xffff:
    print(-1)
else:
    print(answer+1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용한 예제&lt;/p&gt;
&lt;pre id=&quot;code_1671469372290&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;6 4
0000
1110
1000
0011
0111
0010&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;visited를 찍어보았을 때 아래와 같이 확인할 수 있다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;252&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBcsza/btrT2Qp6Y97/hiNFEqL9jy8KdgDOh4zZS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBcsza/btrT2Qp6Y97/hiNFEqL9jy8KdgDOh4zZS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBcsza/btrT2Qp6Y97/hiNFEqL9jy8KdgDOh4zZS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBcsza%2FbtrT2Qp6Y97%2FhiNFEqL9jy8KdgDOh4zZS1%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;252&quot; height=&quot;158&quot; data-origin-width=&quot;252&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&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;[a, b]에서 a는 벽 뚫기를 사용하지 않았을 때 경로 거리이고, b는 벽 뚫기를 사용했을 때의 경로 거리를 나타낸다&lt;/li&gt;
&lt;li&gt;그림에서 [13, x] ([13, 9])은 벽을 뚫지 않고 13번만에 도달한 위치임을 알 수 있다&lt;/li&gt;
&lt;li&gt;[13, x]에서 벽으로 이동하기 위해서 벽을 부수는 행위를 해야 한다. [a, b]에서 벽을 부수지 않고 이동거리를 나타내는 a는 0이 되어야 하고, 벽을 부수고 이동한 거리를 나타내는 b는 이전 까지의 경로(13)에 +1을 한 14가 된다.&lt;/li&gt;
&lt;li&gt;목표지점에 도달할 수 있었기 때문에, 이동 경로를 답으로 표시하고, 그렇지 못한 경우는 -1을 답으로 return 한다&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2206&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2206&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671468839116&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2206번: 벽 부수고 이동하기&quot; data-og-description=&quot;N&amp;times;M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2206&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2206&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fOhyA/hyQYLvWkL3/A0mCuzozNGuszvZf5wEfdk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2206&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2206&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fOhyA/hyQYLvWkL3/A0mCuzozNGuszvZf5wEfdk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;2206번: 벽 부수고 이동하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N&amp;times;M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2차원 공간에서 부르트포스를 사용했을 때 시간초과이나 메모리 초과가 발생하면, &lt;b&gt;차원의 개수를 증가시키는 방식을 고려&lt;/b&gt;해보자.&lt;/li&gt;
&lt;/ul&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;</description>
      <category>Algorithm Study/Python</category>
      <category>2206</category>
      <category>백준</category>
      <category>벽 부수고 이동하기</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/333</guid>
      <comments>https://hei-jayden.tistory.com/333#entry333comment</comments>
      <pubDate>Tue, 20 Dec 2022 02:16:35 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #2638. 치즈</title>
      <link>https://hei-jayden.tistory.com/332</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&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;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

dcol = [-1, 0, 1, 0]
drow = [0, 1, 0, -1]

def find_surface():     # 치즈의 표면을 찾기
    queue = deque()
    visited[0][0] = 1       # (0, 0)에서부터 탐색 시작
    queue.append((0, 0))
    while queue:
        col, row = queue.popleft()
        for v in range(4):
            ncol = col + dcol[v]
            nrow = row + drow[v]
            if 0&amp;lt;=ncol&amp;lt;N and 0&amp;lt;=nrow&amp;lt;M and visited[ncol][nrow] == 0 and arr[ncol][nrow] == 0:   # 치즈가 아닌 곳일 때
                visited[ncol][nrow] = 1     # 방문처리 후 너비우선탐색 진행
                queue.append((ncol, nrow))

def find_melt():    # 치즈가 녹을 곳 탐색 : 2곳 이상 공기와 접촉할 때
    global visited
    visited = [[0] * M for _ in range(N)]       # visited 초기화
    find_surface()      # 치즈의 표면을 탐색

    going_melt = []     # 녹을 예정인 곳을 리스트에 저장
    for col in range(N):
        for row in range(M):
            if visited[col][row] == 0:
                check = 0
                for v in range(4):
                    ncol = col + dcol[v]
                    nrow = row + drow[v]
                    if 0&amp;lt;=ncol&amp;lt;N and 0&amp;lt;=nrow&amp;lt;M and visited[ncol][nrow] == 1 and arr[ncol][nrow] == 0:
                        check += 1
                if check &amp;gt;= 2:
                    going_melt.append((col, row))

    return going_melt

def melt():     # 치즈가 녹는 것
    for c, r in find_melt():
        arr[c][r] = 0


N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
time = 0

while find_melt():
    time += 1
    find_melt()
    melt()

print(time)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;find_surface, find_melt를 통해 치즈의 녹을 부분을 찾고, melt를 통해 실제로 치즈가 녹을 수 있도록 해주었다.&lt;/li&gt;
&lt;li&gt;위 과정이 녹을 치즈가 있을 때 진행될 수 있도록 find_melt 메서드의 값의 return으로 True/False를 체크하였고, True일 동안 치즈가 녹는 과정이 진행되도록 했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2638&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2638&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671384708331&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2638번: 치즈&quot; data-og-description=&quot;첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 &amp;le; N, M &amp;le; 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2638&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2638&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btqI6X/hyQWwfavUF/5olbtrxzUo2CaOEAYw5jn0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/bnFbkn/hyQWGB650S/vQKy8QWbRUXDu8SupJTgf1/img.png?width=416&amp;amp;height=342&amp;amp;face=0_0_416_342,https://scrap.kakaocdn.net/dn/2Z9rt/hyQWDk5xOW/2914y0ZVbbkAHygKKPQS8K/img.png?width=416&amp;amp;height=342&amp;amp;face=0_0_416_342&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2638&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2638&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btqI6X/hyQWwfavUF/5olbtrxzUo2CaOEAYw5jn0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/bnFbkn/hyQWGB650S/vQKy8QWbRUXDu8SupJTgf1/img.png?width=416&amp;amp;height=342&amp;amp;face=0_0_416_342,https://scrap.kakaocdn.net/dn/2Z9rt/hyQWDk5xOW/2914y0ZVbbkAHygKKPQS8K/img.png?width=416&amp;amp;height=342&amp;amp;face=0_0_416_342');&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;2638번: 치즈&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 &amp;le; N, M &amp;le; 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&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;</description>
      <category>Algorithm Study/Python</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/332</guid>
      <comments>https://hei-jayden.tistory.com/332#entry332comment</comments>
      <pubDate>Mon, 19 Dec 2022 02:40:16 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #1717. 집합의 표현</title>
      <link>https://hei-jayden.tistory.com/331</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;재귀 호출 깊이를 지정해주지 않았을 때 recursion error가 발생했다.&lt;/li&gt;
&lt;li&gt;import sys 또한 빠뜨리지 않도록 주의하자 (import를 빼먹으면 name error 발생)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
sys.setrecursionlimit(10**5)

# 서로소 집합 문제
# pypy3 채점

def find(x):    # x의 부모 값을 return
    if x == p[x]:       # 자기 자신을 부모로 갖는 경우
        return p[x]     # 그대로 return
        # return x를 해도 동일함, 그러나 return 값을 p[x]로 맞춰주기 위해 p[x]로 연습하자

    # 자기 자신을 부모로 갖지 않는 경우
    p[x] = find(p[x])   # path compression 진행
    return p[x]         # x의 부모 값을 return

def union(x, y):
    p[find(y)] = find(x)    # y값의 부모를 x값의 부모로 변경


n, m = map(int, input().split())
p = [i for i in range(n+1)]     # p: 부모로 가리키고 있는 값을 나타내는 리스트

for _ in range(m):
    ord, a, b = map(int, input().split())
    if ord == 0:    # a, b의 집합을 하나로 합친다
        union(a, b)
    else:   # ord == 1일 때 합집합 여부 확인
        if find(a) == find(b):  # a의 부모 노드와 b의 부모 노드가 같다 &amp;rarr; 같은 집합이다
            print(&quot;YES&quot;)
        else:
            print(&quot;NO&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;pre id=&quot;code_1657846453577&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def find(x):    # x의 부모 값을 return
    ...

    p[x] = find(p[x])   # path compression
    return p[x]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;path compression?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find(x) 과정에서 만나는 모든 노드들이 &lt;b&gt;직접&lt;/b&gt; (최종적으로 가리키는) &lt;b&gt;부모를 가리킬 수 있도록 정보를 변경하는 것&lt;/b&gt;을 말한다. path compression을 거치지 않게되면 편향적인 트리구조가 생성되고, 간선의 수만큼 재귀호출이 필요해지는 문제가 발생한다. 이는 시간과 메모리상에서 큰 비효율을 초래하게 된다.&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;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1717&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1717&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671275941844&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1717번: 집합의 표현&quot; data-og-description=&quot;첫째 줄에 n(1 &amp;le; n &amp;le; 1,000,000), m(1 &amp;le; m &amp;le; 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1717&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1717&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/db3toH/hyQUTbpyCZ/l6FW9cET6PToE08DWxWLR0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1717&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1717&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/db3toH/hyQUTbpyCZ/l6FW9cET6PToE08DWxWLR0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;1717번: 집합의 표현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 n(1 &amp;le; n &amp;le; 1,000,000), m(1 &amp;le; m &amp;le; 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&gt;
&lt;pre id=&quot;code_1671277210656&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def union(x, y):
    # test 1: 257616kb 4996ms
    p[find(y)] = find(x)    # y값의 부모를 x값의 부모로 변경

    # test 2: 278440kb 5008ms
    if find(x) &amp;lt; find(y):
        p[find(y)] = find(x)
    else:
        p[find(x)] = find(y)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;궁금증&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구글링 하다보면 test2 방식으로 풀이하신 분들이 많았는데 굳이 저렇게 작성해야 하나? 하는 의문이 남아있다.&lt;/li&gt;
&lt;li&gt;test1 방식으로 풀이했을 때도 동일하게 정답을 확인했고, 오히려 시간과 메모리가 단축되는 것을 확인했다.&lt;/li&gt;
&lt;/ul&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>Algorithm Study/Python</category>
      <category>1717</category>
      <category>백준</category>
      <category>서로소집합</category>
      <category>알고리즘</category>
      <category>집합의표현</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/331</guid>
      <comments>https://hei-jayden.tistory.com/331#entry331comment</comments>
      <pubDate>Sat, 17 Dec 2022 20:43:39 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #1021. 회전하는 큐</title>
      <link>https://hei-jayden.tistory.com/330</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 첫번째 원소 뽑아내기
# 2. 왼쪽으로 한 칸 이동
# 3. 오른쪽으로 한 칸 이동

from collections import deque

def pop_idx0():
    lst.popleft()
    queue.popleft() 
    return

def move_left():
    global exe
    queue.append(queue.popleft())
    exe += 1
    return

def move_right():
    global exe
    queue.appendleft(queue.pop())
    exe += 1
    return


N, M = map(int, input().split())
lst = deque(map(int, input().split()))
queue = deque([i for i in range(1, N+1)])
idx = 0
diff = 1
exe = 0

while lst:
    # lst[0]이 queue[0]과 같은지 확인
    if lst[0] == queue[0]:
        pop_idx0()

    # lst[0]이 queue[0]과 다를 때 왼쪽/오른쪽 비교
    else:
        while queue[-diff] != lst[0] and queue[diff] != lst[0]:
            diff += 1
        if queue[-diff] == lst[0]:
            # print('왼쪽으로 이동', diff)
            for i in range(diff):
                move_right()
        elif queue[diff] == lst[0]:
            # print('오른쪽으로 이동', diff)
            for i in range(diff):
                move_left()
        diff = 1
print(exe)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1021&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1021&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671263011680&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1021번: 회전하는 큐&quot; data-og-description=&quot;첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1021&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1021&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0R1jr/hyQUVNJK05/WM8OApnvAePtcKAkhO6Gzk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1021&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1021&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0R1jr/hyQUVNJK05/WM8OApnvAePtcKAkhO6Gzk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;1021번: 회전하는 큐&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;</description>
      <category>Algorithm Study/Python</category>
      <category>1021</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>큐</category>
      <category>파이썬</category>
      <category>회전하는큐</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/330</guid>
      <comments>https://hei-jayden.tistory.com/330#entry330comment</comments>
      <pubDate>Sat, 17 Dec 2022 16:44:01 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #1987. 알파벳</title>
      <link>https://hei-jayden.tistory.com/329</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DFS로 풀이했다면 pypy3로 채점을 시도, BFS로 풀이했다면 python3로 채점할 수 있다고 한다.&lt;br /&gt;(자세한 이유까지는 모르겠다)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# dfs 풀이는 pypy3로 제출해야 한다고 함: 자세한 이유는 모르겠다.. 
# 문제 채점 과정이 매우 오래 걸린다

# 정답
# U,R,D,L
dcol = [-1, 0, 1, 0]
drow = [0, 1, 0, -1]

def dfs(col, row):
    global level, max_level
    visited[col][row] = 1   # 방문 처리
    alpha_lst[ord(arr[col][row])-65] = 1    # 방문한 지점의 알파벳 처리
    level += 1  # 재귀가 반복될 때마다 깊이(level) 증가
    max_level = max(level, max_level)   ## max 처리를 이곳에서 했더니 오류가 발생하지 않음
    for v in range(4):
        ncol = col + dcol[v]
        nrow = row + drow[v]
        if 0&amp;lt;=ncol&amp;lt;R and 0&amp;lt;=nrow&amp;lt;C and visited[ncol][nrow] == 0 and alpha_lst[ord(arr[ncol][nrow])-65] == 0:
            dfs(ncol, nrow)		# dfs 탐색 진행

            # 재귀의 return 후 기록한 값을 초기화
            visited[ncol][nrow] = 0
            level -= 1
            alpha_lst[ord(arr[ncol][nrow])-65] = 0

R, C = map(int, input().split())    # R: 세로, C: 가로
arr = [list(input()) for _ in range(R)]
visited = [[0] * C for _ in range(R)]
alpha_lst = [0] * 26
level, max_level = 0, 0

dfs(0, 0)

if max_level == 0:
    max_level = 1

print(max_level)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;알파벳의 값을 체크할 수 있도록 alpha_lst 리스트를 만들었다.&lt;/li&gt;
&lt;li&gt;재귀가 진행될 때 아스키 코드값을 틍해서 alpha_lst를 확인하고, 탐색한 적이 없는 문자일 때 재귀를 진행했다.&lt;/li&gt;
&lt;li&gt;재귀의 단계가 깊어질 때마다 level을 1씩 증가시켰다. level, max_level을 비교해서 max_level을 항상 level보다 같거나 큰값으로 유지시켰다.&lt;/li&gt;
&lt;li&gt;재귀를 진행할 하면서 alpha_lst와 visited에 표시를 했고, 재귀가 끝났을 때 방문여부와 alpha_lst를 이전단계로 초기화, level을 -1해서 탐색할 수 있도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1987&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1987&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671119628173&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1987번: 알파벳&quot; data-og-description=&quot;세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1987&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1987&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dJJZQM/hyQTBhKGJe/vSkKOz6YJrGyfhm5JY59g1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1987&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1987&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dJJZQM/hyQTBhKGJe/vSkKOz6YJrGyfhm5JY59g1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;1987번: 알파벳&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;max_level을 구하는 과정에서 위치를 잘못잡아 꽤나 고생했었다. max_level을 if문 안에넣어서 전개하다보니 조건문이 걸리지 않을 경우 max_level 값의 변경이 이뤄지지 않았었다. 정답과 관련된 변수를 if절에서 사용할 때는 주의해서 사용하도록 하자&lt;/li&gt;
&lt;li&gt;max_level은 level 값이 조정됨에 따라 결정되는 변수인 점을 기억하자. max_level의 갱신하는 코드를 level이 변할 때 최대한 가까운 곳에서 실행할 수 있도록 해야겠다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm Study/Python</category>
      <category>1987</category>
      <category>DFS</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>알파벳</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/329</guid>
      <comments>https://hei-jayden.tistory.com/329#entry329comment</comments>
      <pubDate>Fri, 16 Dec 2022 01:01:54 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #16236. 아기상어</title>
      <link>https://hei-jayden.tistory.com/328</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이동 거리만큼 시간이 걸리는 점을 고려해서 BFS를 사용하자&lt;/li&gt;
&lt;li&gt;2 &amp;lt;= N &amp;lt;= 20의 범위, 메모리는 512MB 가 주어지기 때문에, 시간이나 메모리 초과 오류를 감안하지 않고 구현에 집중해서 풀이할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

# target으로 가는 도중 큰 물고기는 돌아가야 함

# 이동가능한 범위
dcol = [-1,0,1,0]
drow = [0,1,0,-1]

def hunt_fish():
    global time, arr, baby_idx, baby_shark
    time += target[0]       # 이동 후 시간 갱신
    arr[baby_idx[0]][baby_idx[1]] = 0   # 현재 위치 초기화
    ncol, nrow = target[1]
    arr[ncol][nrow] = 9     # 이동한 위치에 상어 표시

    baby_shark[1] += 1     # 상어 몸집 +1
    if baby_shark[0] == baby_shark[1]:
        baby_shark[0] += 1
        baby_shark[1] = 0

    baby_idx = (ncol, nrow)
    return

def find_target():
    global target, repeat
    visited = [[0] * N for _ in range(N)]
    visited[baby_idx[0]][baby_idx[1]] = -1      # 아기상어의 시작 위치

    # 먹을 수 있는 물고기가 공간에 있는지 조회
    eatable = []

    # 도달 할 수 있는 곳인지 확인
    queue = deque()
    queue.append((baby_idx[0], baby_idx[1]))
    dist = 0
    while queue:
        dist += 1
        for i in range(len(queue)):
            col, row = queue.popleft()
            for v in range(4):
                ncol = col + dcol[v]
                nrow = row + drow[v]
                if 0 &amp;lt;= ncol &amp;lt; N and 0 &amp;lt;= nrow &amp;lt; N and visited[ncol][nrow] == 0:
                    if arr[ncol][nrow] &amp;lt;= baby_shark[0]:
                        queue.append((ncol, nrow))
                        visited[ncol][nrow] = dist  # 이동가능한 공간
                    else:
                        visited[ncol][nrow] = 0  # 이동할수 없는 공간

    for col in range(N):
        for row in range(N):
            if 0 &amp;lt; arr[col][row] &amp;lt; baby_shark[0] and visited[col][row] &amp;gt; 0:
                eatable.append((visited[col][row], (col, row)))

    if not eatable:  # eatable이 없을 때
        target = []
        repeat = False
        return
    else:  # eatable이 존재할 때
        eatable.sort(key=lambda x: (x[0], x[1][0], x[1][1]))
        target = eatable[0]
        return


def move():
    find_target()

    # 목표가 있을 때, 사냥
    if target:
        hunt_fish()

N = int(input())    # 공간의 크기
arr = [list(map(int, input().split())) for _ in range(N)]   # 9: 아기 상어
baby_shark = [2, 0]
time = 0
repeat = True

# 아기상어 위치 찾기
for col in range(N):
    for row in range(N):
        if arr[col][row] == 9:
            baby_idx = (col, row)

while repeat:
    move()

print(time)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이동을 위한 함수 move()를 작성하고, repeat가 True일 동안 move()를 반복 실행시켰다&lt;/li&gt;
&lt;li&gt;move 내부에는 사냥감을 찾는 find_target(), 사냥하는 hunt() 함수를 만들어 동작시켰다&lt;/li&gt;
&lt;li&gt;find_target()에서 visited를 이용해 이동할 수 있는 위치를 표시하였고, 이동가능한 곳의 값이 아기 상어의 크기보다 작을 때 eatable 리스트에 담아두었다&lt;/li&gt;
&lt;li&gt;탐색을 마친 eatable 리스트는 lamda 정렬을 통해서 (위쪽, 왼쪽) 순으로 정렬될 수 있도록 했다&lt;/li&gt;
&lt;li&gt;target의 값이 존재한다면 hunt_fish 함수를 실행한다&lt;/li&gt;
&lt;li&gt;아기 상어가 있던 지점을 0으로 초기화해주고, 사냥감이 있는 곳에 아기상어를 위치시킨다&lt;/li&gt;
&lt;li&gt;이때 아기 상어가 먹은 물고기의 개수를 세서, 아기상어의 크기와 먹은 물고기의 개수가 같아질 때 상어의 몸집을 1 증가시켜주었다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16236&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/16236&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1671008701531&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;16236번: 아기 상어&quot; data-og-description=&quot;N&amp;times;N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1&amp;times;1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/16236&quot; data-og-url=&quot;https://www.acmicpc.net/problem/16236&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iQ593/hyQTGbh8eB/GNr6v5gVTvBhZEskKMKVTK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16236&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/16236&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iQ593/hyQTGbh8eB/GNr6v5gVTvBhZEskKMKVTK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;16236번: 아기 상어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N&amp;times;N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1&amp;times;1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어려웠던 점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BFS로 거리를 계산할 생각을 하지 못해서 잘못된 결과값을 도출했었다. 아기상어와 target간의 가로, 세로&amp;nbsp; 값을 더한 값을 기준으로 사용했었는데, 중간에 아기 상어보다 큰 물고기들이 있을 경우 돌아가야 한다는 점이 적용되지 않았기 때문에 다시 설정해야 했다&lt;/li&gt;
&lt;/ul&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>Algorithm Study/Python</category>
      <category>BFS</category>
      <category>백준</category>
      <category>아기상어</category>
      <category>알고리즘</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/328</guid>
      <comments>https://hei-jayden.tistory.com/328#entry328comment</comments>
      <pubDate>Wed, 14 Dec 2022 18:07:39 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #1918. 후위표기식</title>
      <link>https://hei-jayden.tistory.com/327</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stack 구조를 이용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 분의 풀이를 참고했다&lt;/p&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;inp = list(input())
stack = []      # 스택 저장 공간
res = &quot;&quot;

# inp 값의 요소 확인
for i in inp:
    if i.isalpha():     # i.isalpha(): 만약 i가 영문자라면 True
        res += i        # res에 문자 입력

    elif i == '(':          # 여는 괄호: stack에 담는다
        stack.append(i)

    elif i == '*' or i == '/':      # 곱셈 또는 나눗셈
        # stack의 꼭대기 연산자가 같은 우선순위의 연산자일 경우
        while stack and (stack[-1] == '*' or stack[-1] == '/'):
            res += stack.pop()  # res에 모든 연산자를 입력하고
        stack.append(i)         # stack에 현재 연산자 입력

    elif i == '+' or i == '-':      # 덧셈 또는 뺄셈
        # stack의 꼭대기 연산자가 여는괄호가 아닌 동안
        while stack and stack[-1] != '(':
            res += stack.pop()  # res에 모든 연산자를 입력
        stack.append(i)         # stack에 현재 연산자 입력

    elif i == ')':          # 닫는 괄호일 때
        while stack and stack[-1] != '(':   # 여는 괄호가 나올 때 까지
            res += stack.pop()      # 연산자를 빼서 res에 입력
        stack.pop()     # 여는 괄호까지 제거

while stack:        # stack에 남은 값들에 대해서
    res += stack.pop()      # stack의 위에 쌓인 연산자부터 res에 입력

print(res)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;for 문의 i값이 연산자일 경우 조건에 맞게 while문과 pop()을 진행한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1918&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1918&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670910000779&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1918번: 후위 표기식&quot; data-og-description=&quot;첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1918&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1918&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kuiyT/hyQTAOQuHJ/pzsS770DmFAZ9rr0derOqK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/guuEz/hyQTGIirui/bPgYVDzblPcDH1UQbDluqk/img.png?width=868&amp;amp;height=262&amp;amp;face=0_0_868_262&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1918&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1918&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kuiyT/hyQTAOQuHJ/pzsS770DmFAZ9rr0derOqK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/guuEz/hyQTGIirui/bPgYVDzblPcDH1UQbDluqk/img.png?width=868&amp;amp;height=262&amp;amp;face=0_0_868_262');&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;1918번: 후위 표기식&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;for문으로 연산자를 확인했을 때 곧바로 처리해야 한다는 생각에 틀에 갇혀있었던 것 같다. &lt;br /&gt;특정 연산자를 만났을 때 res에 올바른 값이 모두 기입된 채로 넘어가야 하는 것은 아니였다. &lt;br /&gt;현재 바라보고 있는 연산자를 당장 처리해야하지 않는다면 stack에 쌓아두고, &lt;br /&gt;&lt;b&gt;다음 연산자를 탐색했을 때 이전의 값을 가지고, res에 추가할지 여부를 따져도 늦지 않는다는 점을 배울 수 있었다&lt;/b&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;</description>
      <category>Algorithm Study/Python</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>파이썬</category>
      <category>후위표기식</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/327</guid>
      <comments>https://hei-jayden.tistory.com/327#entry327comment</comments>
      <pubDate>Tue, 13 Dec 2022 14:48:54 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #17298. 오큰수</title>
      <link>https://hei-jayden.tistory.com/326</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주어진 조건을 봤을 때 N의 크기가 1 ~ 1,000,000임을 확인할 수 있다. 시간복잡도 O(n)로 알고리즘을 짜야 시간초과 문제가 발생하지 않는다&lt;/li&gt;
&lt;li&gt;단순히 for문을 사용하는 방식이나, 리스트의 뒷부분부터 탐색하는 방식이 잘 적용되지 않는다면, 자료구조를 활용하는 방법을 생각해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*다른 블로그 풀이를 보고 정리&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;N = int(input())
A = list(map(int, input().split()))
answer = [-1] * N   # 기본값으로 -1을 세팅
stack = [0]

# 오른쪽 값이 현재 값보다 작을 때: 스택에 인덱스 값을 push
# 오른쪽 값이 현재 값보다 클 때: 스택에서 값을 pop하면서, 더 큰 값이 나올 때까지, 기준점의 오른쪽 값으로 대체
# 마지막 인덱스의 경우 스택에 쌓인 값이 없으므로 기본값으로 설정한 -1이 그대로 적용
for i in range(1, N):
    while stack and A[stack[-1]] &amp;lt; A[i]:
        answer[stack.pop()] = A[i]
    stack.append(i)

print(*answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자료구조 중 stack을 통해 문제를 풀었다. 원하는 값이 나올 때까지 append 혹은 pop을 해가면서 논리적으로 스택구조를 사용하는 능력을 길러야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17298&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/17298&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670812143239&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;17298번: 오큰수&quot; data-og-description=&quot;첫째 줄에 수열 A의 크기 N (1 &amp;le; N &amp;le; 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN&amp;nbsp;(1 &amp;le; Ai &amp;le; 1,000,000)이&amp;nbsp;주어진다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/17298&quot; data-og-url=&quot;https://www.acmicpc.net/problem/17298&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/E3evH/hyQRKqVPjm/qLjM7K05P6gRt1jPDlHSD0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17298&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/17298&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/E3evH/hyQRKqVPjm/qLjM7K05P6gRt1jPDlHSD0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;17298번: 오큰수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수열 A의 크기 N (1 &amp;le; N &amp;le; 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN&amp;nbsp;(1 &amp;le; Ai &amp;le; 1,000,000)이&amp;nbsp;주어진다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&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;</description>
      <category>Algorithm Study/Python</category>
      <category>NGE</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>오큰수</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/326</guid>
      <comments>https://hei-jayden.tistory.com/326#entry326comment</comments>
      <pubDate>Mon, 12 Dec 2022 11:31:58 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #14502. 연구소</title>
      <link>https://hei-jayden.tistory.com/324</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;벽을 세울 수 있는 곳 중에서 세곳을 선택하고 벽을 세운다&lt;/li&gt;
&lt;li&gt;벽을 세운 후 바이러스가 확산되었을 때, 확산되지 않은 방의 개수를 확인한다&lt;/li&gt;
&lt;li&gt;다른 세 곳에도 벽을 세울 수 있는 모든 경우에 대해 확인한다&lt;/li&gt;
&lt;li&gt;확산되지 않은 방이 가장 큰 경우를 선택한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;바이러스의 확산을 확인하기 위해 BFS를 사용했다&lt;/li&gt;
&lt;li&gt;deepcopy 방식을 이용해서 매 경우 마다 사용하는 arr를 초기화 시켜주었다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 완전 탐색, BFS

from collections import deque

# U,R,D,L
dcol = [-1,0,1,0]
drow = [0,1,0,-1]

# BFS: 바이러스의 확산
def spread_virus(lst):
    global virus    # 바이러스가 있는 방 정보 가져오기

    queue = deque(virus)
    while queue:
        col, row = queue.popleft()
        for v in range(4):
            ncol = col + dcol[v]
            nrow = row + drow[v]
            if 0&amp;lt;=ncol&amp;lt;N and 0&amp;lt;=nrow&amp;lt;M and lst[ncol][nrow] == 0:
                lst[ncol][nrow] = 2     # 바이러스 확산 표시
                queue.append((ncol, nrow))      # BFS 탐색 전개를 위해 큐 append
    return


def comb(level, start, temp):   # level: 깊이, start: 인덱스 기준, temp: 저장공간
    if level == 3:      # 원하는 깊이에 도달할 때 = 원하는 만큼 담았을 때
        arr_copy = [arr[i][:] for i in range(N)]    # arr 행에 대해서 n개의 슬라이싱 복사 = deepcopy
        cnt = 0     # 안전한 공간의 개수 저장공간
        # 벽을 세우는 작업 진행
        for c, r in temp:
            arr_copy[c][r] = 1


        # 바이러스가 퍼졌을 때 남아있는 방 개수 확인
        spread_virus(arr_copy)
        for col in range(N):
            for row in range(M):
                if arr_copy[col][row] == 0:      # 안전한 공간일 경우
                    cnt += 1                # cnt += 1

        # 정답 리스트에 push 후 초기화
        ans_lst.append(cnt)

        return          # 재귀의 return

    # 조합: 한번 뽑았던 인덱스는 다시 뽑지 않아야 해
    # 뽑은 요소는 temp에 push
    for s in range(start+1, len(possible)):
        comb(level+1, s, temp+[possible[s]])


N, M = map(int, input().split())    # N: 세로, M: 가로
arr = list(list(map(int, input().split())) for _ in range(N))     # 0: 빈칸, 1: 벽, 2:바이러스
possible = []
virus = []
ans_lst = []

# 벽을 세울 수 있는 모든 공간 담기
for col in range(N):
    for row in range(M):
        if arr[col][row] == 0:
            possible.append((col, row))
        elif arr[col][row] == 2:
            virus.append((col, row))

# 3곳을 뽑아서 진행
comb(0, -1, [])

print(max(ans_lst))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;pre id=&quot;code_1670689138480&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 슬라이싱을 이용한 깊은 복사
# arr의 i열에 대해서 행을 복사
copy_arr = [arr[i][:] for i in range(N)]

# deepcopy 메서드를 이용할 수도 있다
import copy
copy_arr = copy.deepcopy(arr)


# 조합을 이용한 완전탐색
def comb(level, start, temp)
    if level == 3:	# 목표했던 깊이에 도달했을 때
	# 원하는 작업에 대한 코드 입력
        return		# 이전 깊이로 return

    # start+1: 한번 선택한 인덱스(start)를 다시 뽑지 않고 이후의 인덱스를(start+1) 탐색하도록 함
    # len(possible): 벽을 세울 수 있는 모든 범위
    for s in range(start+1, len(possible)):
        # 깊이를 1 증가, start+1 ~ len(possible) 범위의 값(possible[s])를 temp 공간에 append 하고 dfs 진행
        comb(level+1, s, temp+[possible[s]])&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14502&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/14502&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670688955185&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;14502번: 연구소&quot; data-og-description=&quot;인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/14502&quot; data-og-url=&quot;https://www.acmicpc.net/problem/14502&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d9rGnM/hyQRWjYk02/hR6srEtvmgyQVN6J180Rb0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14502&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/14502&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d9rGnM/hyQRWjYk02/hR6srEtvmgyQVN6J180Rb0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;14502번: 연구소&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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>Algorithm Study/Python</category>
      <category>BFS</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>연구소</category>
      <category>완전탐색</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/324</guid>
      <comments>https://hei-jayden.tistory.com/324#entry324comment</comments>
      <pubDate>Sun, 11 Dec 2022 01:34:23 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #1406. 에디터</title>
      <link>https://hei-jayden.tistory.com/323</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&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;2개의 스택 구조를 사용해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# pypy3 채점으로 정답

# 스택을 하나 더 사용하는 방식을 사용

left = list(input())
right = []           # 임시 스택 공간
N = len(left)
M = int(input())
for m in range(M):
    ord = list(input().split())

    if ord[0] == 'L':               # 커서 왼쪽 이동
        if left:                         # inp이 존재할 때
            right.append(left.pop())      # right 공간에 저장
    elif ord[0] == 'D':             # 커서 오른쪽 이동
        if right:                        # temp가 존재할 때
            left.append(right.pop())      # temp에서 가져와 다시 저장
    elif ord[0] == 'B':             # 커서 왼쪽 문자 삭제
        if left:
            left.pop()
    else:                           # ord[1] 문자 추가
        left.append(ord[1])

# 모든 ord가 종료되면 temp에 저장된 문자를 가져와 다시 저장
left.extend(reversed(right))
print(''.join(left))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구글링을 해보면 deque를 이용해 풀이하시는 분도 계셨다&lt;/li&gt;
&lt;li&gt;일반적으로는 위와 같이, 스택을 2개 사용하는 방식을 이용한 풀이가 좋은 풀이로 보였다&lt;/li&gt;
&lt;li&gt;특정 인덱스에서 요소를 제거할 때 매우 주의해야 한다. 특정 위치에서 요소를 제거하면 그 이후의 요소들이 다시 배치되어야 하기 때문에 시간복잡도가 매우 증가하게 된다&lt;/li&gt;
&lt;li&gt;왼쪽(left), 오른쪽(right)에 두 개의 스택이 있다고 생각하고, 커서의 위치에 따라 요소가 오가는 상황을 생각해볼 수 있었다. 마치 자석이 서로 붙었다 떼어지는 듯한 모습을 상상해볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1406&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1406&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670601610689&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1406번: 에디터&quot; data-og-description=&quot;첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1406&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1406&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dIkeZ1/hyQQqe4whl/SHLrH8FashyE715dwejLH1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1406&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1406&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dIkeZ1/hyQQqe4whl/SHLrH8FashyE715dwejLH1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;1406번: 에디터&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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>Algorithm Study/Python</category>
      <category>AC</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/323</guid>
      <comments>https://hei-jayden.tistory.com/323#entry323comment</comments>
      <pubDate>Sat, 10 Dec 2022 01:06:57 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #2430. AC</title>
      <link>https://hei-jayden.tistory.com/322</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시간초과가 발생한다면 자료구조를 사용해보기&lt;/li&gt;
&lt;li&gt;오류가 발생한다면? : &lt;a href=&quot;https://www.acmicpc.net/board/view/25456&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/25456&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

T = int(input())
for tc in range(1, T+1):
    p = list(input())
    n = int(input())
    inp = deque(input()[1:-1].split(','))
    err = False
    rcnt = 0
    for i in p:
        if i == 'R':
            rcnt += 1
        elif i == 'D':
            if len(inp) &amp;gt; 0 and inp != deque(['']):     # 여기서 문제가 발생
                if rcnt % 2 == 1:       # 홀수 번 뒤집기가 진행되었을 때
                    inp.pop()
                else:
                    inp.popleft()
            else:
                err = True
                break

    if err:
        print('error')
    else:
        if rcnt % 2 == 0:
            print('[' + ','.join(inp) + ']')
        else:
            inp = list(reversed(inp))
            print('[' + ','.join(inp) + ']')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;reverse를 for문 안에서 진행하게 되면 시간복잡도가 O(n) * N이 되므로, 다른 방법을 찾아볼 것&lt;/li&gt;
&lt;li&gt;deque([''])의 길이는 1이 되더라, 덱의 길이를 사용할 때 주의하자&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5430&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/5430&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670592137189&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;5430번: AC&quot; data-og-description=&quot;각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/5430&quot; data-og-url=&quot;https://www.acmicpc.net/problem/5430&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/id4PK/hyQQAWa6xY/uvHK4Zmv2kvmKL4HCtdMK1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5430&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/5430&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/id4PK/hyQQAWa6xY/uvHK4Zmv2kvmKL4HCtdMK1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;5430번: AC&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&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>Algorithm Study/Python</category>
      <category>AC</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/322</guid>
      <comments>https://hei-jayden.tistory.com/322#entry322comment</comments>
      <pubDate>Fri, 9 Dec 2022 22:22:28 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #10799. 쇠막대기</title>
      <link>https://hei-jayden.tistory.com/321</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stack 문항&lt;/li&gt;
&lt;li&gt;각각의 경우를 따져서 풀 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 스택
# 모든 경우대로 조건문을 나열

arr = list(input())
stack = []
cnt = 0
for i in range(len(arr)):
    if len(stack) == 0 and arr[i] == '(':   # stack이 아직 만들어지지 않았을 경우
        stack.append('(')
    else:   # stack이 존재할 때
        # 이전에 들어온 값과 현재 입력되는 값을 비교
        # 모든 경우의 수는 4가지 밖에 되지 않음
        if arr[i-1] == '(' and arr[i] == '(':       # case1
            stack.append('(')
        elif arr[i-1] == '(' and arr[i] == ')':     # case2
            stack.pop()
            cnt += len(stack)
        elif arr[i-1] == ')' and arr[i] == ')':     # case3
            cnt += 1
            stack.pop()
        else:   # arr[i-1] == ')' and arr[i] = '('  # case4
            stack.append('(')
print(cnt)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가장 최근에 입력된 값과, 현재 입력하려는 값을 가지고 모든 경우를 구현할 수 있기 때문에 stack 자료구조를 떠올렸다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10799&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/10799&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670486601028&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;10799번: 쇠막대기&quot; data-og-description=&quot;여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10799&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10799&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bkc3Ul/hyQO6V1A28/tXb2P47FMuKSkrWawTyNM1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/DY9b1/hyQPbXjMAF/24belmzZNaxlWWhszv6Cr1/img.png?width=534&amp;amp;height=284&amp;amp;face=0_0_534_284&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10799&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10799&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bkc3Ul/hyQO6V1A28/tXb2P47FMuKSkrWawTyNM1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/DY9b1/hyQPbXjMAF/24belmzZNaxlWWhszv6Cr1/img.png?width=534&amp;amp;height=284&amp;amp;face=0_0_534_284');&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;10799번: 쇠막대기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&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>Algorithm Study/Python</category>
      <category>10799</category>
      <category>stack</category>
      <category>백준</category>
      <category>쇠막대기</category>
      <category>스택</category>
      <category>알고리즘</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/321</guid>
      <comments>https://hei-jayden.tistory.com/321#entry321comment</comments>
      <pubDate>Thu, 8 Dec 2022 17:03:45 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #2493. 탑</title>
      <link>https://hei-jayden.tistory.com/320</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stack 문제에 해당&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;N = int(input())    # 500,000 이하 -&amp;gt; 완전탐색으로 구현하면 시간초과 발생 우려
towers = list(map(int, input().split()))
lst = [(0, 0)]  # 초기 값으로 (0, 0)을 보유
ans_lst = []    # 정답 리스트

for i in range(len(towers)):
    # stack에 쌓여있는 마지막 높이보다 현재의 탑이 더 높을 경우
    if lst[-1][0] &amp;lt; towers[i]:      # cf. 탑은 서로 높이가 다르므로 높이가 동일한 경우에 대해 생각 x
        # stack의 마지막 값 삭제 : 반복 -&amp;gt; 현재 탑보다 큰 높이가 나올 때까지
        while lst[-1][0] &amp;lt; towers[i]:
            lst.pop()
            # 만약 lst가 빈칸이 되었을 경우 정답 리스트에 0을 추가하고 종료, 0: 왼쪽 방향에 현재 탑보다 높은 탑이 없음
            if len(lst) == 0:
                ans_lst.append(0)
                break
        # lst에 값이 남아있을 때: 현재 탑보다 높은 탑 존재 -&amp;gt; 남아있는 탑의 인덱스 입력
        if lst:
            ans_lst.append(lst[-1][1])
        lst.append((towers[i], i+1))    # 현재의 탑 높이 기록
    else:   # 마지막에 기록한 탑의 높이가 현재 탑보다 높을 때
        lst.append((towers[i], i+1))    # 현재 탑의 정보(높이, 위치) 기록
        ans_lst.append(i)   # 정답 리스트에 현재 탑 위치 기록
print(*ans_lst)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;N의 주어진 조건 범위를 보고, 완전탐색 문제로 접근하면 안된다는 것을 인지해야&lt;/li&gt;
&lt;li&gt;완전탐색이 안된다고 생각되면 자료구조를 생각해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2493&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2493&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670476470960&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2493번: 탑&quot; data-og-description=&quot;첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2493&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2493&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iemFS/hyQO8F6AsE/QsTAwKkkoWXfNisRKk11Fk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2493&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2493&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iemFS/hyQO8F6AsE/QsTAwKkkoWXfNisRKk11Fk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;2493번: 탑&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&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>Algorithm Study/Python</category>
      <category>2493</category>
      <category>BOJ</category>
      <category>stack</category>
      <category>백준</category>
      <category>탑</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/320</guid>
      <comments>https://hei-jayden.tistory.com/320#entry320comment</comments>
      <pubDate>Thu, 8 Dec 2022 14:15:33 +0900</pubDate>
    </item>
    <item>
      <title>[SSAFYcial] 8기 교육생의 1학기 수료 수기, 만약 5개월 전으로 돌아간다면?</title>
      <link>https://hei-jayden.tistory.com/319</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 알음알음 성장로그의 김경민 기자입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;싸피의 한 학기 과정이 마무리되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;8기 교육생들은 프로젝트 발표를 기점으로 1학기를 마치고, 계절학기와 일주일간의 방학을 앞두고 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;5개월이라는 시간이 정말 짧게 느껴졌는데요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&quot;아~ 지금 상태로 9기로 다시 들어간다면 진짜 잘할 자신 있는데&quot;&lt;/i&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;&amp;nbsp;점심먹고 캠퍼스 한바퀴 돌면서 이런 얘기를 정말 많이 나눴는데요. 같은 반 친구들도 더 잘할 수 있는데 학기가 끝났다는 아쉬움을 많이 가지고 있는것 같아요. 저 또한 마찬가지입니다. 사실 목표했던 바 만큼은 성취하지 못한 것 같다고 생각해서 아쉬움이 더 진하게 남는 것 같습니다. (다른 블로그나 유튜브를 운영하시던 싸피 교육생분들은 상장도 많이받고 그러던데..!!) 실력적으로나, 기술적으로나 분명 더 성장할 수 있었는데 말이죠. &lt;b&gt;지난 학기를 되돌아보면서, 이후 교육을 받으시는 분들은 놓치지 않으셨으면 할 내용을 정리해보았습니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# 멘탈관리&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 중요한건 꺾이지 않는 마음&lt;/h4&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;되돌아보면&amp;nbsp;&lt;b&gt;더 뻔뻔하게, 무심하게 내 공부에 집중했다면 더 좋았을 것 같습니다.&amp;nbsp;&lt;/b&gt;'oo는 벌써 골드문제를 풀더라~ 플레티넘 문제를 풀더라~` 하는 이야기에 많이 조급해했던 것 같습니다. 지금 생각해보면 조급함이 제 실력 키우는데는 도움이 되지 않은 것 같습니다. 사람마다 조급함을 다루는 태도는 다양하겠지만, 저는 조급한 상태에서 코딩하다 벽에 막힐 때면 좌절감도 크게 느꼈고 제 템포를 잃어버렸던 적이 많았던 것 같습니다. 하루종일 모니터를 보긴 하느데 손이 움직이지 않거나, 하루를 뿌듯해하지 못하고 찝찝한 상태로 마치고 집으로 향할 때면 힘이 많이 들었던 것 같습니다.&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;학습량이 많은 만큼&amp;nbsp;&lt;b&gt;흔들리지 않고 그날 학습량을 그날 소화할 수 있도록 목표하는게 가장 베스트 인것 같습니다.&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;h4 data-ke-size=&quot;size20&quot;&gt;2. 나의 학습패턴&amp;nbsp; 파악&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;교육과정에 앞서 '나의 학습 패턴이 어떤지 미리 알았다면~' 하는 아쉬움이 크게 있습니다. 오프라인 수업에서 같은 반 친구들을 관찰해보면 각각의 방식으로 공부하는 모습을 볼 수 있었습니다. 교수님의 말 한마디, 클릭 한번마다 타이핑과 캡쳐하느라 정신없이 다 받아 적는 형이 있는 한편, 실시간으로 유튜브 채팅을 즐기면서 교수님께 반응하며 커피 쿠폰을 쓸어담았던 친구들도 있습니다. 매 쉬는 시간마다 친구들과 왁자지껄하게 토론하면서 모르는 내용을 보충하는 유형도 있었고, 유튜브 라이브를 N배속으로 조절해가며 듣는 경우, 수업은 거추장 스럽다며 교재만 보고 이해하는 분들도 있었습니다.&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;b&gt;노션&lt;/b&gt;을 활용해서 개인자료를 만들어나가면서 공부 내용을 정리하고 있는데(진작 이렇게 할걸..!) 유튜브 라이브로 진행된 수업은 다시보기를 활용해서 공부할 수 있겠지만, 오프라인으로 진행된 수업 내용은 정리하지 못한다는 점이 너무 아쉽게 느껴지는 부분입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 스트레스 해소방법 찾기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;스트레스 관리도 중요한 것 같습니다. 한창 슬럼프에 빠져있을 무렵 slay the spire라는 게임에 빠져서 날밤을 새버린 적도 있었는데요. 지금 생각했을 때 크게 후회되는 부분 중 하나입니다. 학기 초만해도 수업 전/후로 헬스장을 다니면서 컨디션이 정말 좋았었는데, 그날 학습량을 소화하지 못하는 경우가 발생하기 시작하면서 다른 방법을 찾아야 했습니다. 스스로를 리프레시 시켜줄 수 있는 방법을 인지하고 계셨으면 좋겠습니다. 저희 반 친구는 주말에 아이유 콘서트를 다녀왔었는데, 오히려 주간평가를 열심히 준비해서 주말동안 공부한 친구들보다도 좋은 결과를 얻었던 모습이 기억에 남네요..! 공부에만 매진하는 것도 좋지만, 한번쯤은 괜찮은 일탈을 계획했더라면 재밌었을 듯 싶습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;h4 data-ke-size=&quot;size20&quot;&gt;4. 취업준비&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;싸피를 하는 목적은 분명 취업인데, 저는 한 학기동안 취업이란 단어를 잊어버리고 지낸 것 같습니다. 최근에 들어서야 정신을 차리는 것 같아요. 싸피 월급에 당장의 걱정은 덜고 있지만, 이렇게 배운 기술들을 가지고 어떤 기업의 어떤 업무를 담당하고 싶은지 취업 타게팅이 아직 안된 것 같아 아쉬움이 남습니다. 최근 저와 같이 비전공자인 다른 반 분이, 1학기 수료 후 취업에 성공하셨다는 소식을 들었는데 좋은 조건의 스타트업으로 향하신다고 합니다. 그 소식을 듣고나서야 싸피 교육에만 안주하는 것이 아니라 더 적극적으로 알아보고 도전해볼걸 싶었습니다. 2학기 부터는 목표기업을 선정하는 큰 숙제를 잘 해냈으면 좋겠네요..!&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1학기에 대한 아쉬움을 뒤로하고 2학기에 대한 기대와 걱정, 설렘이 뒤섞여있는 방학 기간인 것 같습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;같이 수업을 듣는 8기 교육생 분들 힘내시고, 7기 교육생분들 좋은 결과 얻으셨으면 좋겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;새롭게 9기로 선정되신 분들 축하드리고 싸피 수업 잘 준비하셨으면 좋겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기사 읽어주셔서 감사합니다 :)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;김경민 기자단 명함.png&quot; data-origin-width=&quot;3600&quot; data-origin-height=&quot;1960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eqOkgh/btrSHKyg43x/KFyYzY8KZf2zWbnyxo5wK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eqOkgh/btrSHKyg43x/KFyYzY8KZf2zWbnyxo5wK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eqOkgh/btrSHKyg43x/KFyYzY8KZf2zWbnyxo5wK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeqOkgh%2FbtrSHKyg43x%2FKFyYzY8KZf2zWbnyxo5wK0%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;600&quot; height=&quot;327&quot; data-filename=&quot;김경민 기자단 명함.png&quot; data-origin-width=&quot;3600&quot; data-origin-height=&quot;1960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>SSAFY/SSAFYcial</category>
      <category>7기</category>
      <category>8기</category>
      <category>9기</category>
      <category>ssaficial</category>
      <category>SSAFY</category>
      <category>수료</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/319</guid>
      <comments>https://hei-jayden.tistory.com/319#entry319comment</comments>
      <pubDate>Sat, 3 Dec 2022 15:06:05 +0900</pubDate>
    </item>
    <item>
      <title>[CS-네트워크] 네트워크 계층 3, 4강</title>
      <link>https://hei-jayden.tistory.com/318</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;주요 학습 개념&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NAT&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;포워딩 그래프 모델(다익스트라 알고리즘)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;NAT (Network Address Translation, 네트워크 주소 변환)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IPv4 형태의 네트워크에서 네트워크 고갈 문제를 해결하기 위한 방법&lt;/li&gt;
&lt;li&gt;IP 주소의 재사용&lt;/li&gt;
&lt;li&gt;같은 네트워크 내 사용자들은 같은 IP를 공유한다&lt;/li&gt;
&lt;li&gt;패킷이 내부에서 외부로 나갈 때는 괜찮지만 돌아올 때 원래의 위치로 돌아오지 못하는 문제가 발생&lt;/li&gt;
&lt;li&gt;현재 gateway가 패킷이 나갈 때, 돌아올 때의 과정에서 IP를 전환해서 발생하는 문제를 조정하고 있다&lt;/li&gt;
&lt;li&gt;그러나 NAT를 사용하게 되면 디자인상 문제점과 현실적인 문제점이 발생하게 된다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디자인상 문제점 : 라우터는 원래 포워딩, 전달만 하는 역할을 해야 한다. 그러나 NAT에서는 라우터가 IP 주소를 변환해주는 작업을 처리해야 하므로 원래 설계 방식에서 벗어나 있다.&lt;/li&gt;
&lt;li&gt;현실적인 문제 : IPv4에서 발생하는 문제 - 한정된 IP 자원의 고갈 문제, IPv4가 만들어질 당시(70's)에 고려되지 못한 보안 문제 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 따라서 언젠가는 IPv4에서 발전된 단계(IPv6등)로 변경되어야 할 필요가 있다&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;DHCP (Dynamic Host Configuration Protocol, 동적 호스트 구성 프로토콜)\&lt;span data-token-index=&quot;7&quot; data-reactroot=&quot;&quot;&gt;&lt;/span&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;span data-token-index=&quot;7&quot; data-reactroot=&quot;&quot;&gt;고정 IP를 할당하는 경우, 한 대학 내에서 모든 학생들에게 IP를 배정하는 만큼 비용이 발생하게 된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span data-token-index=&quot;7&quot; data-reactroot=&quot;&quot;&gt;그러나 DHCP를 이용한다면 고정 IP에 비해 Address Pool을 자유롭게 사용할 수 있다&lt;/span&gt;&lt;span data-token-index=&quot;7&quot; data-reactroot=&quot;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span data-token-index=&quot;7&quot; data-reactroot=&quot;&quot;&gt;DHCP를 이용하기 위해 DHCP 서버의 도움을 받는다&lt;/span&gt;&lt;span data-token-index=&quot;7&quot; data-reactroot=&quot;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;DCHP 설정 시나리오
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DHCP discover : 255. 255. 255. 255 부터 시작해서 받을 수 있는 IP까지 내려감&lt;/li&gt;
&lt;li&gt;DHCP offer : DHCP 서버는 배정 가능한 67번 IP를 전송&lt;/li&gt;
&lt;li&gt;DHCP request : 해당 번호의 IP를 수락한다는 의미로 reqeust를 보냄&lt;/li&gt;
&lt;li&gt;DHCP ACK : 요청에 대한 응답&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;네트워크 연결 예시&lt;br /&gt;IP :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-token-index=&quot;1&quot; data-reactroot=&quot;&quot;&gt;192. 168&lt;/span&gt;. 1. 47&lt;br /&gt;Mask: 255. 255. 255. 0&lt;br /&gt;Router :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-token-index=&quot;3&quot; data-reactroot=&quot;&quot;&gt;192. 168.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1.&lt;span data-token-index=&quot;5&quot; data-reactroot=&quot;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;1&lt;br /&gt;DNS :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-token-index=&quot;7&quot; data-reactroot=&quot;&quot;&gt;192. 168. 1. 1&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;span data-token-index=&quot;7&quot; data-reactroot=&quot;&quot;&gt;IPv6&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미 오래 전에 제안되었으나 지금도(2015년 기준) IPv6로 전환되지 않았다&lt;/li&gt;
&lt;li&gt;그러나 언젠가 과도기를 거쳐서 넘어갈 것으로 예상된다&lt;/li&gt;
&lt;li&gt;과도기를 거칠 때 IPv4에서 IPv6로 넘어가는 &lt;b&gt;터널링&lt;/b&gt;이 필요할 것이다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Link - State 알고리즘&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;포워딩 : IP가 받은 패킷의 헤더 주소를 보고 패킷을 전송하는 것을 의미한다&lt;/li&gt;
&lt;li&gt;라우터를 그래프의 노드로 두고 노드 간 전송 비용을 고려해 그래프를 그릴 수 있다&lt;/li&gt;
&lt;li&gt;클라이언트가 서버와 연결되는, 최소 비용을 갖는 거리를 찾을 때 다익스트라 알고리즘이 사용된다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 풀이 및 정리&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;브로드 캐스트는 무엇인가?&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IP 네트워크에 있는 모든 로컬 네트워크 호스트로 데이터를 전송하는 방식&lt;/li&gt;
&lt;li&gt;호스트 주소가 전부 1인 경우 브로드캐스트 방식이 사용&lt;/li&gt;
&lt;li&gt;데이터가 수신될 필요가 없는 호스트들에게도 데이터가 전송되기 때문에 불필요한 충돌이 발생, 자신이 속한 네트워크에 한정한다는 점과 라우터를 경유하지 못하는 단점이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;MTU (Max Transfer Size)&lt;/h4&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;쪼개진 IP 데이터 그램은 최종 목적지에 도달해야 다시 합쳐진다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ICMP (Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)&lt;/h4&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;google이라는 서버에 접속하려고 할 때 어느 라우터로 접속하는가
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TTL(Time To Live)을 1로 설정하고 테스트 패킷을 라우터로 보냈을 때, ICMP를 통해 &lt;b&gt;어느 라우터에 전송되었는지&lt;/b&gt; 확인을 하고 패킷 전송을 종료 시킬 수 있다.&amp;nbsp; (TTL을 다르게 하면 각 단계에서 통과하는 라우터를 확인할 수 있다)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인터넷에 연결되기 위한 기본적인 정보 네 가지&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;IP Address&lt;/li&gt;
&lt;li&gt;Subnet Mask : IP 주소를 나눈 작은 네트워크 조각&lt;/li&gt;
&lt;li&gt;Router Address&lt;/li&gt;
&lt;li&gt;DNS (도메인 이름 시스템) : 사람이 읽을 수 있는 도메인 주소를 IP 주소로 변환&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>IT 상식</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/318</guid>
      <comments>https://hei-jayden.tistory.com/318#entry318comment</comments>
      <pubDate>Tue, 8 Nov 2022 23:49:38 +0900</pubDate>
    </item>
    <item>
      <title>[SSAFYcial] IT 현직자 인터뷰 (with 츄르사려고 코딩하는 코집사님)</title>
      <link>https://hei-jayden.tistory.com/317</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;현직자 인터뷰 코집사.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ag7Bc/btrQCicxLbC/tZDJxITwwfbpydTkKYl311/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ag7Bc/btrQCicxLbC/tZDJxITwwfbpydTkKYl311/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ag7Bc/btrQCicxLbC/tZDJxITwwfbpydTkKYl311/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAg7Bc%2FbtrQCicxLbC%2FtZDJxITwwfbpydTkKYl311%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1080&quot; data-filename=&quot;현직자 인터뷰 코집사.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 코딩을 처음 접할 때부터 눈여겨 보고 있던 블로그가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 '츄르사려고 코딩하는 코집사' 님인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘이나 싸피 관련해서 구글링 하다보면 자주 방문하기도 했고, 무엇보다 고양이 캐릭터가 인상 깊었던 블로거였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSAFY 5기였고, 현재는 물류개발자로 활약중인 코집사님을 인터뷰 해보았습니다&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp; 코집사&lt;br /&gt;1.&amp;nbsp;안녕하세요&amp;nbsp;코집사님!&amp;nbsp;간단한&amp;nbsp;&lt;b&gt;자기&amp;nbsp;소개&amp;nbsp;&lt;/b&gt;부탁드리겠습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;안녕하세요&amp;nbsp;코집사입니다.&amp;nbsp;이렇게&amp;nbsp;인터뷰&amp;nbsp;기회&amp;nbsp;주셔서&amp;nbsp;감사합니다! &lt;br /&gt;저는 컴퓨터 공학을 전공해서 SSAFY 5기에 지원하였고, 내부에서 SSAFYcial 활동도 같이 진행했습니다! &lt;br /&gt;SSAFY에서 1학기 활동을 하고, 현재 &lt;i&gt;'한국 네트웍스'&lt;/i&gt;라는 회사에 입사를 해서 물류개발자로 2년차 커리어를 쌓고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더불어&amp;nbsp;'츄르사려고&amp;nbsp;코딩하는&amp;nbsp;집사'라는&amp;nbsp;블로그를&amp;nbsp;운영하고&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(코집사님 블로그 : &lt;a href=&quot;https://yongku.tistory.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yongku.tistory.com/&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;블로그&amp;nbsp;정리를&amp;nbsp;굉장히&amp;nbsp;잘해두셔서&amp;nbsp;인상깊었습니다.&amp;nbsp;코집사님처럼&amp;nbsp;&lt;b&gt;개발&amp;nbsp;블로그를&amp;nbsp;준비할&amp;nbsp;때&amp;nbsp;팁&lt;/b&gt;이&amp;nbsp;있을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;저도&amp;nbsp;맨&amp;nbsp;처음에는&amp;nbsp;1일&amp;nbsp;1커밋처럼&amp;nbsp;1일&amp;nbsp;1업로드를&amp;nbsp;목표로&amp;nbsp;해서&amp;nbsp;글쓰는&amp;nbsp;것을&amp;nbsp;시작했었습니다. &lt;br /&gt;처음에는&amp;nbsp;쓸&amp;nbsp;내용도&amp;nbsp;많고&amp;nbsp;시간도&amp;nbsp;많이&amp;nbsp;있어&amp;nbsp;충분히&amp;nbsp;지킬&amp;nbsp;수&amp;nbsp;있었는데,&amp;nbsp;지금은&amp;nbsp;강압적인&amp;nbsp;1일&amp;nbsp;1업로드는&amp;nbsp;조금&amp;nbsp;말리고&amp;nbsp;싶습니다. &lt;br /&gt;SSAFY를&amp;nbsp;하는&amp;nbsp;이유도&amp;nbsp;결국엔&amp;nbsp;취업을&amp;nbsp;하는&amp;nbsp;것이기&amp;nbsp;때문에,&amp;nbsp;취업&amp;nbsp;준비에&amp;nbsp;악영향을&amp;nbsp;주는&amp;nbsp;경우를&amp;nbsp;최소한으로&amp;nbsp;줄일&amp;nbsp;필요가&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;저는&amp;nbsp;정해진&amp;nbsp;기간에&amp;nbsp;정해진&amp;nbsp;갯수만큼&amp;nbsp;정리를&amp;nbsp;해서&amp;nbsp;블로그에&amp;nbsp;업로드&amp;nbsp;하는&amp;nbsp;것이&amp;nbsp;가장&amp;nbsp;바람직하다고&amp;nbsp;생각합니다. &lt;br /&gt;&lt;br /&gt;사기업을&amp;nbsp;준비하는&amp;nbsp;개발자&amp;nbsp;입장에서는&amp;nbsp;'&lt;b&gt;입사&amp;nbsp;최소한의&amp;nbsp;영어&amp;nbsp;성적&lt;/b&gt;을&amp;nbsp;만들고,&amp;nbsp;그&amp;nbsp;다음&amp;nbsp;&lt;b&gt;프로젝트의&amp;nbsp;경험&amp;nbsp;&lt;/b&gt;&amp;gt;&amp;nbsp;&lt;b&gt;코딩테스트&amp;nbsp;준비&lt;/b&gt;'를&amp;nbsp;하셨으면&amp;nbsp;합니다. &lt;br /&gt;이런&amp;nbsp;프로세스로&amp;nbsp;취업&amp;nbsp;준비를&amp;nbsp;하게&amp;nbsp;되면,&amp;nbsp;결국엔&amp;nbsp;블로그도&amp;nbsp;꾸준히&amp;nbsp;하게&amp;nbsp;된다는&amp;nbsp;것을&amp;nbsp;알려드리고&amp;nbsp;싶습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;SW&amp;nbsp;관련&amp;nbsp;&lt;b&gt;자격증&lt;/b&gt;이나&amp;nbsp;공모전에서&lt;b&gt;&amp;nbsp;입상한&amp;nbsp;경험&lt;/b&gt;이&amp;nbsp;있으신가요? &lt;br /&gt;원래&amp;nbsp;제&amp;nbsp;전공은&amp;nbsp;데이터&amp;nbsp;분석&amp;nbsp;및&amp;nbsp;AI&amp;nbsp;쪽이라,&amp;nbsp;정보처리기사는&amp;nbsp;기본으로&amp;nbsp;빅데이터분석기사,&amp;nbsp;ADSP,&amp;nbsp;GAIQ,&amp;nbsp;CKA&amp;nbsp;등&amp;nbsp;전공과&amp;nbsp;관련된&amp;nbsp;자격증을&amp;nbsp;많이&amp;nbsp;취득했었습니다. &lt;br /&gt;전공과&amp;nbsp;관련된&amp;nbsp;아이디어&amp;nbsp;해커톤을&amp;nbsp;나가면서&amp;nbsp;추천&amp;nbsp;모델을&amp;nbsp;만들었고,&amp;nbsp;해커톤&amp;nbsp;입상을&amp;nbsp;하면서&amp;nbsp;특허&amp;nbsp;등록까지&amp;nbsp;했습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;# 싸피&amp;nbsp;&lt;br /&gt;4.&amp;nbsp;&lt;b&gt;싸피를&amp;nbsp;하면서&amp;nbsp;좋았던&amp;nbsp;점&lt;/b&gt;이&amp;nbsp;있었다면&amp;nbsp;무엇인가요? &lt;br /&gt;SSAFY를&amp;nbsp;하면서&amp;nbsp;배우고&amp;nbsp;얻어갈&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;것이&amp;nbsp;너무&amp;nbsp;많았습니다. &lt;br /&gt;&amp;nbsp;첫&amp;nbsp;번째로&amp;nbsp;&lt;b&gt;알고리즘&amp;nbsp;역량&lt;/b&gt;.&amp;nbsp;SSAFY에&amp;nbsp;가면,&amp;nbsp;제일&amp;nbsp;먼저&amp;nbsp;알고리즘을&amp;nbsp;배웁니다.&amp;nbsp;아침&amp;nbsp;9시부터&amp;nbsp;6시까지&amp;nbsp;알고리즘을&amp;nbsp;계속&amp;nbsp;풀고,&amp;nbsp;정규&amp;nbsp;시간이&amp;nbsp;끝나도&amp;nbsp;알고리즘을&amp;nbsp;풉니다.&amp;nbsp;그렇기&amp;nbsp;때문에&amp;nbsp;알고리즘을&amp;nbsp;많이&amp;nbsp;풀어보면서&amp;nbsp;역량은&amp;nbsp;자연스럽게&amp;nbsp;올라가더라구요. &lt;br /&gt;&amp;nbsp;두&amp;nbsp;번째로&amp;nbsp;&lt;b&gt;교육지원금&amp;nbsp;100만원&lt;/b&gt;.&amp;nbsp;공부하면서&amp;nbsp;돈&amp;nbsp;받는게&amp;nbsp;제일&amp;nbsp;좋았습니다.&amp;nbsp;원래는&amp;nbsp;취업을&amp;nbsp;준비하면서&amp;nbsp;아르바이트도&amp;nbsp;하고&amp;nbsp;그랬는데,&amp;nbsp;SSAFY하면서&amp;nbsp;지원금까지&amp;nbsp;받으니&amp;nbsp;공부할&amp;nbsp;시간을&amp;nbsp;확보할&amp;nbsp;수&amp;nbsp;있었습니다. &lt;br /&gt;&amp;nbsp;세 번째로 &lt;b&gt;취업컨설팅&lt;/b&gt;. SSAFY에서 가장 좋았던 것입니다. 자기소개서 컨설팅과 면접 전략 등 취업할 때 필요한 것을 다 케어해주기 때문에, SSAFY에서 이 시스템을 꼭 활용하라고 하고 싶네요. &lt;br /&gt;&lt;br /&gt;개발에&amp;nbsp;욕심이&amp;nbsp;있으면&amp;nbsp;SSAFY는&amp;nbsp;단점이&amp;nbsp;거의&amp;nbsp;없다라고&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있을&amp;nbsp;정도로&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;br /&gt;5.&amp;nbsp;&lt;b&gt;SSAFY&amp;nbsp;과정&amp;nbsp;전후로&amp;nbsp;달라진&amp;nbsp;점&lt;/b&gt;이&amp;nbsp;있다면&amp;nbsp;무엇인가요? &lt;br /&gt;싸피를&amp;nbsp;하게&amp;nbsp;되면&amp;nbsp;&lt;b&gt;알고리즘&amp;nbsp;실력&lt;/b&gt;이&amp;nbsp;가장&amp;nbsp;많이&amp;nbsp;달라집니다.&amp;nbsp;예전에는&amp;nbsp;구현도&amp;nbsp;정말&amp;nbsp;힘들어&amp;nbsp;했는데,&amp;nbsp;지금은&amp;nbsp;구현이&amp;nbsp;더&amp;nbsp;재밌고&amp;nbsp;웹&amp;nbsp;개발보다&amp;nbsp;알고리즘이&amp;nbsp;더&amp;nbsp;재밌었던&amp;nbsp;경험이&amp;nbsp;있습니다.&amp;nbsp;그래서&amp;nbsp;가장&amp;nbsp;눈에&amp;nbsp;띄게&amp;nbsp;알고리즘&amp;nbsp;실력이&amp;nbsp;달라졌다고&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있을&amp;nbsp;것&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;br /&gt;&amp;nbsp;6. &lt;b&gt;혹시 원래부터 알고리즘을 잘하시던 편은 아니셨나요..?&lt;/b&gt; 반에서 어느정도 하셨는지.. ㅎㅎ 궁금합니다&lt;br /&gt;제 생각엔 제 알고리즘 실력은 '평균'이라고 생각합니다. 같이 알고리즘을 풀 때, 적정 시간에 다른 사람들과 거의 비슷하게&amp;nbsp; , 다른 동기들 실력이 너무 뛰어나서 열심히 배워간다는 느낌이 더 강하더라구요. &lt;br /&gt;SSAFY에서 백준 알고리즘을 많이 풀었는데, 같은 반 사람들끼리의 등수는 4등이었습니다. 이게, 문제만 많이 풀면 높은 등수가 나와서 높을 뿐입니다. &lt;br /&gt;저희&amp;nbsp;반&amp;nbsp;1등이&amp;nbsp;알고리즘을&amp;nbsp;거의&amp;nbsp;1300문제를&amp;nbsp;풀어서&amp;nbsp;압도적인&amp;nbsp;1등이었던&amp;nbsp;것을&amp;nbsp;아직도&amp;nbsp;기억하고&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;br /&gt;7.&amp;nbsp;&lt;b&gt;싸피에서&amp;nbsp;진행하신&amp;nbsp;프로젝트&lt;/b&gt;가&amp;nbsp;궁금합니다. &lt;br /&gt;진행했던&amp;nbsp;프로젝트는&amp;nbsp;게임&amp;nbsp;쿠폰을&amp;nbsp;웹&amp;nbsp;사이트에&amp;nbsp;보여주고,&amp;nbsp;자동으로&amp;nbsp;등록&amp;nbsp;해주는&amp;nbsp;것을&amp;nbsp;진행했습니다.&amp;nbsp; &lt;br /&gt;여기서&amp;nbsp;팀장을&amp;nbsp;맡았었는데,&amp;nbsp;중도&amp;nbsp;퇴소로&amp;nbsp;다른&amp;nbsp;동기&amp;nbsp;분들이&amp;nbsp;힘들었을&amp;nbsp;모습에&amp;nbsp;눈물이&amp;nbsp;나네요&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;br /&gt;8.&amp;nbsp;싸피&amp;nbsp;교육&amp;nbsp;과정중&amp;nbsp;슬럼프나&amp;nbsp;번아웃이&amp;nbsp;오신적이&amp;nbsp;있나요?&amp;nbsp;&lt;b&gt;교육과정&amp;nbsp;중&amp;nbsp;스트레스는&amp;nbsp;어떻게&amp;nbsp;관리하셨나요?&lt;/b&gt; &lt;br /&gt;SSAFY&amp;nbsp;교육을&amp;nbsp;하면서&amp;nbsp;슬럼프가&amp;nbsp;많이&amp;nbsp;오더라구요.&amp;nbsp;처음에는&amp;nbsp;재밌었는데&amp;nbsp;중간부터는&amp;nbsp;내용도&amp;nbsp;조금&amp;nbsp;어려워지고,&amp;nbsp;계속&amp;nbsp;반복되는&amp;nbsp;루틴으로&amp;nbsp;사람이&amp;nbsp;퍼지더라구요. &lt;br /&gt;그래서,&amp;nbsp;같은&amp;nbsp;반&amp;nbsp;동기들끼리&amp;nbsp;자습시간에&amp;nbsp;어몽어스하고,&amp;nbsp;교육&amp;nbsp;끝난&amp;nbsp;후에&amp;nbsp;같이&amp;nbsp;LOL도&amp;nbsp;하면서&amp;nbsp;스트레스를&amp;nbsp;풀었습니다. &lt;br /&gt;(프로님..&amp;nbsp;SSAFY&amp;nbsp;5기&amp;nbsp;농사&amp;nbsp;제가&amp;nbsp;망쳐버렸습니다.&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;br /&gt;9.&amp;nbsp;&lt;b&gt;CS&amp;nbsp;공부&lt;/b&gt;는&amp;nbsp;언제부터&amp;nbsp;어떻게&amp;nbsp;공부하셨나요? &lt;br /&gt;CS&amp;nbsp;같은&amp;nbsp;경우에는&amp;nbsp;솔직히&amp;nbsp;대학&amp;nbsp;교육&amp;nbsp;과정에서&amp;nbsp;외우기만&amp;nbsp;했지,&amp;nbsp;시험보고&amp;nbsp;나면&amp;nbsp;잊어버리곤&amp;nbsp;했죠. &lt;br /&gt;그래서&amp;nbsp;취업&amp;nbsp;준비를&amp;nbsp;할&amp;nbsp;때,&amp;nbsp;단순&amp;nbsp;암기가&amp;nbsp;아닌&amp;nbsp;이해를&amp;nbsp;기반으로&amp;nbsp;시작을&amp;nbsp;했습니다.&amp;nbsp; &lt;br /&gt;&lt;i&gt;CS&amp;nbsp;같은&amp;nbsp;경우&amp;nbsp;하드웨어를&amp;nbsp;시작으로&amp;nbsp;소프트웨어에&amp;nbsp;접근하게&amp;nbsp;되면&amp;nbsp;더욱&amp;nbsp;이해가&amp;nbsp;잘&amp;nbsp;되더라구요.&lt;/i&gt; &lt;br /&gt;그래서&amp;nbsp;&lt;i&gt;SSAFY를&amp;nbsp;하면서&amp;nbsp;하루에&amp;nbsp;최소&amp;nbsp;1개나&amp;nbsp;2개&amp;nbsp;정도는&amp;nbsp;꾸준히&amp;nbsp;정리하는&amp;nbsp;것도&amp;nbsp;좋은&amp;nbsp;방법이라고&amp;nbsp;생각합니다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;#&amp;nbsp;물류&amp;nbsp;개발자 &lt;br /&gt;10.&amp;nbsp;&lt;b&gt;물류에&amp;nbsp;대해&amp;nbsp;관심을&amp;nbsp;갖게&amp;nbsp;된&amp;nbsp;계기&lt;/b&gt;가&amp;nbsp;있다면&amp;nbsp;무엇인가요? &lt;br /&gt;SSAFY를&amp;nbsp;하면서&amp;nbsp;취업&amp;nbsp;박람회&amp;nbsp;때&amp;nbsp;물류가&amp;nbsp;아닌&amp;nbsp;빅데이터&amp;nbsp;분석&amp;nbsp;및&amp;nbsp;AI&amp;nbsp;분야로&amp;nbsp;도피성&amp;nbsp;취업(?)을&amp;nbsp;정말&amp;nbsp;빠르게&amp;nbsp;했었습니다. &lt;br /&gt;회사에&amp;nbsp;입사를&amp;nbsp;하고&amp;nbsp;OJT&amp;nbsp;기간이&amp;nbsp;지난&amp;nbsp;후,&amp;nbsp;팀&amp;nbsp;배정이&amp;nbsp;되기&amp;nbsp;전에&amp;nbsp;상담을&amp;nbsp;했었는데&amp;nbsp;스마트&amp;nbsp;팩토리&amp;nbsp;팀으로&amp;nbsp;가고&amp;nbsp;싶었지만,&amp;nbsp;인원&amp;nbsp;부족으로&amp;nbsp;제&amp;nbsp;의사와&amp;nbsp;다르게&amp;nbsp;물류&amp;nbsp;분야로&amp;nbsp;가게&amp;nbsp;되었습니다.&amp;nbsp; &lt;br /&gt;일단&amp;nbsp;다양한&amp;nbsp;경험을&amp;nbsp;해보고&amp;nbsp;싶어서&amp;nbsp;조금씩&amp;nbsp;일을&amp;nbsp;시작했는데,&amp;nbsp;사람이&amp;nbsp;좋아서&amp;nbsp;그런건지는&amp;nbsp;모르겠지만&amp;nbsp;물류라는&amp;nbsp;분야가&amp;nbsp;꽤나&amp;nbsp;재밌더라구요 &lt;br /&gt;그래서&amp;nbsp;지금까지도&amp;nbsp;물류개발을&amp;nbsp;하고&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;br /&gt;11. 물류 산업의 개발자라 &lt;b&gt;특별한 점&lt;/b&gt;이 있다면 무엇인가요?&lt;br /&gt;물류 개발자는 다른 분야의 개발자와는 다르게 물류 센터에 적용이 되어야 하는 서비스라 &lt;i&gt;출장이 정말 많습니다&lt;/i&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(본사는 판교에 있었는데, 약 1년간 서울숲으로 출장을 다녔습니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 하게 되면 회의가 정말 많고, 동료들과 많은 커뮤니케이션을 하게 됩니다.&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;'물류 개발'이라고 해서 물류 프로세스에 대한 개발을 하는 것이 아닌, 물류 솔루션이나 프레임워크에 대한 개발을 하는 팀도 따로 있기 때문에, 물류 프로세스에 집중을 하냐, 솔루션이나 프레임워크에 집중을 하냐에 따라 나뉘게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에, 기술 스택에 대한 욕심은 항상 커져서 둘 다 잡고 싶네요:D&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;12. 물류 개발자를 희망하는 싸피인들에게 &lt;b&gt;산업에 대한 정보&lt;/b&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;&lt;b&gt;물류 개발자는 물류 프로세스 집중 vs 솔루션 및 프레임워크 개발로 크게 2가지로 나뉩니다.&lt;/b&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;반대로 솔루션 및 프레임워크 개발은 기술력은 높아지지만, 비즈니스에 대한 것은 상대적으로 낮아집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게다가, 지금은 국내 물류 시장이 커지면서 물동량도 비례적으로 상승하고 있고, 물류 개발에 대한 수요도 늘어나고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물류 개발자가 되어 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;13. 싸피인들에게 &lt;b&gt;물류개발자를 추천/홍보&lt;/b&gt;한다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국 네트웍스는 한국타이어의 물류파트와 대외적으로 삼성 SDI, SSG 이마트 등 다양한 회사와 협업을 많이 진행했습니다. 물류 개발 회사는 삼성 SDS, CJ대한통운 등 정말 다양한 곳이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 제 목표도 국내에서 물동량이 더 많은 곳에서 일해보는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어디에 가든 결국 경험이 되기 때문에, 회사에 국한적이게 되는 것보다는 업무에 더 집중하여 선택을 했으면 좋겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;14.&lt;b&gt; AI, 데이터에 대해 관심은 많지만 어떻게 학습해야 할지 모르겠어요&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 같은 경우에는 친구들과&lt;b&gt; AI 분야 토이 프로젝트&lt;/b&gt;를 많이 진행했습니다. 빅데이터 분석 관련 인턴도 했었고, 연구실에도 있었죠. 처음에는 Kaggle의 한 프로젝트를 모방하면서 개념을 하나씩 잡아나갔습니다. Kaggle에서 프로젝트를 copy and typing을 하면서 모르는게 있으면 바로 개념을 정리하는 방법으로 어느 정도 감을 알고 계속 할 수 있을까 없을까를 판별했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서, &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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. 알고리즘 풀이를 잘하고 싶습니다. 다른 친구들보다 알고리즘 풀이를 잘 못하는 편인데 코집사님은 어떻게 공부하셨나요? 주변 친구들보다도 성장하는 속도가 느린것 같아 자신감이 없습니다..&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;b&gt;결국엔 꾸준함이 가장 큰 도움&lt;/b&gt;이 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;남들과 비교를 하면서 위축되는 것보다는 오히려 잘 푸는 사람들에게 물어보는 것이 SSAFY를 하면서 가장 큰 도움을 받은 점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 알고리즘 스터디를 할 때도 실력이 비슷한 사람들끼리 하는 것보다는 5명 중에 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;15. 파이썬, 장고 트랙에 대해 고민이 많습니다. 자바공화국이라는 말도 있고 따로 &lt;b&gt;자바, 스프링 공부를 해야 할 것 같은데 교육 이후 따로 학습 기간을 가져야 할까요?&lt;/b&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;하지만, 그래도 Java + Spring을 사용하는 곳이 정말 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SSAFY 취업 박람회&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;16. 데이터, AI 관련 직무는 석사 학위가 필수라는 이야기를 들었습니다. &lt;b&gt;데이터 분야에 대한 관심만으로는 취업이 어려울까요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘은 데이터, AI 관련 직무는 학사인 지원자들도 뽑습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;석사에 대한 공급이 부족한 편이라, 학사 학위 분들도 대기업에서 많이 채용하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, 석사 학위 없이 취업을 준비한다면 결국에는 프로젝트와 대회 참가를 하면서 경험을 늘리는 것을 추천합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 영향력 있는 대회인 Kaggle과 Dacon 등과 같은 대회를 참가하거나, 경진대회나 컴퍼런스에 참가하는 것도 정말 좋죠.&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;17. 현재까지 배운게 알고리즘, 웹 정도 뿐인데&lt;b&gt; 데이터 관련 포트폴리오는 어떻게 준비해야&lt;/b&gt; 하나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석 관련 포트폴리오는 Github를 많이 사용하곤 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면, 제가 데이터 분석을 할 때 쥬피터 노트북을 많이 사용하는데, 쥬피터 노트북에 코드들의 실행 결과를 PDF로 출력해주는 기능도 있어서 따로 정리를 했었고, 경진대회를 하면 PPT로 제출해야 하는 경우가 많아서 그것을 모아 포트폴리오처럼 만들긴 했었습니다. 제가 정말 시간을 내어 만들어 본 포트폴리오는 없어서 대답을 드리기가 어렵네요!&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;18. &lt;b&gt;취업 준비는 언제부터 계획하셨고 시작&lt;/b&gt;하셨나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 SSAFY에 들어가기 전부터 지속적으로 취업 준비를 하긴 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 나서, SSAFY를 하면서도 저녁에 따로 프로젝트와 자소서를 썼고, 그 결과 1학기를 마치고 거의 2학기 초반에 취업을 할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 싸피인들의 고민 &amp;amp; 질문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19. 정해진 목표가 없이 싸피 교육을 받고 있습니다. SW 분야가 너무 많은데 &lt;b&gt;어떻게 진로를 선택해야 할까요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자신에게 맞는 분야의 진로를 정하는 것은 본인이 경험을 해야 합니다&lt;/b&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;&lt;i&gt;기존 SSAFY 비전공자 분들도 SSAFY를 하면서도 시간을 내어 분야에 대한 경험을 쌓아 정하는 것이 가장 바람직하다고 생각합니다.&lt;/i&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;20. 개발자는&lt;b&gt; 업무 평가를 어떻게 받나요?&lt;/b&gt; 성취도나 기여도에 대한 평가가 있나요? 이에 대한 보너스도 있나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희 회사 같은 경우에는 프로젝트 참여에 대한 평가가 상대적으로 높습니다.&amp;nbsp;프로젝트를 진행할 때 프로젝트 영향에 따른 팀장 평가와 동료 평가를 합니다.&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;21.&lt;b&gt; 좋은 개발자는 어떤 사람&lt;/b&gt;이라고 생각하는지 코집사님의 의견이 궁금합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 생각하는 좋은 개발자는 개발 실력도 좋지만, &lt;b&gt;정말 좋은 협업을 할 수 있는 사람&lt;/b&gt;이 좋은 개발자가 아닐까 싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발을 하면서도 좋은 사수 분들은&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22. 이기적이지만 실력이 좋은 팀구성 vs 이타적이지만 실력이 부족한 팀 구성중 어느 쪽을 선호하시나요?&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23. &lt;b&gt;개발업무에 팀플레이&lt;/b&gt;가 필요한 이유가 궁급합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 분야의 개발은 잘 모르겠지만, 물류에 대한 개발은 &lt;b&gt;데이터의 플로우와 프로세스의 흐름이 굉장히 중요&lt;/b&gt;합니다. 예를 들어 A에 대한 작업이 있으면 A만 했다고 끝나는 것이 아닌 &lt;b&gt;A의 작업이 B, C 등의 다양한 작업에도 영향을 주기 때문&lt;/b&gt;에 다른 파트에서 하고 있는 사람들과 &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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24. 앞으로의 &lt;b&gt;커리어에 목표&lt;/b&gt;가 있나요? 5년후 10년후 어떤 개발자가 되고 싶으신가요?&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;25. 싸피 선배로써 후배 싸피인들이 얻어갔으면 하는 점, &lt;b&gt;가졌으면 하는 태도나 습관&lt;/b&gt;이 있다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 아직 1년밖에 되지 않은 개발자이지만, &lt;b&gt;시야를 제한해서 개발만 하는 것을 지양하면 더 좋은 서비스를 만들지 않을까란 생각을 하곤 합니다&lt;/b&gt;. 웹 개발자라고 해서, 정말 웹만 하는게 아니라 AI나 빅데이터 분석을 해주는 서비스를 웹에 올리는 등의 가치를 가질 수 있도록 다양한 기술에 대해 관심을 갖는 것도 좋다고 생각합니다.&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;개발자의 인재상은 예전부터 T자형 인재를 많이 선호하고 있습니다. 그렇기 때문에, 여러분들의 전공에 대한 지식도 쌓으면서 다른 분야의 지식도 쌓으면 좋겠습니다.&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;26. 학습하시면서 &lt;b&gt;유용하게 사용하신 책, 사이트, 학습 방식 등&lt;/b&gt;이 있다면 추천 부탁드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습을 하는데 가장 효율적인 것은 &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;손으로 직접 써가면서 손코딩을 해보기도 하고, 그냥 암기를 하기도 하고 등 이렇게 했는데도, 저에게 결국 잘 맞는건 블로그로 정리를 하면서 천천히 이해하는게 제일 베스트였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분들에게 맞는 학습 방식을 가장 먼저 찾아내고, 그 뒤로 SSAFY 교육을 하는게 가장 좋습니다.&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;저 같은 경우에는 회사에서 배치 관련 업무를 약 6개월 정도 했었는데, 이때 jojoldu님 블로그를 정말 많이 참고했습니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27. 추가적으로 &lt;b&gt;8기 교육생들에게 전하고 싶은 말&lt;/b&gt;이 있다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSAFY에서 시간을 어떻게 보내느냐에 따라 갭이 더 커지는 것 같습니다.&lt;br /&gt;저 같은 경우에도 SSAFY를 통해 블로그도 더 탄탄하게 만들었고, 지금 그 경험이 업무를 진행하는데 있어 기술적으로도 많은 도움을 받고 있습니다. 그렇기에, SSAFY를 하면서 효율적인 시간 분배로 손실 보는 것들이 없도록 했으면 좋겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SSAFY 8기 분들 화이팅입니다!&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;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;김경민 기자단 명함.png&quot; data-origin-width=&quot;3600&quot; data-origin-height=&quot;1960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctaolj/btrQDcwdzvZ/jKvQcc0J7EoklDPdseaeB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctaolj/btrQDcwdzvZ/jKvQcc0J7EoklDPdseaeB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctaolj/btrQDcwdzvZ/jKvQcc0J7EoklDPdseaeB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctaolj%2FbtrQDcwdzvZ%2FjKvQcc0J7EoklDPdseaeB1%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;600&quot; height=&quot;327&quot; data-filename=&quot;김경민 기자단 명함.png&quot; data-origin-width=&quot;3600&quot; data-origin-height=&quot;1960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SSAFY/SSAFYcial</category>
      <category>SSAFY</category>
      <category>SSAFYcial</category>
      <category>물류개발자</category>
      <category>싸피셜</category>
      <category>인터뷰</category>
      <category>코집사</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/317</guid>
      <comments>https://hei-jayden.tistory.com/317#entry317comment</comments>
      <pubDate>Tue, 8 Nov 2022 02:13:30 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #2636. 치즈</title>
      <link>https://hei-jayden.tistory.com/316</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&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;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 구하려는 것 : 치즈가 모두 녹아 없어지는 시간, 모두 녹기 한 시간 전에 남아있는 치즈조각
# 딥카피 연습: copy_arr = [arr[i][:] for i in range(len(arr))]

from collections import deque

dcol = [1, 0, -1, 0]
drow = [0, -1, 0, 1]


# melt() 치즈의 테두리 표시
def melt():
    visited = [[0] * R for _ in range(C)]
    temp_lst = []
    queue = deque()
    queue.append((0, 0))

    while queue:
        col, row = queue.popleft()
        for v in range(4):
            ncol = col + dcol[v]
            nrow = row + drow[v]
            if 0&amp;lt;=ncol&amp;lt;C and 0&amp;lt;=nrow&amp;lt;R:
                if arr[ncol][nrow] == 0 and visited[ncol][nrow] == 0:
                    visited[ncol][nrow] = 1
                    queue.append((ncol, nrow))
                elif arr[ncol][nrow] == 1:
                    arr[ncol][nrow] = -1
                    temp_lst.append((ncol, nrow))

    for c, r in temp_lst:
        arr[c][r] = 0

    ans_lst.append(len(temp_lst))
    return len(temp_lst)


C, R = map(int, input().split())    # C: 세로, R: 가로
arr = [list(map(int, input().split())) for _ in range(C)]
idx, residue = 0, 0xfff
ans_lst = []

while melt() &amp;gt; 0:
    melt()

for i in range(len(ans_lst)):
    if ans_lst[i] and residue &amp;gt; ans_lst[i]:
        residue = ans_lst[i]
        idx = i+1

print(idx)
print(residue)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;arr의 (0, 0) 지점은 x로 표시된 판의 틀이기 때문에 치즈가 있을 수 없다는 가정을 했다&lt;/li&gt;
&lt;li&gt;(0, 0) 지점으로부터 탐색을 했을 때 만나는 1의 위치가 녹을 예정인 치즈의 테두리가 될 것이다.&lt;/li&gt;
&lt;li&gt;치즈가 녹는 동작을 나타내는 melt() 함수를 몇번 실행시켜야 할지 고민하게 되었다.&lt;/li&gt;
&lt;li&gt;남아있는 치즈의 테두리 부분의 갯수가 0이 되기 전의 지점에서 정답에 필요한 요소를 찾았다&lt;br /&gt;idx : 치즈가 녹아서 없어지는데 걸리는 시간, residue 남아있는 치즈의 양&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2636&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2636&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667838123897&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2636번: 치즈&quot; data-og-description=&quot;아래 &amp;lt;그림 1&amp;gt;과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(&amp;lt;그림 1&amp;gt;에서 네모 칸에 X친 부분)에는 치즈가 놓&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2636&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2636&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUi98a/hyQvkF0Eo6/Xx4RIs2fP4GD4P6P2qtiW1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/bxDx1D/hyQttR7ORE/KsEkss6ngC6WzukJ8hkaU1/img.jpg?width=468&amp;amp;height=464&amp;amp;face=0_0_468_464,https://scrap.kakaocdn.net/dn/p9ww0/hyQtzSl69k/rknwyCXGj1dPzladZwUcG0/img.jpg?width=468&amp;amp;height=464&amp;amp;face=0_0_468_464&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2636&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2636&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUi98a/hyQvkF0Eo6/Xx4RIs2fP4GD4P6P2qtiW1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/bxDx1D/hyQttR7ORE/KsEkss6ngC6WzukJ8hkaU1/img.jpg?width=468&amp;amp;height=464&amp;amp;face=0_0_468_464,https://scrap.kakaocdn.net/dn/p9ww0/hyQtzSl69k/rknwyCXGj1dPzladZwUcG0/img.jpg?width=468&amp;amp;height=464&amp;amp;face=0_0_468_464');&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;2636번: 치즈&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;아래 &amp;lt;그림 1&amp;gt;과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(&amp;lt;그림 1&amp;gt;에서 네모 칸에 X친 부분)에는 치즈가 놓&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&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;/ul&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;</description>
      <category>Algorithm Study/Python</category>
      <category>2636</category>
      <category>goldIV</category>
      <category>백준</category>
      <category>치즈</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/316</guid>
      <comments>https://hei-jayden.tistory.com/316#entry316comment</comments>
      <pubDate>Tue, 8 Nov 2022 01:27:13 +0900</pubDate>
    </item>
    <item>
      <title>[백준 파이썬] #2146. 다리만들기</title>
      <link>https://hei-jayden.tistory.com/315</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀기 전 생각해보기 &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;간척 사업 아이디어 적용해보기&lt;/li&gt;
&lt;li&gt;중복해서 인식되는 지점을 어떻게 해결할 것인지&lt;/li&gt;
&lt;li&gt;메모리 초과 오류 발생 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;풀이 &lt;/h4&gt;
&lt;pre id=&quot;code_1657803602965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from collections import deque

dcol = [1, 0, -1, 0]
drow = [0, 1, 0, -1]


def divide_island():
    cnt = 1
    # 주어진 arr의 모든 부분 탐색 시도
    for col in range(N):
        for row in range(N):
            if arr[col][row] == 1:      # 어느 한 섬에 도달하면
                cnt += 1                # 몇 번째 섬인지 표시하기 위해 cnt 활용
                queue = deque()             # BFS 진행
                queue.append((col, row))
                checked[col][row] = 1

                while queue:
                    # 메모리 체크
                    # print(len(queue), queue)
                    # print(len(border_lst), border_lst)

                    for i in range(len(queue)):
                        col, row = queue.popleft()
                        arr[col][row] = cnt
                        flag = 0                    # 중복해서 border_lst에 들어가는 것을 방지하기 위한 체커

                        for v in range(4):
                            ncol = col+dcol[v]
                            nrow = row+drow[v]
                            if 0&amp;lt;=ncol&amp;lt;N and 0&amp;lt;=nrow&amp;lt;N:
                                if arr[ncol][nrow] and checked[ncol][nrow] == 0:
                                    arr[col][row] = cnt
                                    checked[ncol][nrow] = 1
                                    queue.append((ncol, nrow))

                                if arr[ncol][nrow] == 0:
                                    if flag &amp;gt; 0:
                                        continue
                                    border_lst.append((col, row))
                                    flag += 1


def expand():
    global answer

    queue = deque()
    queue.extend(border_lst)
    cnt = 0
    while queue:
        # 메모리 체크
        # print(queue)
        cnt += 1
        for i in range(len(queue)):
            col, row = queue.popleft()
            for v in range(4):
                ncol = col + dcol[v]
                nrow = row + drow[v]
                if 0&amp;lt;=ncol&amp;lt;N and 0&amp;lt;=nrow&amp;lt;N:
                    if arr[ncol][nrow] == 0 and visited[ncol][nrow] == 0:
                        arr[ncol][nrow] = arr[col][row]
                        visited[ncol][nrow] = cnt
                        checked[ncol][nrow] = 1
                        queue.append((ncol, nrow))

                    if arr[col][row] != arr[ncol][nrow]:
                        if visited[col][row] == 0 and visited[ncol][nrow]:
                            temp = visited[ncol][nrow]
                        elif visited[ncol][nrow] == 0 and visited[col][row]:
                            temp = visited[col][row]
                        else:
                            temp = visited[col][row] + visited[ncol][nrow]

                        if answer &amp;gt; temp:
                            answer = temp

N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
visited = [[0]*N for _ in range(N)]
checked = [[0]*N for _ in range(N)]
answer = 0xfff
border_lst = []
ans_lst = []


divide_island()
expand()


print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;핵심 정리 &lt;/h4&gt;
&lt;pre id=&quot;code_1657846453577&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1
print(len(queue), queue)      # 메모리 체크
print(len(border_lst), border_lst)

# 2
if arr[ncol][nrow] == 0:
    if flag &amp;gt; 0:
        continue
    border_lst.append((col, row))
    flag += 1&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;채점 과정중 46%였던가..? 에서 멈칫하더니 메모리초과 또는 시간초과 오류가 계속해서 발생했다.&lt;br /&gt;(반례 질문하시는 분들 중에서도 같은 위치에서 고민하시는 분들이 꽤 보였다)&lt;/li&gt;
&lt;li&gt;결과값도 잘 나오고 굳이 문제될 곳이 없는 것 같아 꽤나 고민을 길게 했었는데, #1번과 같이 queue의 변화와 border_lst를 찍어보고나서 중복되는 값이 삽입된다는 점을 발견했다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;해결을 위해 간단히 flag 변수를 이용하였고, flag 변수가 1이상일 경우, continue로 넘어가도록 설정했다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;링크 &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2146&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2146&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667659862555&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2146번: 다리 만들기&quot; data-og-description=&quot;여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2146&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2146&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b5DCgn/hyQsdobvDj/EbF72XsVx6IgqzVbbyPjNK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/cgNBKb/hyQseHoYYN/0xVREWQUeiNsD3FkfwRYvK/img.png?width=243&amp;amp;height=225&amp;amp;face=0_0_243_225,https://scrap.kakaocdn.net/dn/HVyM4/hyQr6Czt9K/gEQaRCug1GhpfR3i0p6qOk/img.png?width=247&amp;amp;height=220&amp;amp;face=0_0_247_220&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2146&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2146&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b5DCgn/hyQsdobvDj/EbF72XsVx6IgqzVbbyPjNK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/cgNBKb/hyQseHoYYN/0xVREWQUeiNsD3FkfwRYvK/img.png?width=243&amp;amp;height=225&amp;amp;face=0_0_243_225,https://scrap.kakaocdn.net/dn/HVyM4/hyQr6Czt9K/gEQaRCug1GhpfR3i0p6qOk/img.png?width=247&amp;amp;height=220&amp;amp;face=0_0_247_220');&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;2146번: 다리 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;후기  &lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단순하게(or 무식하게) 접근하는 방법으로도 풀린다고 한다. &lt;br /&gt;그렇지만 시간이 꽤 나온다고 하니 간척사업 아이디어를 배울 수 있었단 점에서&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;메모리 초과를 겪는다면, stack이나 queue를 print 해서 살펴보도록 하자&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;801&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbXStM/btrQsFLsSIo/PKs1hLK02qJEpHPch05JN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbXStM/btrQsFLsSIo/PKs1hLK02qJEpHPch05JN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbXStM/btrQsFLsSIo/PKs1hLK02qJEpHPch05JN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbXStM%2FbtrQsFLsSIo%2FPKs1hLK02qJEpHPch05JN1%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;587&quot; height=&quot;394&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;801&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm Study/Python</category>
      <category>2146</category>
      <category>메모리초과</category>
      <category>백준</category>
      <category>파이썬</category>
      <author>RMRM_</author>
      <guid isPermaLink="true">https://hei-jayden.tistory.com/315</guid>
      <comments>https://hei-jayden.tistory.com/315#entry315comment</comments>
      <pubDate>Sun, 6 Nov 2022 00:46:55 +0900</pubDate>
    </item>
  </channel>
</rss>