<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>KIM's IT세상</title>
    <link>https://itworld38.tistory.com/</link>
    <description>IT 개발자가 되기 위해 공부한 내용을 정리하는 블로그</description>
    <language>ko</language>
    <pubDate>Thu, 13 Aug 2026 21:31:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>데분 데분</managingEditor>
    <image>
      <title>KIM's IT세상</title>
      <url>https://tistory1.daumcdn.net/tistory/4311431/attach/194e18f072484cf3bfc9f44386164c36</url>
      <link>https://itworld38.tistory.com</link>
    </image>
    <item>
      <title>자바스크립트 개념정리</title>
      <link>https://itworld38.tistory.com/14</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;자바스크립트(JS)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정리에 들어가기에 앞서 자바스크립트에 대한 생각을 정리하려고 한다. 편의상 JS라고 하겠다. 수많은 프로그래밍 언어가 있지만, 그중 가장 많이 사용되는 언어가 JS다. 그 이유는 유일한 프론트엔드 언어로 대체가능한 언어가 없기 때문이다. 모든 브라우저는 JS로 돌아간다고 보면된다.&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;웹의 발전 = JS의 발전이라고 할 수 있다. 그렇기에 JS는 눈부신 속도로 발전하고 있다. 예전에 봤을땐 React가 분명 최신 기술이었는데 어느새 Vue가 등장하고...Typescript... 등등 빠른 속도로 기술이 개발중이다. &lt;span style=&quot;color: #333333;&quot;&gt;내가 React를 제대로 공부하고 있을 즈음에는 또 다른 강력한 프레임워크가 나올것같다...&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;JS는 커뮤니티가 활발하고 하나의 언어이기에 어떤 조직에서도 소통이 가능하다는 장점이 있다. 이러한 점에서 JS는 가히 최고의 프로그래밍 언어라고 생각한다. &lt;span style=&quot;color: #333333;&quot;&gt;사실 JS가 발전하면서 프론트와 백의 경계가 모호해지고 있다. JS만으로 풀스텍을 커버할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;JS 관련 기술소개&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3대장 : React, vue, angular&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;그외 : &lt;span&gt;ES5&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ES6&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ES2015&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CoffeeScript&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TypeScript&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ClojureScript&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;,Backbone, Ember, jQuery 등등&lt;/span&gt;&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;h4 id=&quot;dca6&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Angular는 모든 것이 준비된 주방&lt;/b&gt;으로 우리의 Web App에 필요한 모든 tools와 재료들을 가지고 있다. 만약 수 많은 개발자들이 일하는 거대한 회사라면, 나는 모든 개발자들이 동일한 패턴으로 일을 하는 Angular를 좋아한다.&lt;/h4&gt;
&lt;h4 id=&quot;eb2b&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;React는 oven (오븐) 이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;케이크를 굽는 과정에서 분명히 추가적인 tools가 필요하지만 이것은 필요한 것을 만드는 과정에서 tools를 선택하는 유연함을 줄 수 있다. 내가 기술적인 회사에서 능력있는 몇몇 senior 개발자들과 함께 일을 하고 있다면 React는 좋은 선택이다.&lt;/h4&gt;
&lt;h4 id=&quot;1136&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Vue&lt;/b&gt;는 쉽고 효율적인 방법으로 요리를 정말 빠르게 만들 수 있다. 만약 startup 회사에서 새로 생긴 팀에서 엄격한 deadline을 가지고 있다면 나는 VueJS를 좋아할 것이다.&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;바닐라 JS&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;자바스크립트를 잘 하기 위해서는 바닐라JS가 가장 중요하다고 한다. 위에 소개한것처럼 강력한 기술들이 많은데 왜 바닐라JS를 배워야하고 중요하다고 하는걸까?&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;라이브러리나 프레임워크는 화장에 비교할 수 있다. 즉, 바닐라 JS가 밑바탕이고 나머지는 이를 꾸미는 도구나 수단에 불과하다. 그렇기 때문에 바닐라 JS에 대한 깊은 공부가 필요하다. 또 다른 예로 사진을 설명할 수 있다. 당신이 사진작가라면 바닐라 JS는 사진에 대한 이해와 찍는 기술이라고 할 수 있다. 즉, 바닐라 JS를 잘 하지 못하고 React나Typescript 등을 잘하는 것은 사진의 색감이나 구도 등에 대한 베이스는 없는데, 포토샵을 잘하는 것과 같다.&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;이러한 이유로 바닐라 JS는 JS의 근간이라고 얘기하고 싶다.&lt;/h4&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;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;JS의 기본 문법과 핵심&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;JS문은 HTML의 &amp;lt;body&amp;gt;안에, 그리고 마지막에 추가하는 것이 좋다. &lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;console.log()가 JS에서 출력코드다.&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;좋은 코드와 나쁜 코드&lt;/b&gt;&lt;/u&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;JS는 문법의 허용범위가 넓다. 이런점에서 Python과 상당히 유사한 부분이 있다. 다만, 자칫하면 나쁜코드를 계속해서 사용하기 쉽다. 다음은 나쁜 코드와 올바른 코드의 예시다.&amp;nbsp;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1606648093265&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//나쁜 코드
a = 221;
b = a-5;
a = 4;
console.log(b,a);

//올바른 코드
let a = 221;
let b = a - 5;
a = 4;
console.log(b,a);&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;둘 다 [216 4]가 출력되어 결과값은 동일하다.&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;다만, 모든 언어에 약속이 있듯이 JS에서도 변수를 선언할 때 let이나 const를 붙여준다. 이렇게 간단한 경우에는 문제가 없지만, 코드가 길어질 때는 의도와 다르게 처리될 가능성이 농후하다.&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 JS를 공부해본 사람이라면 의문이 생길 수도 있다. 그냥 var를 사용하면 되는 것이 아닌가? 라는 생각이 들 것이다. 하지만 놀랍게도 var는 구식문법이고 let과 const가 최근에 나온 문법이다.&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;let의 특징은 언제든지 값을 바꿀 수 있고 반면 const는 constant(상수)의 약자로 값을 고정시킨다. 즉, 이전까지는 어떤 구분없이 var를 사용했다면 이제는 상황에 따라 let과 const를 유용하게 사용할 수 있게 되었다. 가령 다른 사람과 협업을 할때 다른 사람이 바꿀수있게 하려면 let을 쓰고, 허용하지 않으려면 const를 쓰면된다. 웬만하면 const를 쓰길 추천!&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;변수명&amp;nbsp;작성규칙&lt;/b&gt; &lt;/u&gt;&lt;br /&gt;camal case에 따른다. camal case란&amp;nbsp;&lt;br /&gt;변수명을 언제나 소문자로 시작해서, 변수명 중간에 스페이스가 필요하면 스페이스 대신 대문자로 대체하는 일종의 rule이다.&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;Array와 Object&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Array&lt;/b&gt;는 파이썬의 list와 동일한 개념이고 문법도 비슷하다. [ ] 사용&lt;/h4&gt;
&lt;pre id=&quot;code_1606649276126&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;color = [&quot;red&quot;,&quot;blue&quot;,&quot;green&quot;,&quot;pink&quot;,&quot;yellow&quot;]
console.log(color[2])&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과값 : &quot;green&quot; 출력&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Object&lt;/b&gt;는 파이썬의 Dictionary와 동일한 개념이고 문법도 비슷하다. Array와 달리 각 Value에 이름을 부여할 수 있다. { } 사용&lt;/h4&gt;
&lt;pre id=&quot;code_1606649384797&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;info = {
  name : &quot;kim&quot;, favorite_color : &quot;blue&quot;, age : 20
}
console.log(info.name)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과값 : &quot;kim&quot; 출력&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;함수생성&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;function 함수명(arg1,arg2 ... ){~~~~}&lt;/h4&gt;
&lt;p&gt;함수의 예...출력문으로 사용하는 console.log()에서 log가 바로 함수다!! console을 출력해보았다.&lt;/p&gt;
&lt;pre id=&quot;code_1606649536031&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(console)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;354&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/25zG0/btqOuHsbizS/KKiH0wtdIIxZJw5MjjkxD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/25zG0/btqOuHsbizS/KKiH0wtdIIxZJw5MjjkxD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/25zG0/btqOuHsbizS/KKiH0wtdIIxZJw5MjjkxD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F25zG0%2FbtqOuHsbizS%2FKKiH0wtdIIxZJw5MjjkxD0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;354&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;이처럼 console이라는 Object안에 log를 포함한 다양한 함수(Function)이 들어있음을 확인할 수 있다. 자바스크립트가 어떤 식으로 만들어지고 구성되어 있는지 알 수 있는 부분이다.&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;b&gt;`(백틱)&amp;nbsp;활용&lt;/b&gt; &lt;/u&gt;&lt;br /&gt;콤마 없이 $와 {}로 출력가능&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;`(백틱)을 사용하지 않을경우&lt;/h4&gt;
&lt;pre id=&quot;code_1606649935440&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function sayhello(name,age){
	return &quot;hello &quot; + name + &quot; you are &quot; + age + &quot; years old&quot; ;
}

const greet = sayhello(&quot;kim&quot;,20)
console.log(greet)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;`(백틱)을 사용할 경우&lt;/h4&gt;
&lt;pre id=&quot;code_1606649046602&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function sayhello(name,age){
	return `hello ${name} you are ${age} years old` ;
}

const greet = sayhello(&quot;kim&quot;,20)
console.log(greet)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/14</guid>
      <comments>https://itworld38.tistory.com/14#entry14comment</comments>
      <pubDate>Sun, 29 Nov 2020 20:41:05 +0900</pubDate>
    </item>
    <item>
      <title>2. Web개발의 이해 - 웹서버 vs WAS</title>
      <link>https://itworld38.tistory.com/13</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; 웹서버&lt;/b&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;웹 서버의 가장 중요한 기능은 클라이언트(Client)가 요청하는 HTML 문서나 각종 리소스(Resource)를 전달하는 것.&lt;/li&gt;
&lt;li&gt;웹 브라우저나 웹 크롤러가 요청하는 리소스는 컴퓨터에 저장된 정적인 데이터이거나 동적인 결과가 될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;웹 서버의 시장점유율(2019년 기준)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;564&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lPYOl/btqOhPI9E9a/5AGYjFScTfrrXVjlhuJgb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lPYOl/btqOhPI9E9a/5AGYjFScTfrrXVjlhuJgb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lPYOl/btqOhPI9E9a/5AGYjFScTfrrXVjlhuJgb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlPYOl%2FbtqOhPI9E9a%2F5AGYjFScTfrrXVjlhuJgb0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;564&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기서 주목할 것은 nginx이다. 2008년부터 꾸준한 성장을 보이던 nginx가 2019년부터는 Apache의 점유율을 추월했다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;※&lt;/span&gt;생각해보기※&lt;/b&gt;&lt;br /&gt;&lt;b&gt;네이버나 구글에서 검색어가 포함된 웹페이지를 어떻게 알 수 있을까?&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;웹 크롤러로 긁어온 데이터를 DB에 저장한다 -&amp;gt; 클라이언트 요청값(검색값)에 맞게 DB에서 가져와 &lt;/b&gt;&lt;br /&gt;&lt;b&gt;해당사이트의&amp;nbsp;URL과&amp;nbsp;랜더링을&amp;nbsp;화면에&amp;nbsp;표현한다.&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;*구글의 경우 : 웹 크롤러가 주소별로 웹 크롤링( 페이지의 리소스가 업데이트되는 주기가 빨라서 자주 이터레이팅함 )&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;rArr;&lt;/span&gt;&amp;nbsp;리소스들을&amp;nbsp;주소별로&amp;nbsp;검토&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp;&amp;rArr;&amp;nbsp;&lt;/span&gt;검색어가&amp;nbsp;언급된&amp;nbsp;횟수&amp;nbsp;+&amp;nbsp;page&amp;nbsp;rank&amp;nbsp;알고리즘을&amp;nbsp;사용해&amp;nbsp;리소스기준&amp;nbsp;a&amp;nbsp;tag&amp;nbsp;href&amp;nbsp;=&amp;nbsp;&quot;&quot;&amp;nbsp;를&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다른&amp;nbsp;사이트에서&amp;nbsp;많이&amp;nbsp;받고&amp;nbsp;영향력있는&amp;nbsp;웹사이트로&amp;nbsp;부터&amp;nbsp;받은&amp;nbsp;인기를&amp;nbsp;기준으로&amp;nbsp;랭크&amp;nbsp;매김 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(기준은&amp;nbsp;인더스트리적&amp;nbsp;필요에&amp;nbsp;따라&amp;nbsp;계속적으로&amp;nbsp;바뀐다고&amp;nbsp;함)&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;rArr;&amp;nbsp;&lt;/span&gt;해당&amp;nbsp;쿼리가&amp;nbsp;발생시&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;rArr;&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;위 랭크에 맞게 링크와 리소스 일부를 렌더링 *&lt;/span&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;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;WAS&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;WAS(Web Application Server)는 &lt;span style=&quot;color: #333333;&quot;&gt;일종의 미들웨어로 웹 클라이언트(보통 웹 브라우저)의 요청 중 웹 애플리케이션이 동작하도록 지원하는 목적. &lt;/span&gt;웹의 요구사항이 다양해지고 점점 복잡해졌고 이를 위해 생긴 개념&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;미들웨어(Middle Ware)&lt;/span&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;비즈니스 로직을 클라이언트와 DBMS사이의 미들웨어 서버에서 동작하도록 함으로써 클라이언트는 입력과 출력만 담당&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-factor=&quot;image&quot; data-width=&quot;985&quot; data-height=&quot;483&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;591&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxa4DX/btqOdaA3m8K/KyzhKplFBYP7JbufhtjOc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxa4DX/btqOdaA3m8K/KyzhKplFBYP7JbufhtjOc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxa4DX/btqOdaA3m8K/KyzhKplFBYP7JbufhtjOc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxa4DX%2FbtqOdaA3m8K%2FKyzhKplFBYP7JbufhtjOc1%2Fimg.png&quot; data-factor=&quot;image&quot; data-width=&quot;985&quot; data-height=&quot;483&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;591&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트는 복잡한 로직이 사라지고 단순히 화면에 그 결과만 보여주면 되기에 크기가&amp;nbsp;매우&amp;nbsp;작아짐 &lt;br /&gt;프로그램 로직이 변경되어도 모든 클라이언트를 다시 배포할 필요없다는 장점을 가짐 (미들웨어만 변경하만 된다) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;WAS의 주요기능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램 실행 환경과 데이터베이스 접속 기능을 제공한다. &lt;br /&gt;여러개의&amp;nbsp;트랜잭션&amp;nbsp;관리 &lt;br /&gt;업무를&amp;nbsp;처리하는&amp;nbsp;비즈니스&amp;nbsp;로직&amp;nbsp;수행 &lt;br /&gt;&lt;br /&gt;웹서버의&amp;nbsp;기능도&amp;nbsp;기본적으로&amp;nbsp;제공하기에&amp;nbsp;톰캣이라는&amp;nbsp;WAS만&amp;nbsp;하나&amp;nbsp;설치하고&amp;nbsp;이용이&amp;nbsp;가능 &lt;br /&gt;Apache같은 웹 서버를 설치하지 않아도 된다 .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;규모가 커질수록 웹 서버와 WAS를 분리한다(주로 장애 처리 극복을 위해서)&lt;/u&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;WAS로만 정적, 동적 컨텐츠를 모두 처리할 수 있고 정적 컨텐츠 처리에는 웹서버와 &lt;br /&gt;큰 성능 차이가 없다. 그럼에도 분리해서 사용하는 이유는?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size16&quot;&gt;웹 서버는 상대적으로 WAS보다 간단한 구조&lt;/li&gt;
&lt;li data-ke-size=&quot;size16&quot;&gt;따라서 WAS 자체에 문제가 생겨 재시작해야할 경우, 앞단의 웹 서버가 있으면 해당 WAS를 이용하지 못하도록 하고 WAS를 재시작하면 해당 웹을 사용하는 사람은 WAS의&amp;nbsp;장애를&amp;nbsp;인지하지&amp;nbsp;못하고&amp;nbsp;이용할&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;li data-ke-size=&quot;size16&quot;&gt;대용량 웹 어플리케이션의 경우 무중단으로 운영하기 위해서 상당히 중요한 기능이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;웹 서버 vs WAS&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WAS도 보통 자체적으로 웹 서버 기능을 내장하고 있다.&lt;/li&gt;
&lt;li&gt;현재는 WAS가 가지고 있는 웹 서버도 정적인 콘텐츠를 처리하는 데 있어서 성능상 큰 차이가 없다.&lt;/li&gt;
&lt;li&gt;규모가 커질수록 웹 서버와 WAS를 분리&lt;/li&gt;
&lt;li&gt;자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 웹서버와 WAS를 대체로 분리&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>웹 프로그래밍/웹 프로그래밍 개념 정리</category>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/13</guid>
      <comments>https://itworld38.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 25 Nov 2020 15:21:23 +0900</pubDate>
    </item>
    <item>
      <title>1. Web개발의 이해 - FE/BE</title>
      <link>https://itworld38.tistory.com/12</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;웹(Web)&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;월드 와이드 웹(World Wide Web)은 인터넷상으로 정보를 공유하는 공간을 의미한다.&lt;/p&gt;
&lt;p&gt;흔히 알고 있는 WWW가 이것의 줄임말이고 간단히 말해 웹(Web)이라고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;웹은 인터넷을 구성하는 다양한 서버 중의 하나이다.&lt;/p&gt;
&lt;p&gt;서버는 각각의 포트(port)를 가진다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;445&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7nynN/btqN9MAmP5p/FSYKCcRZPG0Iff7BQF3Hik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7nynN/btqN9MAmP5p/FSYKCcRZPG0Iff7BQF3Hik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7nynN/btqN9MAmP5p/FSYKCcRZPG0Iff7BQF3Hik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7nynN%2FbtqN9MAmP5p%2FFSYKCcRZPG0Iff7BQF3Hik%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;445&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위의 그림처럼 웹은 80이라는 포트번호를 가지고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;웹의 작동 원리를 알기 위해서는 HTTP 개념을 알아야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;HTTP&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;HTTP란 Hyper text transfer protocal의 약자로 서버와 클라이언트가 인터넷상에서 데이터를 주고 받기 위한 프로토콜이다. 즉, 문서뿐만 아니라 영상, 오디오 등 종류를 가리지 않고 전송이 가능하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로토콜은 일종의 규정이라고 생각하면 된다. HTTP의 작동방식은 서버/클라이언트 방식을 따른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;479&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SljZn/btqObYHluD5/oAqXHUcjy2aZD6c7UKTbuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SljZn/btqObYHluD5/oAqXHUcjy2aZD6c7UKTbuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SljZn/btqObYHluD5/oAqXHUcjy2aZD6c7UKTbuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSljZn%2FbtqObYHluD5%2FoAqXHUcjy2aZD6c7UKTbuK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;479&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그림처럼 클라이언트가 서버에 먼저 요청을 하면 서버에서 응답을 하는 방식으로 작동하는 것이 클라이언트/서버 방식이다.&lt;/p&gt;
&lt;p&gt;여기서 HTTP의 중요한 특징은 클라이언트가 요청하면 서버는 응답을 하고 연결을 끊는다. 이를 stateless라고 부르는데 stateless로 간단하게 HTTP의 장단점을 알아보면 이해가 쉬울 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HTTP의 장점 : stateless는 계속 연결 상태를 유지하는 것이 아니기에 클라이언트와 서버 간 최대 연결 개수보다 많은 요청과 응답 처리가능. 즉, 불특정다수로 하는 서비스에 적합.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;*윈도우즈(Windows)는 최대 공유할 수 있는 숫자가 10개이다. 10명의 접속자 중 접속을 끊는 사람이 있어야&amp;nbsp;새로운 클라이언트가 접속할 수 있다.*&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;HTTP의 단점 : 연결을 끊어버리기 때문에, 클라이언트의 이전 상황을 모른다. 이러한 단점을 보완하고자 나타난 기술이 지금 우리가 잘 알고 있는 쿠키(Cookie)!!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음은 웹의 핵심 개념인 HTTP로 웹의 동작원리를 살핀 그림이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;582&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgAhq4/btqN8X3kvXQ/WQVvIBB5cUVojuGCsAyLzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgAhq4/btqN8X3kvXQ/WQVvIBB5cUVojuGCsAyLzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgAhq4/btqN8X3kvXQ/WQVvIBB5cUVojuGCsAyLzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgAhq4%2FbtqN8X3kvXQ%2FWQVvIBB5cUVojuGCsAyLzK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;582&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;헤더, 빈 줄, 바디 3가지로 나뉜다.&lt;/li&gt;
&lt;li&gt;요청 메서드 : GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식이 온다.&lt;/li&gt;
&lt;li&gt;요청 URI : 요청하는 자원의 위치를 명시한다.&lt;/li&gt;
&lt;li&gt;HTTP 프로토콜 버전 : 웹 브라우저가 사용하는 프로토콜 버전이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;첫번째 줄의 요청메소드는 서버에게 요청의 종류를 알려주기 위해서 사용됩니다.&lt;/p&gt;
&lt;p&gt;각각의 메소드 이름은 다음과 같은 의미를 가집니다.&lt;/p&gt;
&lt;p&gt;참고로 최초의 웹 서버는 GET방식만 지원해줬습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GET : 정보를 요청하기 위해서 사용한다. (SELECT)&lt;/li&gt;
&lt;li&gt;POST : 정보를 밀어넣기 위해서 사용한다. (INSERT)&lt;/li&gt;
&lt;li&gt;PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)&lt;/li&gt;
&lt;li&gt;DELETE : 정보를 삭제하기 위해서 사용한다. (DELETE)&lt;/li&gt;
&lt;li&gt;HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해서 사용한다.&lt;/li&gt;
&lt;li&gt;OPTIONS : 웹서버가 지원하는 메서드의 종류를 요청한다.&lt;/li&gt;
&lt;li&gt;TRACE : 클라이언트의 요청을 그대로 반환한다. 예컨데 echo 서비스로 서버 상태를 확인하기 위한 목적으로 주로 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;URL&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;URL(Uniform Resource Location) : 인터넷 상의 자원의 위치를 나타내는 역할&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;551&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nMSuR/btqOcRVzCXn/K9myrBHZ1xpWdK4k5sXeB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nMSuR/btqOcRVzCXn/K9myrBHZ1xpWdK4k5sXeB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nMSuR/btqOcRVzCXn/K9myrBHZ1xpWdK4k5sXeB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnMSuR%2FbtqOcRVzCXn%2FK9myrBHZ1xpWdK4k5sXeB0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;551&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;크게 3부분으로 나누어진다.&lt;/p&gt;
&lt;p&gt;첫째, 프로토콜의 종류&lt;/p&gt;
&lt;p&gt;둘째, 자원이 있는 서버의 IP주소 or 도메인 주소 or 포트번호&lt;/p&gt;
&lt;p&gt;셋째, 자원의 위치&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;IP와 Port의 개념 쉽게 이해해보기&lt;/h4&gt;
&lt;p&gt;우리는 각자 집이라는 공간에서 살고 있다. 이때,&lt;/p&gt;
&lt;p&gt;IP는 집 주소&lt;/p&gt;
&lt;p&gt;Port는 집에 있는 각각의 방&lt;/p&gt;
&lt;p&gt;로 생각하면 된다.&lt;/p&gt;
&lt;p&gt;즉, 하나의 물리적 컴퓨터에는 여러 개의 서버가 동작할 수 있는데 각각의 서버는 포트값이 달라야한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;생각해보기&lt;/h4&gt;
&lt;p&gt;HTTP와 HTTP뒤에 S가 붙은 HTTPS는 어떤 차이가 있을까?&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;HTTPS(Hyper text transfer protocal over secure&amp;nbsp; socket layer)는 HTTP와 달리 서버와 클라이언트 간 주고받는 데이터를 암호화하여 처리함. 즉, HTTP보다 보안이 강화된 버전이라고 보면 된다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;브라우저(Browser)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;Browser : &lt;span style=&quot;color: #333333;&quot;&gt;월드와이드웹(WWW)에서 정보를 검색, 표현하고 탐색하기 위한 소프트웨어&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버에서 전송한 데이터(HTML과 같은)가 클라이언트에 도착해야 할 곳이 Browser이다.&lt;br /&gt;Browser에는 데이터를 해석해주는 파서와 데이터를 화면에 표현해주는 렌더링엔진이 포함되어 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;랜더링&amp;nbsp;:&amp;nbsp;브라우저의&amp;nbsp;내용들을&amp;nbsp;하나로&amp;nbsp;합쳐서&amp;nbsp;보여주는&amp;nbsp;작업&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;렌더링엔진 종류 : Firefox의&amp;nbsp; Gecko, Safari의 WebKit, Chrome과 Opera의 Blink 등&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;*크롬의 크로미움은 V8 + Blink을 포함한 구글 브라우저 오픈소스 애플리케이션으로 Blink -&amp;gt; 크로미움으로 바뀐 것이 아님. 크로미움은 여전히 렌더링엔진으로 Blink사용*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;HTML은 대게 구조화된 정보를 가지고 있기에 트리형태로 가지게된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;496&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blgCMh/btqN9N7hp0k/BJOwS4YkvgKpE6xQ2lyKeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blgCMh/btqN9N7hp0k/BJOwS4YkvgKpE6xQ2lyKeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blgCMh/btqN9N7hp0k/BJOwS4YkvgKpE6xQ2lyKeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblgCMh%2FbtqN9N7hp0k%2FBJOwS4YkvgKpE6xQ2lyKeK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;496&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림은 WebKit의 mainflow&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;우선 html, css파일을 파싱한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;파싱 : 문자 단위로 하나하나 해석을 해서 담긴 의미들을 파악하고 그것들을 어떤 데이터 객체로 구조화 시키는것.&lt;/span&gt;&lt;br /&gt;Render Tree는 HTML의 변환된 파일인 DOM Tree와 CSS의 변환된 파일인 CSS Tree가 합쳐진 것.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹 프로그래밍/웹 프로그래밍 개념 정리</category>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/12</guid>
      <comments>https://itworld38.tistory.com/12#entry12comment</comments>
      <pubDate>Wed, 25 Nov 2020 09:38:45 +0900</pubDate>
    </item>
    <item>
      <title>[웹 프로그래밍 풀스텍과정] 웹 프로그래밍 기초 학습 목표</title>
      <link>https://itworld38.tistory.com/11</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 18pt; color: #ee2323;&quot;&gt;&lt;b&gt;2020.11.23 부스트코스 시작!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #008000;&quot;&gt;학습 목표&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;웹에 대한 기본이해를 한다.&lt;/li&gt;
&lt;li&gt;웹클라이언트와 웹백엔드의 역할을 안다.&lt;/li&gt;
&lt;li&gt;HTML 구조화 설계를 할 수 있다&lt;/li&gt;
&lt;li&gt;CSS 기본 스타일을 꾸밀 수 있다.&lt;/li&gt;
&lt;li&gt;JAVA기반의 웹 백엔드 환경을 구성할 수 있다.&lt;/li&gt;
&lt;li&gt;서블릿을 이해하고 기본 구성을 할 수 있다&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;기본 cs지식이 얕기 때문에 개념부터 잘 정리하면서 천천히 나아갈 생각이다.&lt;/p&gt;
&lt;p&gt;HTML과 CSS는 어느 정도 알고 있기때문에 쉽게 넘어갈것같지만, JAVA와 JAVASCRIPT는 따로 공부를 병행해야 할 것 같다.&lt;/p&gt;
&lt;p&gt;JAVA 입문은 '자바의 정석'을 추천받아서 이걸로 하려고 한다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=oJlCC1DutbA&amp;amp;list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.youtube.com/watch?v=oJlCC1DutbA&amp;amp;list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=oJlCC1DutbA&amp;amp;list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cGzIrz/hyIkAEBrNZ/HUARZJxPy1pPrwkELRRLq0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360&quot; data-video-width=&quot;480&quot; data-video-height=&quot;360&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/oJlCC1DutbA&quot; width=&quot;480&quot; height=&quot;360&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&quot;자바의 정석&quot;이라는 책을 토대로 유튜브 강의를 진행하는 방식이다.&lt;/p&gt;
&lt;p&gt;웹 앱 개발 챕터부터 자바 지식이 필요할 것으로 보이는데 그때가서 시작할 예정이다.&lt;/p&gt;</description>
      <category>웹 프로그래밍/웹 프로그래밍 개념 정리</category>
      <category>부스트코스 #웹 프로그래밍 #JAVA #풀스텍</category>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/11</guid>
      <comments>https://itworld38.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 23 Nov 2020 23:54:30 +0900</pubDate>
    </item>
    <item>
      <title>[백준]DFS와 BFS</title>
      <link>https://itworld38.tistory.com/10</link>
      <description>&lt;h2&gt;문제&lt;/h2&gt;
&lt;p&gt;그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다.&amp;nbsp;정점 번호는 1번부터 N번까지이다.&lt;/p&gt;
&lt;h2&gt;입력&lt;/h2&gt;
&lt;p&gt;첫째 줄에 정점의 개수 N(1 &amp;le; N &amp;le; 1,000), 간선의 개수 M(1 &amp;le; M &amp;le; 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.&lt;/p&gt;
&lt;h2&gt;출력&lt;/h2&gt;
&lt;p&gt;첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.&lt;/p&gt;
&lt;h2&gt;예제 입력&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;4 5 1&lt;/p&gt;
&lt;p&gt;1 2&lt;/p&gt;
&lt;p&gt;1 3&lt;/p&gt;
&lt;p&gt;1 4&lt;/p&gt;
&lt;p&gt;2 4&lt;/p&gt;
&lt;p&gt;3 4&lt;/p&gt;
&lt;h2&gt;예제 출력&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;1 2 4 3&lt;/p&gt;
&lt;p&gt;1 2 3 4&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;나의 코드&lt;/h2&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;def&lt;/span&gt;&amp;nbsp;dfs(v):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(v,&amp;nbsp;end&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'&amp;nbsp;'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visit[v]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;n&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;visit[i]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;and&lt;/span&gt;&amp;nbsp;s[v][i]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;dfs(i)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;def&lt;/span&gt;&amp;nbsp;bfs(v):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;queue&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[v]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visit[v]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;while&lt;/span&gt;(queue):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;queue[&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(v,&amp;nbsp;end&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ffd500;&quot;&gt;'&amp;nbsp;'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;del&lt;/span&gt;&amp;nbsp;queue[&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;n&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;visit[i]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;and&lt;/span&gt;&amp;nbsp;s[v][i]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;queue.append(i)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;visit[i]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;n,&amp;nbsp;m,&amp;nbsp;v&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;map(&lt;span style=&quot;color: #4be6fa;&quot;&gt;int&lt;/span&gt;,&amp;nbsp;input().split())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;s&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[[&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;(n&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;)&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(n&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;)]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;visit&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(n&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;)]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(m):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x,&amp;nbsp;y&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;map(&lt;span style=&quot;color: #4be6fa;&quot;&gt;int&lt;/span&gt;,&amp;nbsp;input().split())&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s[x][y]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s[y][x]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;dfs(v)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;bfs(v)&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p&gt;각각 dfs와 bfs를 구현하는 것보다 동시에 출력하는 과정에서 애를 먹었다. dfs 처리 후 visit값을 초기화 해주는 것이 필요함&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(m):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x,&amp;nbsp;y&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;map(&lt;span style=&quot;color: #4be6fa;&quot;&gt;int&lt;/span&gt;,&amp;nbsp;input().split())&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s[x][y]&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s[y][x]&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 코드에서 s[x][y] = 1, s[y][x]를 해줌으로써 입력값에 해당하는 노드를 방문처리하는 것&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;n&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;):&lt;/span&gt;&lt;/p&gt;
&lt;p&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;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;visit[i]&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;and&lt;/span&gt;&amp;nbsp;s[v][i]&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;:&lt;/p&gt;
&lt;p&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;queue.append(i)&lt;/p&gt;
&lt;p&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;visit[i]&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;bfs 함수 정의 부분의 코드&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞에 dfs 작업 때문에 0과 1의 의미가 바뀜. 0일때가 방문처리한 상태고 1일때가 미방문 상태다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;즉, 방문하지 않았고 v랑 인접해있는 경우 해당 노드를 queue에 전부 담는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Baekjoon</category>
      <category>백준 #DFS와 BFS #1260 #파이썬</category>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/10</guid>
      <comments>https://itworld38.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 2 Nov 2020 20:02:41 +0900</pubDate>
    </item>
    <item>
      <title>[백준]숫자판 점프(DFS)</title>
      <link>https://itworld38.tistory.com/9</link>
      <description>&lt;h2&gt;문제&lt;/h2&gt;
&lt;p&gt;5&amp;times;5 크기의 숫자판이 있다. 각각의 칸에는 숫자(digit, 0부터 9까지)가 적혀 있다. 이 숫자판의 임의의 위치에서 시작해서, 인접해 있는 네 방향으로 다섯 번 이동하면서, 각 칸에 적혀있는 숫자를 차례로 붙이면 6자리의 수가 된다. 이동을 할 때에는 한 번 거쳤던 칸을 다시 거쳐도 되며, 0으로 시작하는 000123과 같은 수로 만들 수 있다.&lt;/p&gt;
&lt;p&gt;숫자판이 주어졌을 때, 만들 수 있는 서로 다른 여섯 자리의 수들의 개수를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;h2&gt;입력&lt;/h2&gt;
&lt;p&gt;다섯 개의 줄에 다섯 개의 정수로 숫자판이 주어진다.&lt;/p&gt;
&lt;h2&gt;출력&lt;/h2&gt;
&lt;p&gt;첫째 줄에 만들 수 있는 수들의 개수를 출력한다.&lt;/p&gt;
&lt;h2&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;p&gt;1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1&lt;/p&gt;
&lt;h2&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;p&gt;15&lt;/p&gt;
&lt;h2&gt;힌트&lt;/h2&gt;
&lt;p&gt;111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;나의 코드&lt;/h2&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;def&lt;/span&gt;&amp;nbsp;dfs(x,y,number)&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;len&lt;/span&gt;(number)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;6&lt;/span&gt;&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;number&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;not&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;result&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;result.append(number)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dx&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dy&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;k&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #c10aff;&quot;&gt;4&lt;/span&gt;)&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ddx&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;x&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt; dx[k] #1칸 이동한 x 좌표&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ddy&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;y&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt; dy[k] #1칸 이동한 y 좌표&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;ddx&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;and&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;ddy&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;5&lt;/span&gt; : # 범위 벗어나지 않을 때 이동한 좌표에서 다시 dfs 수행&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;dfs(ddx,&amp;nbsp;ddy,&amp;nbsp;number&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;matrix[ddx][ddy])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;result&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;matrix&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[list(map(&lt;span style=&quot;color: #4be6fa;&quot;&gt;str&lt;/span&gt;,&amp;nbsp;input().split()))&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;_&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #c10aff;&quot;&gt;5&lt;/span&gt;)]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #c10aff;&quot;&gt;5&lt;/span&gt;)&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;j&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #c10aff;&quot;&gt;5&lt;/span&gt;)&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dfs(i,j,matrix[i][j])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;len&lt;/span&gt;(result))&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p&gt;처음으로 접한 DFS 문제. 난이도가 매우 쉬운 문제이지만 처음이다보니 이해하는데 한참 걸렸다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;DFS의 기본 개념은 재귀함수를 사용해서 주어진 조건에 맞게 주변을 탐색하는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 입력값을 받을 수 있는 matrix를 만든다.&lt;/p&gt;
&lt;p&gt;탐색방향은 x축으로 1칸, y축으로 1칸 움직일 수 있기 때문에 dx,dy를 다음과 같이 설정하였다.&lt;/p&gt;
&lt;p&gt;1칸 움직인 좌표에서 또 다시 dfs를 사용해서 계속해서 이동하게끔 구현했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;if 문을 써서 길이가 6일 때 return하게끔 함으로써 마무리!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Baekjoon</category>
      <category>백준 #DFS #숫자판 점프 #2210</category>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/9</guid>
      <comments>https://itworld38.tistory.com/9#entry9comment</comments>
      <pubDate>Mon, 2 Nov 2020 19:31:54 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스]2019 KAKAO BLIND RECRUITMENT실패율</title>
      <link>https://itworld38.tistory.com/8</link>
      <description>&lt;h2&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;실패율&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqJ3rl/btqLFnDP7fE/lrIJEyIlA16dKDNIy6RlvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqJ3rl/btqLFnDP7fE/lrIJEyIlA16dKDNIy6RlvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqJ3rl/btqLFnDP7fE/lrIJEyIlA16dKDNIy6RlvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqJ3rl%2FbtqLFnDP7fE%2FlrIJEyIlA16dKDNIy6RlvK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다.&lt;/p&gt;
&lt;p&gt;이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;실패율은 다음과 같이 정의한다.
&lt;ul&gt;
&lt;li&gt;스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.&lt;/p&gt;
&lt;p&gt;제한사항&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;스테이지의 개수 N은&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;이상&lt;span&gt;&amp;nbsp;&lt;/span&gt;500&lt;span&gt;&amp;nbsp;&lt;/span&gt;이하의 자연수이다.&lt;/li&gt;
&lt;li&gt;stages의 길이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;이상&lt;span&gt;&amp;nbsp;&lt;/span&gt;200,000&lt;span&gt;&amp;nbsp;&lt;/span&gt;이하이다.&lt;/li&gt;
&lt;li&gt;stages에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;이상&lt;span&gt;&amp;nbsp;&lt;/span&gt;N + 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;이하의 자연수가 담겨있다.
&lt;ul&gt;
&lt;li&gt;각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타낸다.&lt;/li&gt;
&lt;li&gt;단,&lt;span&gt;&amp;nbsp;&lt;/span&gt;N + 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;은 마지막 스테이지(N 번째 스테이지) 까지 클리어 한 사용자를 나타낸다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하면 된다.&lt;/li&gt;
&lt;li&gt;스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은&lt;span&gt;&amp;nbsp;&lt;/span&gt;0&lt;span&gt;&amp;nbsp;&lt;/span&gt;으로 정의한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Nstagesresult&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;[2, 1, 2, 6, 2, 4, 3, 3]&lt;/td&gt;
&lt;td&gt;[3,4,2,1,5]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;[4,4,4,4,4]&lt;/td&gt;
&lt;td&gt;[4,1,2,3]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;입출력 예 설명&lt;/p&gt;
&lt;p&gt;입출력 예 #1&lt;br /&gt;1번 스테이지에는 총 8명의 사용자가 도전했으며, 이 중 1명의 사용자가 아직 클리어하지 못했다. 따라서 1번 스테이지의 실패율은 다음과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 번 스테이지 실패율 : 1/8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2번 스테이지에는 총 7명의 사용자가 도전했으며, 이 중 3명의 사용자가 아직 클리어하지 못했다. 따라서 2번 스테이지의 실패율은 다음과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2 번 스테이지 실패율 : 3/7&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;마찬가지로 나머지 스테이지의 실패율은 다음과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 번 스테이지 실패율 : 2/4&lt;/li&gt;
&lt;li&gt;4번 스테이지 실패율 : 1/2&lt;/li&gt;
&lt;li&gt;5번 스테이지 실패율 : 0/1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;각 스테이지의 번호를 실패율의 내림차순으로 정렬하면 다음과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[3,4,2,1,5]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;입출력 예 #2&lt;/p&gt;
&lt;p&gt;모든 사용자가 마지막 스테이지에 있으므로 4번 스테이지의 실패율은 1이며 나머지 스테이지의 실패율은 0이다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[4,1,2,3]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;나의 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;def&lt;/span&gt;&amp;nbsp;solution(N,&amp;nbsp;stages):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;answer&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;length&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;len&lt;/span&gt;(stages)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#스테이지별&amp;nbsp;실패율&amp;nbsp;구하고&amp;nbsp;빈&amp;nbsp;리스트에&amp;nbsp;담기&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;k&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,N&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;)&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;length&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;length&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;-&lt;/span&gt;&amp;nbsp;stages.count(k&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;length&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;v를&amp;nbsp;구할&amp;nbsp;때&amp;nbsp;0으로&amp;nbsp;나누는&amp;nbsp;오류를&amp;nbsp;방지하는&amp;nbsp;조건&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;length&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;stages.count(k)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;/&lt;/span&gt;&amp;nbsp;length&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value.append(v)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(type(length))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#실패율&amp;nbsp;리스트에&amp;nbsp;인덱스를&amp;nbsp;부여&amp;nbsp;후&amp;nbsp;정렬&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i,j&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;enumerate(value)&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index.append([i&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,j])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index.sort(key&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;lambda&amp;nbsp;x&amp;nbsp;:&amp;nbsp;x[&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;],reverse&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;True&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;t&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;index&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;answer.append(t[&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;])&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;answer&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[실패율 정의]&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실패율 = 해당 스테이지에 머물러 있는 사람 수 / 해당 스테이지 이상을 도전하고 있는 전체 사람 수&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;v = stages.count(k) / length&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[코드 리뷰]&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;for&amp;nbsp;k&amp;nbsp;in&amp;nbsp;range(1,N+1)&amp;nbsp;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;length&amp;nbsp;=&amp;nbsp;length&amp;nbsp;-&amp;nbsp;stages.count(k-1)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;length는 [전체 스테이지 사람 수 - 이전 스테이지 사람 수]로 정의&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;for&amp;nbsp;i,j&amp;nbsp;in&amp;nbsp;enumerate(value)&amp;nbsp;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;index.append([i+1,j])&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;background-color: #c1bef9; color: #000000;&quot;&gt;index.sort(key=lambda&amp;nbsp;x&amp;nbsp;:&amp;nbsp;x[1],reverse=True)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스테이지별 실패율을 담은 리스트 value에 인덱스를 부여 후 lambda를 활용해 정렬함&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;index = [(index,실패율),(index,실패율)...] 이런 식으로 구성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 x[0] = 인덱스, x[1] = 실패율&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;[느낀 점]&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실패율을 구한 후 lambda 적용을 못해서 많이 헤맸다. 앞으로 알고리즘 문제에서 lambda 활용을 염두해두고 풀이를 시도해봐야겠다고 느낌&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #f0f0f0;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #f0f0f0;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #f0f0f0;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>실패율 #프로그래머스 #programmers #알고리즘</category>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/8</guid>
      <comments>https://itworld38.tistory.com/8#entry8comment</comments>
      <pubDate>Mon, 26 Oct 2020 14:31:37 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스]2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도</title>
      <link>https://itworld38.tistory.com/7</link>
      <description>&lt;h2&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;u&gt;비밀지도&lt;/u&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;지도는 한 변의 길이가&lt;span&gt;&amp;nbsp;&lt;/span&gt;n인 정사각형 배열 형태로, 각 칸은&lt;span&gt;&amp;nbsp;&lt;/span&gt;공백(&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;) 또는벽(#&quot;) 두 종류로 이루어져 있다.&lt;/li&gt;
&lt;li&gt;전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각&lt;span&gt;&amp;nbsp;&lt;/span&gt;지도 1과&lt;span&gt;&amp;nbsp;&lt;/span&gt;지도 2라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.&lt;/li&gt;
&lt;li&gt;지도 1과&lt;span&gt;&amp;nbsp;&lt;/span&gt;지도 2는 각각 정수 배열로 암호화되어 있다.&lt;/li&gt;
&lt;li&gt;암호화된 배열은 지도의 각 가로줄에서 벽 부분을&lt;span&gt;&amp;nbsp;&lt;/span&gt;1, 공백 부분을&lt;span&gt;&amp;nbsp;&lt;/span&gt;0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqHnNr/btqLJWxb3an/rXkEFa0hCNueBQwkcHRhZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqHnNr/btqLJWxb3an/rXkEFa0hCNueBQwkcHRhZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqHnNr/btqLJWxb3an/rXkEFa0hCNueBQwkcHRhZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqHnNr%2FbtqLJWxb3an%2FrXkEFa0hCNueBQwkcHRhZ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;u&gt;입력 형식&lt;/u&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;입력으로 지도의 한 변 크기&lt;span&gt;&amp;nbsp;&lt;/span&gt;n&lt;span&gt;&amp;nbsp;&lt;/span&gt;과 2개의 정수 배열&lt;span&gt;&amp;nbsp;&lt;/span&gt;arr1,&lt;span&gt;&amp;nbsp;&lt;/span&gt;arr2가 들어온다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 ≦&lt;span&gt;&amp;nbsp;&lt;/span&gt;n&lt;span&gt;&amp;nbsp;&lt;/span&gt;≦ 16&lt;/li&gt;
&lt;li&gt;arr1,&lt;span&gt;&amp;nbsp;&lt;/span&gt;arr2는 길이&lt;span&gt;&amp;nbsp;&lt;/span&gt;n인 정수 배열로 주어진다.&lt;/li&gt;
&lt;li&gt;정수 배열의 각 원소&lt;span&gt;&amp;nbsp;&lt;/span&gt;x를 이진수로 변환했을 때의 길이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;n&lt;span&gt;&amp;nbsp;&lt;/span&gt;이하이다. 즉, 0 ≦&lt;span&gt;&amp;nbsp;&lt;/span&gt;x&lt;span&gt;&amp;nbsp;&lt;/span&gt;≦ 2n&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 1을 만족한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;u&gt;출력 형식&lt;/u&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;원래의 비밀지도를 해독하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;'#',&lt;span&gt;&amp;nbsp;&lt;/span&gt;공백으로 구성된 문자열 배열로 출력하라.&lt;/p&gt;
&lt;h3&gt;&lt;u&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;입출력 예제&lt;/span&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;매개변수값&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;n&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;arr1&lt;/td&gt;
&lt;td&gt;[9, 20, 28, 18, 11]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;arr2&lt;/td&gt;
&lt;td&gt;[30, 1, 21, 17, 28]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;출력&lt;/td&gt;
&lt;td&gt;[&quot;#####&quot;,&quot;# # #&quot;, &quot;### #&quot;, &quot;# ##&quot;, &quot;#####&quot;]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;매개변수값&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;n&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;arr1&lt;/td&gt;
&lt;td&gt;[46, 33, 33 ,22, 31, 50]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;arr2&lt;/td&gt;
&lt;td&gt;[27 ,56, 19, 14, 14, 10]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;출력&lt;/td&gt;
&lt;td&gt;[&quot;######&quot;, &quot;### #&quot;, &quot;## ##&quot;, &quot; #### &quot;, &quot; #####&quot;, &quot;### # &quot;]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;나의풀이&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;def&lt;/span&gt;&amp;nbsp;solution(n,&amp;nbsp;arr1,&amp;nbsp;arr2):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;answer&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;[]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;num1,num2&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;zip(arr1,arr2)&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmp&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;str&lt;/span&gt;(bin(num1&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;|&lt;/span&gt;&amp;nbsp;num2))[&lt;span style=&quot;color: #c10aff;&quot;&gt;2&lt;/span&gt;:]&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;num1과&amp;nbsp;num2의&amp;nbsp;합집합&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;len&lt;/span&gt;(tmp)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&amp;nbsp;n&amp;nbsp;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;tmp&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'0'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;(n&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;len&lt;/span&gt;(tmp))&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;tmp&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;#&amp;nbsp;n보다&amp;nbsp;길이가&amp;nbsp;작을&amp;nbsp;경우&amp;nbsp;부족한만큼&amp;nbsp;0을&amp;nbsp;채워넣는다&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmp&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;tmp.replace(&lt;span style=&quot;color: #ffd500;&quot;&gt;'1'&lt;/span&gt;,&lt;span style=&quot;color: #ffd500;&quot;&gt;'#'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmp&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;tmp.replace(&lt;span style=&quot;color: #ffd500;&quot;&gt;'0'&lt;/span&gt;,&lt;span style=&quot;color: #ffd500;&quot;&gt;'&amp;nbsp;'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;answer.append(tmp)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;answer&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #f0f0f0;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #f0f0f0;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;항상 두 개를 비교하여 연산할 땐 zip 염두해두기&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #f0f0f0;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #f0f0f0;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9; color: #000000;&quot;&gt;tmp&amp;nbsp;=&amp;nbsp;str(bin(num1&amp;nbsp;|&amp;nbsp;num2))[2:]&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;bin은 이진법으로 바꿔주는 함수고 앞에 0b가 붙어서 잘라준다. ex) bin(10) = 0b1010&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;num1 | num2 는 합집합을 의미 ex) num1 : 10000, num2 : 00110 -&amp;gt; (num1 | num2) : 10110&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; background-color: #c1bef9;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tmp&amp;nbsp;=&amp;nbsp;'0'&amp;nbsp;*&amp;nbsp;(n-len(tmp))&amp;nbsp;+&amp;nbsp;tmp&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;tmp의 길이가 n보다 작을 경우 그만큼 0을 추가&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;ex) n = 6 인데 tmp가 11010 이라면 011010 으로 변환! 이렇게 해야 공백처리가 된다.&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>비밀지도 #프로그래머스 #알고리즘 #programmers</category>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/7</guid>
      <comments>https://itworld38.tistory.com/7#entry7comment</comments>
      <pubDate>Sat, 24 Oct 2020 22:00:23 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 다트 게임</title>
      <link>https://itworld38.tistory.com/6</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다트 게임&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bchqoi/btqLGXSlxKo/ItlNqSNXZz1N6LC6DIKGyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bchqoi/btqLGXSlxKo/ItlNqSNXZz1N6LC6DIKGyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bchqoi/btqLGXSlxKo/ItlNqSNXZz1N6LC6DIKGyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbchqoi%2FbtqLGXSlxKo%2FItlNqSNXZz1N6LC6DIKGyk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.&lt;br /&gt;갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;다트 게임은 총 3번의 기회로 구성된다.&lt;/li&gt;
&lt;li&gt;각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.&lt;/li&gt;
&lt;li&gt;점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1&lt;span&gt;&amp;nbsp;&lt;/span&gt;, 점수2&lt;span&gt;&amp;nbsp;&lt;/span&gt;, 점수3&lt;span&gt;&amp;nbsp;&lt;/span&gt;)으로 계산된다.&lt;/li&gt;
&lt;li&gt;옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.&lt;/li&gt;
&lt;li&gt;스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고)&lt;/li&gt;
&lt;li&gt;스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고)&lt;/li&gt;
&lt;li&gt;스타상(*)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)&lt;/li&gt;
&lt;li&gt;Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.&lt;/li&gt;
&lt;li&gt;스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;&lt;b&gt;입력 형식&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;점수|보너스|[옵션]으로 이루어진 문자열 3세트.&lt;br /&gt;예)&lt;span&gt;&amp;nbsp;&lt;/span&gt;1S2D*3T&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;점수는 0에서 10 사이의 정수이다.&lt;/li&gt;
&lt;li&gt;보너스는 S, D, T 중 하나이다.&lt;/li&gt;
&lt;li&gt;옵선은 *이나 # 중 하나이며, 없을 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;&lt;i&gt;&lt;b&gt;출력 형식&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.&lt;br /&gt;예) 37&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;&lt;b&gt;입출력 예제&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;예제dartResultanswer설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1S2D*3T&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td&gt;11&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 22&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1D2S#10S&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 21&lt;span&gt;&amp;nbsp;&lt;/span&gt;* (-1) + 101&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1D2S0T&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 21&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1S*2T*3S&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;11&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 * 2 + 23&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1D#2S*3S&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;* (-1) * 2 + 21&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;1T2D3D#&lt;/td&gt;
&lt;td&gt;-4&lt;/td&gt;
&lt;td&gt;13&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 22&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 32&lt;span&gt;&amp;nbsp;&lt;/span&gt;* (-1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;1D2S3T*&lt;/td&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;12&lt;span&gt;&amp;nbsp;&lt;/span&gt;+ 21&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2 + 33&lt;span&gt;&amp;nbsp;&lt;/span&gt;* 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;나의 코드&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo,Courier, monospace !important; position: relative!important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f; width: 31.4px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas,'Liberation Mono', Menlo, Courier, monospace!important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0px; text-align: left; width: 673.2px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'LiberationMono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;import&lt;/span&gt;&amp;nbsp;re&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;def&lt;/span&gt;&amp;nbsp;solution(dartResult):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bonus&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;span style=&quot;color: #ffd500;&quot;&gt;'S'&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'D'&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;2&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'T'&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;3&lt;/span&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;option&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;span style=&quot;color: #ffd500;&quot;&gt;''&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'*'&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;2&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'#'&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;re.compile(&lt;span style=&quot;color: #ffd500;&quot;&gt;'(\d+)([SDT])([*#]?)'&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dart&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;p.findall(dartResult)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;print&lt;/span&gt;(dart) # &lt;span&gt;[('1', 'S', ''), ('2', 'D', '*'), ('3', 'T', '')] 형태로 출력&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;len&lt;/span&gt;(dart)):&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;dart[i][&lt;span style=&quot;color: #c10aff;&quot;&gt;2&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;'*'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;and&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&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;dart[i&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dart[i]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;int&lt;/span&gt;(dart[i][&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;])&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;bonus[dart[i][&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;]]&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;option[dart[i][&lt;span style=&quot;color: #c10aff;&quot;&gt;2&lt;/span&gt;]]&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 06px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;answer&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;sum(dart)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;answer&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;&amp;lt;a href=http://colorscripter.com/info#e&amp;gt;http://colorscripter.com/info#e&amp;lt;/a&amp;gt;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0px 2px 4px 0px; width: 15.2px;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;&amp;lt;a href=http://colorscripter.com/info#e&amp;gt;http://colorscripter.com/info#e&amp;lt;/a&amp;gt;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #010101;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&lt;span&gt;정규 표현식(Regular Expression)을 사용할 수 있는 내장 함수 re를 활용했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; background-color: #9feec3;&quot;&gt;bonus&amp;nbsp;=&amp;nbsp;{'S'&amp;nbsp;:&amp;nbsp;1,&amp;nbsp;'D'&amp;nbsp;:&amp;nbsp;2,&amp;nbsp;'T'&amp;nbsp;:&amp;nbsp;3}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; background-color: #9feec3;&quot;&gt;option =&amp;nbsp;{''&amp;nbsp;:&amp;nbsp;1,&amp;nbsp;'*'&amp;nbsp;:&amp;nbsp;2,&amp;nbsp;'#'&amp;nbsp;:&amp;nbsp;-1}&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;숫자/보너스/옵션 3가지로 이루어져 있기때문에 각각을 문제에 맞게 딕셔너리에 담았습니다.&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;p&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;re.compile(&lt;span style=&quot;color: #000000;&quot;&gt;'(\d+)([SDT])([*#]?)'&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&lt;span&gt;(&lt;span&gt;\d+)는 모든 숫자, &lt;span&gt;([SDT])는 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;S,D,T중 하나, &lt;span&gt;([*#]?)은 *,#,공백 중 하나로 구성한다는 코드입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;dart&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;p.findall(dartResult)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;findall 메소드를 실행하면 해당정규식(p)에 해당하는 모든 문자열을 리스트 형태로 반환합니다.&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&lt;span style=&quot;background-color: #9feec3; color: #000000;&quot;&gt;if&amp;nbsp;dart[i][2]&amp;nbsp;==&amp;nbsp;'*'&amp;nbsp;and&amp;nbsp;i&amp;nbsp;&amp;gt;&amp;nbsp;0:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&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;span style=&quot;background-color: #9feec3; color: #000000;&quot;&gt;dart[i-1]&amp;nbsp;*=&amp;nbsp;2&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;*가 처음 이후에 나올 경우 전 단계 스코어에 2배를 곱하라는 조건입니다.&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 나온 각 시행별 점수를 합하면 정답!!&lt;/span&gt;&lt;/b&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;br /&gt;
&lt;p style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/minjae8138/algorithm_python3.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/minjae8138/algorithm_python3.git&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603370170578&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;minjae8138/algorithm_python3&quot; data-og-description=&quot;Contribute to minjae8138/algorithm_python3 development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/minjae8138/algorithm_python3.git&quot; data-og-url=&quot;https://github.com/minjae8138/algorithm_python3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/beJE91/hyHYhp68Oj/EHwHufdGnClhgyWNb0OSV1/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://github.com/minjae8138/algorithm_python3.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/minjae8138/algorithm_python3.git&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/beJE91/hyHYhp68Oj/EHwHufdGnClhgyWNb0OSV1/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;minjae8138/algorithm_python3&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Contribute to minjae8138/algorithm_python3 development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/Programmers</category>
      <category>IT #알고리즘 #프로그래머스 #다트 #파이썬</category>
      <author>데분 데분</author>
      <guid isPermaLink="true">https://itworld38.tistory.com/6</guid>
      <comments>https://itworld38.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 21 Oct 2020 23:47:13 +0900</pubDate>
    </item>
  </channel>
</rss>