<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>작은코딩의 개발 이야기</title>
    <link>https://a-littlecoding.tistory.com/</link>
    <description>개발자의 성장  블로그입니다.

정보 오류에 관한 제보는 언제나 감사합니다!</description>
    <language>ko</language>
    <pubDate>Fri, 10 Jul 2026 18:18:35 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>작은코딩</managingEditor>
    <image>
      <title>작은코딩의 개발 이야기</title>
      <url>https://tistory1.daumcdn.net/tistory/5096194/attach/461fd57676f544518229c70b750c26aa</url>
      <link>https://a-littlecoding.tistory.com</link>
    </image>
    <item>
      <title>[프로그래머스 level2] 최솟값 만들기 | JavaScript</title>
      <link>https://a-littlecoding.tistory.com/142</link>
      <description>&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=javascript&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=javascript&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720514598498&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=javascript&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/YGVDS/hyWvLeGD5g/1CacXnsWKpaISUJ6JJ6ax1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cSjmh8/hyWzE52lG0/arfWBaMJ5d1SUzHbDnUQE0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=javascript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=javascript&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/YGVDS/hyWvLeGD5g/1CacXnsWKpaISUJ6JJ6ax1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cSjmh8/hyWzE52lG0/arfWBaMJ5d1SUzHbDnUQE0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제&amp;nbsp;설명&lt;/b&gt;&lt;br /&gt;길이가&amp;nbsp;같은&amp;nbsp;배열&amp;nbsp;A,&amp;nbsp;B&amp;nbsp;두개가&amp;nbsp;있습니다.&amp;nbsp;각&amp;nbsp;배열은&amp;nbsp;자연수로&amp;nbsp;이루어져&amp;nbsp;있습니다.&lt;br /&gt;배열&amp;nbsp;A,&amp;nbsp;B에서&amp;nbsp;각각&amp;nbsp;한&amp;nbsp;개의&amp;nbsp;숫자를&amp;nbsp;뽑아&amp;nbsp;두&amp;nbsp;수를&amp;nbsp;곱합니다.&amp;nbsp;이러한&amp;nbsp;과정을&amp;nbsp;배열의&amp;nbsp;길이만큼&amp;nbsp;반복하며,&amp;nbsp;두&amp;nbsp;수를&amp;nbsp;곱한&amp;nbsp;값을&amp;nbsp;누적하여&amp;nbsp;더합니다.&amp;nbsp;이때&amp;nbsp;최종적으로&amp;nbsp;누적된&amp;nbsp;값이&amp;nbsp;최소가&amp;nbsp;되도록&amp;nbsp;만드는&amp;nbsp;것이&amp;nbsp;목표입니다.&amp;nbsp;(단,&amp;nbsp;각&amp;nbsp;배열에서&amp;nbsp;k번째&amp;nbsp;숫자를&amp;nbsp;뽑았다면&amp;nbsp;다음에&amp;nbsp;k번째&amp;nbsp;숫자는&amp;nbsp;다시&amp;nbsp;뽑을&amp;nbsp;수&amp;nbsp;없습니다.)&lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;A&amp;nbsp;=&amp;nbsp;[1,&amp;nbsp;4,&amp;nbsp;2]&amp;nbsp;,&amp;nbsp;B&amp;nbsp;=&amp;nbsp;[5,&amp;nbsp;4,&amp;nbsp;4]&amp;nbsp;라면&lt;br /&gt;&lt;br /&gt;A에서&amp;nbsp;첫번째&amp;nbsp;숫자인&amp;nbsp;1,&amp;nbsp;B에서&amp;nbsp;첫번째&amp;nbsp;숫자인&amp;nbsp;5를&amp;nbsp;뽑아&amp;nbsp;곱하여&amp;nbsp;더합니다.&amp;nbsp;(누적된&amp;nbsp;값&amp;nbsp;:&amp;nbsp;0&amp;nbsp;+&amp;nbsp;5(1x5)&amp;nbsp;=&amp;nbsp;5)&lt;br /&gt;A에서&amp;nbsp;두번째&amp;nbsp;숫자인&amp;nbsp;4,&amp;nbsp;B에서&amp;nbsp;세번째&amp;nbsp;숫자인&amp;nbsp;4를&amp;nbsp;뽑아&amp;nbsp;곱하여&amp;nbsp;더합니다.&amp;nbsp;(누적된&amp;nbsp;값&amp;nbsp;:&amp;nbsp;5&amp;nbsp;+&amp;nbsp;16(4x4)&amp;nbsp;=&amp;nbsp;21)&lt;br /&gt;A에서&amp;nbsp;세번째&amp;nbsp;숫자인&amp;nbsp;2,&amp;nbsp;B에서&amp;nbsp;두번째&amp;nbsp;숫자인&amp;nbsp;4를&amp;nbsp;뽑아&amp;nbsp;곱하여&amp;nbsp;더합니다.&amp;nbsp;(누적된&amp;nbsp;값&amp;nbsp;:&amp;nbsp;21&amp;nbsp;+&amp;nbsp;8(2x4)&amp;nbsp;=&amp;nbsp;29)&lt;br /&gt;즉,&amp;nbsp;이&amp;nbsp;경우가&amp;nbsp;최소가&amp;nbsp;되므로&amp;nbsp;29를&amp;nbsp;return&amp;nbsp;합니다.&lt;br /&gt;&lt;br /&gt;배열&amp;nbsp;A,&amp;nbsp;B가&amp;nbsp;주어질&amp;nbsp;때&amp;nbsp;최종적으로&amp;nbsp;누적된&amp;nbsp;최솟값을&amp;nbsp;return&amp;nbsp;하는&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해&amp;nbsp;주세요.&lt;br /&gt;&lt;br /&gt;제한사항&lt;br /&gt;배열&amp;nbsp;A,&amp;nbsp;B의&amp;nbsp;크기&amp;nbsp;:&amp;nbsp;1,000&amp;nbsp;이하의&amp;nbsp;자연수&lt;br /&gt;배열&amp;nbsp;A,&amp;nbsp;B의&amp;nbsp;원소의&amp;nbsp;크기&amp;nbsp;:&amp;nbsp;1,000&amp;nbsp;이하의&amp;nbsp;자연수&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;풀이&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;  JavaScript&lt;/h3&gt;
&lt;pre id=&quot;code_1720514697865&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(A,B){
    let answer = 0;

    // 각 배열에서 하나씩 뽑아서 곱한 수를 모두 더한값이 최솟값이 되러면 한 배열의 가장 높은 값과 다른 배열의 가장 낮은 값을 곱해야 함
    // 1. 각 배열 오름, 내림 차순 정렬
    // 2. 반복문으로 곱 연산 및 누적 더하기
    
    const aList = A.sort((a, b) =&amp;gt; a - b);
    const bList = B.sort((a, b) =&amp;gt; b - a);

    for (let i = 0; i &amp;lt; aList.length; i++) {
        answer += aList[i] * bList[i];
    }
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간 복잡도 = &lt;b&gt;&lt;span&gt;&lt;span&gt;O&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;+ &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;O&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;+ &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;O&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;O&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배열 A 정렬: O(n log n)&lt;/li&gt;
&lt;li&gt;배열 B 정렬: O(n log n)&lt;/li&gt;
&lt;li&gt;곱셈과 누적합 계산: O(n)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>javascript</category>
      <category>최솟값 만들기</category>
      <category>프로그래머스</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/142</guid>
      <comments>https://a-littlecoding.tistory.com/142#entry142comment</comments>
      <pubDate>Tue, 9 Jul 2024 17:49:36 +0900</pubDate>
    </item>
    <item>
      <title>[Next.js] Qull Editor Error : ReferenceError: document is not defined</title>
      <link>https://a-littlecoding.tistory.com/141</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;  에러 발생&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Next.js 프로젝트 에서 Qull Editor 사용을 위해 샘플 컴포넌트를 만들던 중 `ReferenceError: document is not` 에러를 만났다&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;⨯ ReferenceError: document is not defined at __webpack_require__ (/Users/victor/Desktop/soulware/project/ttokD/next-publish-demo/next-publish-demo/.next/server/webpack-runtime.js:33:43) at __webpack_require__ (/Users/victor/Desktop/soulware/project/ttokD/next-publish-demo/next-publish-demo/.next/server/webpack-runtime.js:33:43) at eval (./components/ui/editor.tsx:9:69) at (ssr)/./components/ui/editor.tsx (/Users/victor/Desktop/soulware/project/ttokD/next-publish-demo/next-publish-demo/.next/server/app/test/page.js:184:1) at Object.__webpack_require__ [as require] (/Users/victor/Desktop/soulware/project/ttokD/next-publish-demo/next-publish-demo/.next/server/webpack-runtime.js:33:43) digest: &quot;3831800141&quot;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  소스코드&lt;/h4&gt;
&lt;pre id=&quot;code_1719995971596&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;'use client';

import React, { useState } from 'react';
import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css';

export function CommonEditor() {
  const [value, setValue] = useState('');

  return &amp;lt;ReactQuill className=&quot;h-60&quot; theme=&quot;snow&quot; value={value} onChange={setValue} /&amp;gt;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  해결 코드&lt;/h4&gt;
&lt;pre id=&quot;code_1719996026325&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;'use client';

import dynamic from 'next/dynamic';
import React, { useState } from 'react';
import 'react-quill/dist/quill.snow.css';

const ReactQuill = dynamic(() =&amp;gt; import('react-quill'), { ssr: false });
export function CommonEditor() {
  const [value, setValue] = useState('');

  return &amp;lt;ReactQuill className=&quot;h-60&quot; theme=&quot;snow&quot; value={value} onChange={setValue} /&amp;gt;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  분석&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인은 Next.js 서버사이드에서 Qull Editor 컴포넌트를 컴파일 하던 와중 document 객체를 찾을 수 없어 발생하는 에러이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'use client'를 사용하면 서버사이드에서 렌더링을 하지 않아 이런 문제가 발생하지 않을 줄 알았는데 그게 아니었던 것 같다.&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;컴포넌트에서 'use client'를 사용해도 quill editor 구현부에서는 document에 접근하기 때문에 컴파일 과정에서 js 번들을 만들 때 document 객체에 접근하게 되고 `ReferenceError: document is not` 에러가 발생하는 것 같다.&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;해결 방법은 Qull Editor를 Next.js dynamic(동적 임포트)을 통해 ssr에서는 Qull Editor를 임포트 하지 않고 csr에서만 임포트 하여 사용하면 에러가 해결된다.&lt;/p&gt;</description>
      <category>코딩/Next.js</category>
      <category>document is not defined</category>
      <category>next.js</category>
      <category>qull editor</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/141</guid>
      <comments>https://a-littlecoding.tistory.com/141#entry141comment</comments>
      <pubDate>Wed, 3 Jul 2024 17:56:42 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 level2] JadenCase 문자열 만들기 | Python, Javacript</title>
      <link>https://a-littlecoding.tistory.com/140</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12951&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12951&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1696574677703&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12951&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cRCBv5/hyT9GZlN4n/YKw6fUK3DFXokdQVqxGEi1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/nc23a/hyT51qx5nE/zk0V0QvebiHasSeaSWBkqk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12951&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12951&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cRCBv5/hyT9GZlN4n/YKw6fUK3DFXokdQVqxGEi1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/nc23a/hyT51qx5nE/zk0V0QvebiHasSeaSWBkqk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JadenCase&amp;nbsp;문자열&amp;nbsp;만들기&lt;/b&gt;&lt;br /&gt;문제&amp;nbsp;설명&lt;br /&gt;JadenCase란&amp;nbsp;모든&amp;nbsp;단어의&amp;nbsp;첫&amp;nbsp;문자가&amp;nbsp;대문자이고,&amp;nbsp;그&amp;nbsp;외의&amp;nbsp;알파벳은&amp;nbsp;소문자인&amp;nbsp;문자열입니다.&amp;nbsp;단,&amp;nbsp;첫&amp;nbsp;문자가&amp;nbsp;알파벳이&amp;nbsp;아닐&amp;nbsp;때에는&amp;nbsp;이어지는&amp;nbsp;알파벳은&amp;nbsp;소문자로&amp;nbsp;쓰면&amp;nbsp;됩니다.&amp;nbsp;(첫&amp;nbsp;번째&amp;nbsp;입출력&amp;nbsp;예&amp;nbsp;참고)&lt;br /&gt;문자열&amp;nbsp;s가&amp;nbsp;주어졌을&amp;nbsp;때,&amp;nbsp;s를&amp;nbsp;JadenCase로&amp;nbsp;바꾼&amp;nbsp;문자열을&amp;nbsp;리턴하는&amp;nbsp;함수,&amp;nbsp;solution을&amp;nbsp;완성해주세요.&lt;br /&gt;&lt;br /&gt;제한&amp;nbsp;조건&lt;br /&gt;s는&amp;nbsp;길이&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;200&amp;nbsp;이하인&amp;nbsp;문자열입니다.&lt;br /&gt;s는&amp;nbsp;알파벳과&amp;nbsp;숫자,&amp;nbsp;공백문자(&quot;&amp;nbsp;&quot;)로&amp;nbsp;이루어져&amp;nbsp;있습니다.&lt;br /&gt;숫자는&amp;nbsp;단어의&amp;nbsp;첫&amp;nbsp;문자로만&amp;nbsp;나옵니다.&lt;br /&gt;숫자로만&amp;nbsp;이루어진&amp;nbsp;단어는&amp;nbsp;없습니다.&lt;br /&gt;공백문자가&amp;nbsp;연속해서&amp;nbsp;나올&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 예&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;s&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;return&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&quot;3people&amp;nbsp;unFollowed&amp;nbsp;me&quot;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&quot;3people Unfollowed Me&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&quot;for&amp;nbsp;the&amp;nbsp;last&amp;nbsp;week&quot;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&quot;For The Last Week&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;풀이&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  Python&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  풀이 1&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;방법&amp;nbsp;1.&amp;nbsp;문자열을&amp;nbsp;공백&amp;nbsp;기준으로&amp;nbsp;나누고(배열에&amp;nbsp;단어별로)&amp;nbsp;각&amp;nbsp;단어의&amp;nbsp;첫&amp;nbsp;문자열이&amp;nbsp;숫자가&amp;nbsp;아닌경우&amp;nbsp;JadenCase,&amp;nbsp;숫자인&amp;nbsp;경우는&amp;nbsp;LowerCase수정&lt;/p&gt;
&lt;pre id=&quot;code_1696574836005&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(s):
    answer = []
    words = s.split(' ')
    print(words)
    for word in words:
        if word == '':
            answer.append(word)
        elif not word[0].isdigit():
            answer.append(word.capitalize())
        else:
            answer.append(word.lower())
    return &quot; &quot;.join(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  풀이 2&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 방법 2. 모든 문자열을 소문자로 변경, 문자열 반복 시 첫 문자와 공백 이후에 오는 문자 숫자여부에 따른 대문자 변경&lt;/p&gt;
&lt;pre id=&quot;code_1696574920523&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def isAlphaToUpperStr(word):
    if word.isalpha():
        return word.upper()
    return word

def solution(s):
    answer = ''
    for i, j in  enumerate(s.lower()):
        if i == 0:
            answer += isAlphaToUpperStr(j)
        elif j.isalpha() and s[i-1] == ' ':
            answer += isAlphaToUpperStr(j)
        else:
            answer += j
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  JavaScript&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  풀이 1&lt;/h4&gt;
&lt;pre id=&quot;code_1696575059689&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(s) {
    const answer = [];
    const words = s.toLowerCase().split(' ');
    for (const word of words) {
        if (word === '') {
            answer.push(word);
        } else if (isNaN(word[0])) {
            answer.push(word[0].toUpperCase() + word.slice(1));
        } else {
            answer.push(word);
        }
    }
    return answer.join(' ');
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  피드백&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;split 함수를 사용할 때 구분자가 여러개 중복되는경우 리턴값에 ''(빈문자열)이 들어가는 경우를 고려하지 않아서 첫 트라이는 실패.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분에 대해서 궁금하다면 다음 글을 참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://a-littlecoding.tistory.com/139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://a-littlecoding.tistory.com/139&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1696575180413&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Python/파이썬] 문자열 메서드 split 함수 정리&quot; data-og-description=&quot;  공식문서 https://docs.python.org/ko/3.8/library/stdtypes.html#str.split 내장형 &amp;mdash; Python 3.8.17 문서 다음 섹션에서는 인터프리터에 내장된 표준형에 관해 설명합니다. 기본 내장 유형은 숫자, 시퀀스, 매핑, &quot; data-og-host=&quot;a-littlecoding.tistory.com&quot; data-og-source-url=&quot;https://a-littlecoding.tistory.com/139&quot; data-og-url=&quot;https://a-littlecoding.tistory.com/139&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmt3f0/hyT9ASmMHd/vFHjDMaoK7QspoeDpoKN01/img.jpg?width=273&amp;amp;height=184&amp;amp;face=0_0_273_184,https://scrap.kakaocdn.net/dn/bffxRx/hyT9yAfxTv/8ICnUgzGLAxFl6jZm1sj71/img.jpg?width=273&amp;amp;height=184&amp;amp;face=0_0_273_184,https://scrap.kakaocdn.net/dn/mwkUU/hyT550L5XA/94koNvbjYPmrfGt6TpUqKK/img.gif?width=720&amp;amp;height=540&amp;amp;face=0_0_720_540&quot;&gt;&lt;a href=&quot;https://a-littlecoding.tistory.com/139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://a-littlecoding.tistory.com/139&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmt3f0/hyT9ASmMHd/vFHjDMaoK7QspoeDpoKN01/img.jpg?width=273&amp;amp;height=184&amp;amp;face=0_0_273_184,https://scrap.kakaocdn.net/dn/bffxRx/hyT9yAfxTv/8ICnUgzGLAxFl6jZm1sj71/img.jpg?width=273&amp;amp;height=184&amp;amp;face=0_0_273_184,https://scrap.kakaocdn.net/dn/mwkUU/hyT550L5XA/94koNvbjYPmrfGt6TpUqKK/img.gif?width=720&amp;amp;height=540&amp;amp;face=0_0_720_540');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Python/파이썬] 문자열 메서드 split 함수 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공식문서 https://docs.python.org/ko/3.8/library/stdtypes.html#str.split 내장형 &amp;mdash; Python 3.8.17 문서 다음 섹션에서는 인터프리터에 내장된 표준형에 관해 설명합니다. 기본 내장 유형은 숫자, 시퀀스, 매핑,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;a-littlecoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>JadenCase 문자열 만들기</category>
      <category>javascript</category>
      <category>python</category>
      <category>알고리즘</category>
      <category>자바스크립트</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/140</guid>
      <comments>https://a-littlecoding.tistory.com/140#entry140comment</comments>
      <pubDate>Fri, 6 Oct 2023 15:53:25 +0900</pubDate>
    </item>
    <item>
      <title>[Python/파이썬] 문자열 메서드 split 함수 정리</title>
      <link>https://a-littlecoding.tistory.com/139</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;  공식문서&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.python.org/ko/3.8/library/stdtypes.html#str.split&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.python.org/ko/3.8/library/stdtypes.html#str.split&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1696569819029&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;내장형 &amp;mdash; Python 3.8.17 문서&quot; data-og-description=&quot;다음 섹션에서는 인터프리터에 내장된 표준형에 관해 설명합니다. 기본 내장 유형은 숫자, 시퀀스, 매핑, 클래스, 인스턴스 및 예외입니다. 일부 컬렉션 클래스는 가변입니다. 제자리에서 멤버&quot; data-og-host=&quot;docs.python.org&quot; data-og-source-url=&quot;https://docs.python.org/ko/3.8/library/stdtypes.html#str.split&quot; data-og-url=&quot;https://docs.python.org/ko/3.8/library/stdtypes.html#str.split&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.python.org/ko/3.8/library/stdtypes.html#str.split&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.python.org/ko/3.8/library/stdtypes.html#str.split&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;내장형 &amp;mdash; Python 3.8.17 문서&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;다음 섹션에서는 인터프리터에 내장된 표준형에 관해 설명합니다. 기본 내장 유형은 숫자, 시퀀스, 매핑, 클래스, 인스턴스 및 예외입니다. 일부 컬렉션 클래스는 가변입니다. 제자리에서 멤버&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;  split 함수란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 메서드인 split 함수는 문자열을 분할하여 리스트를 리턴하는 함수이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;str.split(sep=None, maxsplit=-1)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  split 함수의 파라미터&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;split 함수는 sep, maxsplit 두 개의 파라미터를 가지고 있는데 각각 None, -1을 기본값으로 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  sep&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;sep에 str(문자) 값이 주어지면, 연속된 구분자는 묶이지 않고 빈 문자열을 구분하는 것으로 간주한다.&lt;br /&gt;예를 들어, '1,,2'.split(',') 는 ['1', '', '2']를 리턴하는데&lt;br /&gt;&lt;br /&gt;시작점과 첫 ',' 사이 = '1'&lt;br /&gt;첫 ','와 두 번째 ',' 사이 = ''&lt;br /&gt;두 번째 ','와 마지막 사이 = '2'&lt;br /&gt;&lt;br /&gt;결과는 ['1', '', '2']이 된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;코드&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1696572051710&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print('1,,2'.split(','))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dieeWx/btsw8kNR64P/CKOuskpZ2xMh8iMuGKE43k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dieeWx/btsw8kNR64P/CKOuskpZ2xMh8iMuGKE43k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dieeWx/btsw8kNR64P/CKOuskpZ2xMh8iMuGKE43k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdieeWx%2Fbtsw8kNR64P%2FCKOuskpZ2xMh8iMuGKE43k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;254&quot; height=&quot;149&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;sep 인자는 여러 문자로 구성될 수 있다&lt;br /&gt;예를 들어, '1&amp;lt;&amp;gt;2&amp;lt;&amp;gt;3'.split('&amp;lt;&amp;gt;') 는 ['1', '2', '3']를 리턴한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;코드&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1696572215133&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;print('1&amp;lt;&amp;gt;2&amp;lt;&amp;gt;3'.split('&amp;lt;&amp;gt;'))&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buCrdV/btsxgqzJGx9/kKokyKLtn6bWhhQtbYq5vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buCrdV/btsxgqzJGx9/kKokyKLtn6bWhhQtbYq5vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buCrdV/btsxgqzJGx9/kKokyKLtn6bWhhQtbYq5vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuCrdV%2FbtsxgqzJGx9%2FkKokyKLtn6bWhhQtbYq5vk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;408&quot; height=&quot;155&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;지정된 구분자로 빈 문자열을 나누면 ['']를 리턴한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;코드&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1696572313101&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(''.split('&amp;lt;&amp;gt;'))&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wFxsE/btsxq00CQpC/rEqlM96aVZ5iINJVnRKMIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wFxsE/btsxq00CQpC/rEqlM96aVZ5iINJVnRKMIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wFxsE/btsxq00CQpC/rEqlM96aVZ5iINJVnRKMIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwFxsE%2Fbtsxq00CQpC%2FrEqlM96aVZ5iINJVnRKMIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;358&quot; height=&quot;143&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;sep이 지정되지 않거나 None이면, 다른 분할 알고리즘이 적용된다.&lt;br /&gt;연속된 공백 문자는 단일한 구분자로 간주하고, 문자열이 선행이나 후행 공백을 포함해도 결과는 시작과 끝에 빈 문자열을 포함하지 않는다.&lt;br /&gt;결과적으로 빈 문자열이나 공백만으로 구성된 문자열을 None 구분자로 나누면 []를 돌려줍니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;코드&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1696572477152&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;print('1 2 3'.split())
print('   1   2   3   '.split())
print(''.split())
print('      '.split())&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l8ltH/btsxh9EiYnk/Z4T9JZti6iLfOHo4KwtRq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l8ltH/btsxh9EiYnk/Z4T9JZti6iLfOHo4KwtRq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l8ltH/btsxh9EiYnk/Z4T9JZti6iLfOHo4KwtRq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl8ltH%2Fbtsxh9EiYnk%2FZ4T9JZti6iLfOHo4KwtRq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;297&quot; height=&quot;264&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt; maxsplit&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;maxsplit에 int(숫자) 값이 주어지면 해당 수 만큼 분할을 수행하고 없거나 -1이면 분할 수에 제한이 없다.&lt;br /&gt;maxsplit이 주어졌을 때 리턴되는 리스트는 최대 maxsplit + 1개의 요소를 가진다.&amp;nbsp;ex) maxsplit이 3인 경우 3등분이 아닌 3번 분할하는 것으로 결과는 하나를 3번 분할해 4등분이 된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;코드&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1696572766118&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print('1 2 3'.split(maxsplit=1))
print('1 2 3 4 5'.split(maxsplit=3))&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ospqp/btsxkDd1S0P/9BLtFZGOjEwLRA8fCfUUfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ospqp/btsxkDd1S0P/9BLtFZGOjEwLRA8fCfUUfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ospqp/btsxkDd1S0P/9BLtFZGOjEwLRA8fCfUUfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fospqp%2FbtsxkDd1S0P%2F9BLtFZGOjEwLRA8fCfUUfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;337&quot; height=&quot;184&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  주의사항&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간혹 리턴값에 '' 공백 문자가 포함되어 있다면 문자열에 구분자가 여러 개 중복한 경우가 있는지 확인해 보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O31qy/btsxggYmord/OkpuyLeK034bYgYSTXvIwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O31qy/btsxggYmord/OkpuyLeK034bYgYSTXvIwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O31qy/btsxggYmord/OkpuyLeK034bYgYSTXvIwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO31qy%2FbtsxggYmord%2FOkpuyLeK034bYgYSTXvIwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;374&quot; height=&quot;179&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;179&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <category>python</category>
      <category>split</category>
      <category>문자열나누기</category>
      <category>파이썬</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/139</guid>
      <comments>https://a-littlecoding.tistory.com/139#entry139comment</comments>
      <pubDate>Fri, 6 Oct 2023 15:20:59 +0900</pubDate>
    </item>
    <item>
      <title>형식 맞추기_CleanCode_95p</title>
      <link>https://a-littlecoding.tistory.com/138</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;서로 밀접한 개념은 세로로 가까이 둬야 한다.&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;변수는 사용하는 위치에 최대한 가까이 선언한다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;_cleancode 101p 중&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 vue.js를 사용하면서 컴포지션 API 방식을 사용했다.&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;기존의 옵션 API 방식에서 여러 가지 개선이 되었는데 그중에 클린코드에서 담겨있는 내용을 개선한 점이 눈에 띄었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOJ8oh/btsnD2HeUbl/coRCKj2gnsUmnkTYAeCny1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOJ8oh/btsnD2HeUbl/coRCKj2gnsUmnkTYAeCny1/img.png&quot; data-alt=&quot;option api vs composition api&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOJ8oh/btsnD2HeUbl/coRCKj2gnsUmnkTYAeCny1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOJ8oh%2FbtsnD2HeUbl%2FcoRCKj2gnsUmnkTYAeCny1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;1201&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1201&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;option api vs composition api&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션 API의 경우는 변수, 함수, 컴퓨티드 등등 선언 지점이 달라서 함수를 작성하다 변수에 대한 내용을 확인하려면 스크롤을 올려 변수가 선언된 곳을 확인해야 했지만 컴포지션 API에서는 그런 부분이 개선되어 함수가 선언된 곳 근처에 변수를 선언할 수 있어 가독성이 올라갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에는 습관적으로 상단에 변수를 다 선언해 놓고 가져다가 사용하는 방법을 사용했었지만 이젠 의식적으로 연관 있는, 밀접한 코드는 서로 근처에 배치하여 가독성 있는 코드를 작성해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.vuejs.org/guide/extras/composition-api-faq.html#more-flexible-code-organization&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ko.vuejs.org/guide/extras/composition-api-faq.html#more-flexible-code-organization&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689315297278&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;컴포지션 API FAQ | Vue.js&quot; data-og-description=&quot;&quot; data-og-host=&quot;ko.vuejs.org&quot; data-og-source-url=&quot;https://ko.vuejs.org/guide/extras/composition-api-faq.html#more-flexible-code-organization&quot; data-og-url=&quot;https://ko.vuejs.org/guide/extras/composition-api-faq&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/drrwuh/hyTjM02d9Z/Tn3p6xx9nj5EweRGKnXN01/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://ko.vuejs.org/guide/extras/composition-api-faq.html#more-flexible-code-organization&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.vuejs.org/guide/extras/composition-api-faq.html#more-flexible-code-organization&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/drrwuh/hyTjM02d9Z/Tn3p6xx9nj5EweRGKnXN01/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;컴포지션 API FAQ | Vue.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.vuejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>book diary</category>
      <category>CleanCode</category>
      <category>클린코드</category>
      <category>형식 맞추기</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/138</guid>
      <comments>https://a-littlecoding.tistory.com/138#entry138comment</comments>
      <pubDate>Fri, 14 Jul 2023 15:23:17 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 level2] 최댓값과 최솟값 | JavaScript</title>
      <link>https://a-littlecoding.tistory.com/137</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12939&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12939&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689313088242&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12939&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DeOOz/hyTjWoZ7Zw/hkeEUX7dEdjs7BHoC6UBS1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ecZg6A/hyTjVXX0Dn/zWyqgCu3k1BveuouaQFNLk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12939&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12939&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DeOOz/hyTjWoZ7Zw/hkeEUX7dEdjs7BHoC6UBS1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ecZg6A/hyTjVXX0Dn/zWyqgCu3k1BveuouaQFNLk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최댓값과&amp;nbsp;최솟값&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;문제&amp;nbsp;설명&lt;/b&gt;&lt;br /&gt;문자열&amp;nbsp;s에는&amp;nbsp;공백으로&amp;nbsp;구분된&amp;nbsp;숫자들이&amp;nbsp;저장되어&amp;nbsp;있습니다.&amp;nbsp;str에&amp;nbsp;나타나는&amp;nbsp;숫자&amp;nbsp;중&amp;nbsp;최소값과&amp;nbsp;최대값을&amp;nbsp;찾아&amp;nbsp;이를&amp;nbsp;&quot;(최소값)&amp;nbsp;(최대값)&quot;형태의&amp;nbsp;문자열을&amp;nbsp;반환하는&amp;nbsp;함수,&amp;nbsp;solution을&amp;nbsp;완성하세요.&lt;br /&gt;예를들어&amp;nbsp;s가&amp;nbsp;&quot;1&amp;nbsp;2&amp;nbsp;3&amp;nbsp;4&quot;라면&amp;nbsp;&quot;1&amp;nbsp;4&quot;를&amp;nbsp;리턴하고,&amp;nbsp;&quot;-1&amp;nbsp;-2&amp;nbsp;-3&amp;nbsp;-4&quot;라면&amp;nbsp;&quot;-4&amp;nbsp;-1&quot;을&amp;nbsp;리턴하면&amp;nbsp;됩니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;제한&amp;nbsp;조건&lt;/b&gt;&lt;br /&gt;s에는&amp;nbsp;둘&amp;nbsp;이상의&amp;nbsp;정수가&amp;nbsp;공백으로&amp;nbsp;구분되어&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;입출력&amp;nbsp;예&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;s&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;return&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&quot;1&amp;nbsp;2&amp;nbsp;3&amp;nbsp;4&quot;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;nbsp;&quot;1 4&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&quot;-1&amp;nbsp;-2&amp;nbsp;-3&amp;nbsp;-4&quot;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;nbsp;&quot;-4 -1&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&quot;-1&amp;nbsp;-1&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&quot;-1 -1&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;풀이&lt;/h2&gt;
&lt;pre id=&quot;code_1689313193652&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(s) {
    let maxN
    let minN
    
    const numList = s.split(' ').map((v) =&amp;gt; Number(v))
    maxN = numList[0]
    minN = numList[0]

    for (let i = 1; i &amp;lt; numList.length; i++) {
        if (maxN &amp;lt; numList[i]) {
            maxN = numList[i]
        }
        if (minN &amp;gt; numList[i]) {
            minN = numList[i]
        }
    }
    return `${minN} ${maxN}`
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  피드백&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트 내장 객체 Math의 min, max 함수를 사요하면 더 간단히 해결할 수 있고 그렇게 만들어진 코드가 가독성이 떨어지지도 않는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689313410456&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(s) {
    const arr = s.split(' ')

    return `${Math.min(...arr)} ${Math.max(...arr)}`
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>javascript</category>
      <category>알고리즘</category>
      <category>최댓값과 최솟값</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/137</guid>
      <comments>https://a-littlecoding.tistory.com/137#entry137comment</comments>
      <pubDate>Fri, 14 Jul 2023 14:47:32 +0900</pubDate>
    </item>
    <item>
      <title>좋은 주석, 나쁜 주석_CleanCode_70p</title>
      <link>https://a-littlecoding.tistory.com/136</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;하지만 명심하기 바란다. &lt;br /&gt;정말로 좋은 주석은, 주석을 달지 않을 방법을 찾아낸 주석이라는 사실을!&lt;br /&gt;&lt;br /&gt;_cleancode 70p 중&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석 챕터에 들어오면서 처음 개발 공부하면서 빌드했던 개념들이 와르르 무너지게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석을 사용하면 마냥 좋은 줄 알고 남발했던 모든 주석이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실은 가독성을 해치며 코드를 읽는 이로 하여금 오해하게 만드는 주석이었다니..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  좋은 주석&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책에서 소개하는 좋은 주석의 사레는 &lt;b&gt;법적인 주석&lt;/b&gt;, &lt;b&gt;정보를 제공하는 주석&lt;/b&gt;, &lt;b&gt;의도를 설명하는 주석&lt;/b&gt;, &lt;b&gt;의미를 명료하게 밝히는 주석&lt;/b&gt;, &lt;b&gt;결과를 경고하는 주석&lt;/b&gt;, &lt;b&gt;TODO 주석&lt;/b&gt;, &lt;b&gt;중요성을 강조하는 주석&lt;/b&gt; 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책에서는 이런 좋은 주석들도 가능하면 함수 이름이나 클래스를 만드는 등 코딩적인 방법을 이용해서 주석을 사용하지 않을 수 있으면 더 좋다고 얘기하고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용 중 와닿았던 부분은 읽는 이로 하여금 작성자의 고민과 의도, 꼭 알아야 할 중요한 정보나 경고를 주석으로 남기는 것이었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성자가 문제를 해결한 방식에 동의하지 않을지도 모르지만 그 의도는 분명하게 드러나는 주석. 이런 주석이 좋은 주석이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  나쁜 주석&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나쁜 주석의 사례로는 주절거리는 주석, 같은 이야기를 중복하는 주석, 오해할 여지가 있는 주석, 의무적으로 다는 주석, 이력을 기록하는 주석, 있으나 마나 한 주석, 위치를 표시하는 주석, 닫는 괄호에 다는 주석 등등등이 있는데 대부분의 주석은 여기 해당한다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이틀만 읽어보면 '당연히 이런 주석은 안좋지'라고 생각하게 된다. 하지만 실제로 이러한 주석들이 많이 사용되고 있으며 처음 개발 공부할 때는 이런 주석을 권장하는 것을 여러 번 듣기도 했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 이런 나쁜 주석을 양산하고 있다고 생각하니 멍해짐을 뒤로하고 잠시 고민을 해보았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해보니 코드를 작성하는 데는 공을 들이고 리팩토링도 진행하며 완성도를 높이려고 하지만 주석을 잘 쓰기 위해서는 별로 노력하지 않았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 주석들이 쌓이다 보면 코드를 읽는데 많은 시간이 소요되고 불필요한 잡음이 들어가 오해의 여지가 생길 수 있으니 주석을 작성할 때도 신중하게 작성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 읽을 다른 사람을 위해 배려하는 마음으로 쓰는 좋은 주석은 읽는 이로 하여금 기분 좋은 향을 느끼게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘도 개선할 점을 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>book diary</category>
      <category>CleanCode</category>
      <category>생각공부</category>
      <category>클린코드</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/136</guid>
      <comments>https://a-littlecoding.tistory.com/136#entry136comment</comments>
      <pubDate>Wed, 28 Jun 2023 02:15:16 +0900</pubDate>
    </item>
    <item>
      <title>플래그 인수_CleanCode_52p</title>
      <link>https://a-littlecoding.tistory.com/135</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;플래그 인수는 추하다. 함수로 부울 값을 넘기는 관례는 정말로 끔찍하다. 왜냐고? 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 공표하는 셈이니까! 플래그가 참이면 이걸 하고 거짓이면 저걸 한다는 말이니까!&lt;br /&gt;&lt;br /&gt;-cleancode 52p 중&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니 정말로? 개발하면서 종종 option 같은 느낌으로 boolean 값을 인자로 받아서 쓰는 경우가 있었는데,, 정말로 끔찍하다는 표현을 마주하니 속으로 뜨끔했다.&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;조건에 따른 로직을 서로 다른 함수로 만들기엔 코드 길이가 길어지거나, 일부 중복된 코드가 있고 boolean 값에 따라 추가 로직이 있는 경우를 그렇게 사용했는데 책에서 하는 말처럼 여러 가지를 한다고 대놓고 공표하는 셈이었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해 보면 boolean의 경우뿐 아니라 enum 값과 같이 인자가 A or B or C 일 때나, 인자를 받는 경우를 상정하고 함수를 만들었다가 나중에 인자가 없는 경우의 예외처리를 해줘야 하는 등 비슷한 상황이 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서서 &lt;b&gt;함수를 작게 그리고 더 작게 만들라&lt;/b&gt;는 내용이 있었는데, 플래그 인수를 받는 함수는 적어도 2개 이상의 함수로 쪼갤 수 있었고 함수 이름도 좀 더 자세하게 지을 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘도 내 코드에 개선할 점을 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여유가 있을 때 그리고 생각날 때 조금씩 코드를 바꿔보자&lt;/p&gt;</description>
      <category>book diary</category>
      <category>CleanCode</category>
      <category>생각공부</category>
      <category>클린코드</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/135</guid>
      <comments>https://a-littlecoding.tistory.com/135#entry135comment</comments>
      <pubDate>Fri, 23 Jun 2023 00:28:41 +0900</pubDate>
    </item>
    <item>
      <title>개발자 취업 그 후..</title>
      <link>https://a-littlecoding.tistory.com/133</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개발자가 되기 위해 공부하고 취업하기까지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 그 후..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그동안의 모든 과정을 간략하게 남겨본다.&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;  2021년 9월. 다니던 직장을 그만두었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;2021년 10월. 스파르타 코딩클럽에서 진행하는 국비지원 내일배움캠프 AI웹개발과정에 지원했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;2022년 12월 13일. 예정보다 2주 늦게 과정이 시작되었지만 처음으로 코딩을 배울 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  스택 :&amp;nbsp; 파이썬, 장고, 머신러닝, 웹, 깃허브&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이땐 백엔드, 프론트엔드가 뭔지도 몰랐었지..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span&gt; 2022년 4월 14일. 내일배움캠프 AI웹개발과정을 수료했다.&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;size16&quot;&gt;  2022년 6월. 수료 이후 60군데 이상 지원했지만 서류 통과는 10 ~15%. 면접 결과는 전부 탈락이다.&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;  2022년 7월. 원티드 프리온보딩 백엔드 코스에 지원했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;  스택&lt;span&gt; : &lt;/span&gt;&lt;/span&gt;DRF&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;이맘때쯤 개발자가 되기위해 남아있는 내배캠 동기들은 대부분(80% 이상) 취업을 했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동기들 취업 소식에 기뻐하면서도 마음은 조급했었지,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  2022년 8월. 원티드 프리온보딩 백엔드 코스를 수료했다. 다시 취업에 도전해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  2022년 9월. 20군데 이상 지원을 했지만 전부 떨어졌다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  2022년 10월 24일. 드디어 작은 스타트업에 취업해서 개발자로의 전직을 성공했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퇴사 이후 재취업까지 1년이 조금 넘게 걸렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모아놨던 생활비가 바닥을 보이던 시점이기에 조건도 따지지 않고 ok 해서 걱정이었지만,&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;  2023년 4월 29일. 취업 후 6개월이 지난 지금. 회사가 너무 좋고, 동료들도 너무 좋고, 개발이 너무 재밌다.&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;  Javascript, Typescript&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난 파이썬 언어를 중심으로 한 백엔드 개발자를 지향하고 있었지만 내가 취업하게 된 회사는 자바스크립트와 타입스크립트를 주 언어로 사용해 개발을 하고 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  nodejs, nestjs, prisma&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백엔드 프레임워크는 노드기반의 nest 프레임워크였고 db 쿼리는 prisma를 사용했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  vuejs, quasar&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프론트엔드 프레임워크는 자바스크립트 기반의 vue3에 vue 기반의 ui프레임워크인 quasar를 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트를 제외하면 취업하기 전까지 한 번도 사용해 본 적 없는 기술이지만 입사 후 2주 정도 책과 공식문서를 통해 공부했고 3주 차부터 간단한 기능 구현에 참여해서 지금은 다양한 개발 과정에 참여하고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백엔드 개발자가 되고 싶었지만 지금은 백엔드에 30% 프론트에 70% 참여하고 있어서 사실상 프론트엔드 개발자가 되어버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6개월간 개발을 하면서 큰 테마로 가장 어려웠던 건 다음 2가지였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  소셜로그인 통합회원 구축&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  canvas, Hammerjs, chartjs. 이미지, 차트 커스텀&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 소셜로그인을 간단하게 구현할 때는 몰랐지만 여러 서비스 간 회원 통합을 구축하려면 각 소셜 서비스가 해당 기능을 제공할 수 있는지 파악을 해야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 제공되는 API나 서비스로 불가능할 경우 해당 소셜 서비스의 담당자들과 소통하며 별도의 마이그레이션이나 업드레이드된 서비스를 제공받아야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거기에 통합을 하려고 하는 서비스 간 소통도 매우 중요했는데, 썰을 하나 풀면 운영 중인 상대 서비스에서 잘못된 ID를 저장하고 있었지만 운영중인 서비스라고 배를 째버려서,, 고생을 했다.&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;canvas.. 그리고 캔버스를 사용한 라이브러리..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 백엔드와 프론트를 떠난 무언가였다.,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그동안 새로운 기술을 배우고, 회사에 적응하고, 개발과정에 힘 쏟느라 블로그 관리에 소홀했지만 조금의 여유를 되찾은 지금. 다시 시작하려 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  그동안은 알고리즘, 백엔드, 파이썬 위주의 글을 올렸지만 이젠 프론트, 백엔드는 상관없이 javascript, typescript언어를 사용하는 기술 위주로 블로깅을 할 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>작은코딩 개발 일기</category>
      <category>Canvas</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>괴물</category>
      <category>취업</category>
      <category>취업 그 후</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/133</guid>
      <comments>https://a-littlecoding.tistory.com/133#entry133comment</comments>
      <pubDate>Sat, 29 Apr 2023 15:59:37 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스 level3] 정수 삼각형 | Python (동적계획법)</title>
      <link>https://a-littlecoding.tistory.com/132</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/43105&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/43105&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667439154274&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/43105&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VGlUX/hyQqXFeFNr/2bK6KqjUAaBkRsV41wUOqk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/e2pfd/hyQqK0aH1Z/pEvcJfhaQRLnCt22414jIK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/43105&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/43105&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VGlUX/hyQqXFeFNr/2bK6KqjUAaBkRsV41wUOqk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/e2pfd/hyQqK0aH1Z/pEvcJfhaQRLnCt22414jIK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nAoPS/btrQh4xnX24/XBYW6853zWkKRQlJiyok70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nAoPS/btrQh4xnX24/XBYW6853zWkKRQlJiyok70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nAoPS/btrQh4xnX24/XBYW6853zWkKRQlJiyok70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnAoPS%2FbtrQh4xnX24%2FXBYW6853zWkKRQlJiyok70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;368&quot; height=&quot;300&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.&lt;/p&gt;
제한사항
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;삼각형의 높이는 1 이상 500 이하입니다.&lt;/li&gt;
&lt;li&gt;삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.&lt;/li&gt;
&lt;/ul&gt;
입출력 예&lt;/div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;triangle&lt;/td&gt;
&lt;td&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]]&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;nbsp;풀이&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  문제 해결 / 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1667438551993&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(triangle):
    n = len(triangle) - 1
    # 0층은 계산할 필요가 없어서 1층부터 시작
    floor = 1
    index = 0
    
    # 0층       7
    # 1층     10 15
    # 2층    18 16 15
    # 3층   20 25 20 19
    # 4층  24 30 27 26 24

    while True:
        # 해당층 마지막 원소    
        if index == len(triangle[floor]) - 1:
            triangle[floor][index] += triangle[floor-1][index-1]
            # 마지막 층이면 while문 탈출
            if floor == n:
                break
            else:
                floor += 1
                index = 0
                continue
        
        # 연산: 현재 원소의 인덱스가 0이라면 전층의 인덱스 0의 원소와 더하기
        # 아니라면, 전층의 현재 원소 인덱스 - 1의 원소와 현재 원소 인덱스의 원소 중 큰 수와 더하기
        if index == 0:
            triangle[floor][index] += triangle[floor-1][index]
        else:
            if triangle[floor-1][index] &amp;gt;= triangle[floor-1][index-1]:
                triangle[floor][index] += triangle[floor-1][index]
            else:
                triangle[floor][index] += triangle[floor-1][index-1]
        # 다음 원소 검사
        index += 1
    return max(triangle[-1])
    
print(solution([[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]]))&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  Story&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 풀면서 동적계획법 이란 단어를 처음 들어봐서 구글에 검색을 해봤다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;최적화 이론&lt;/b&gt;의 한 기술이며, 특정 범위까지의 값을 구하기 위해서 그것과 &lt;b&gt;다른 범위까지의 값을 이용&lt;/b&gt;하여 효율적으로 값을 구하는 알고리즘 설계 기법이다. &lt;br /&gt;&lt;br /&gt;조금 장난스럽게 말해서 &lt;b&gt;답을 재활용&lt;/b&gt;하는 거다. 앞에서 구했던 답을 뒤에서도 이용하고, 옆에서도 이용하고...엄밀히 말해 동적 계획법은 구체적인 알고리즘이라기보다는 문제해결 패러다임에 가깝다. 동적 계획법은 &quot;어떤 문제를 풀기 위해 그 문제를 더 작은 문제의 연장선으로 생각하고, 과거에 구한 해를 활용하는&quot; 방식의 알고리즘을 총칭한다. &lt;br /&gt;&lt;br /&gt;답을 구하기 위해서 했던 계산을 또 하고 또 하고 계속해야 하는 종류의 문제의 구조를 &lt;b&gt;최적 부분 구조&lt;/b&gt;(Optimal Substructure)라고 부른다. 동적 계획법은 이런 문제에서 효과를 발휘한다.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적계획법에 대해 읽어보던 중 최적 부분 구조라는 단어도 생소해서 찾아보니 &lt;b&gt;그리디&lt;/b&gt;와 관련이 있었다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;문제의 최적 해결 방법은&lt;b&gt; 부분 문제에 대한 최적 해결 방법&lt;/b&gt;으로 구성된다. 이러한 구조를 &lt;b&gt;최적 부분 구조&lt;/b&gt;라 한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음엔 감이 잡히지 않아서 손에 잡히는 대로 코딩을 하다 보니,, 완전 탐색 형식의 알고리즘을 작성했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 경우의 수를 구해서 가장 큰 값을 리턴했고, 당연하게도 효율성이 나쁜 코드였다.&lt;/p&gt;
&lt;pre id=&quot;code_1667439242820&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 전역 변수인 answer를 함수안에서 막 참조하니 문제 풀기위한 방법이긴 해도 좋은 코드는 아니다
answer = []

def special_solution(triangle, floor, max_floor, index=0, result=0):
    if floor == max_floor:
        answer.append(triangle[floor][index] + result)
        return
    special_solution(triangle, floor+1, max_floor, index, result+triangle[floor][index])
    special_solution(triangle, floor+1, max_floor, index+1, result+triangle[floor][index])


def solution(triangle):
    special_solution(triangle, 0, len(triangle)-1)
    return max(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 아니다 싶어서 동적계획법의 설명을 다시 읽어보던 중 &lt;b&gt;문제를 쪼개고&lt;/b&gt;, &lt;b&gt;답을 재활용&lt;/b&gt;한다는 키워드로 아이디어가 떠올랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  Idea&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nAoPS/btrQh4xnX24/XBYW6853zWkKRQlJiyok70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nAoPS/btrQh4xnX24/XBYW6853zWkKRQlJiyok70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nAoPS/btrQh4xnX24/XBYW6853zWkKRQlJiyok70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnAoPS%2FbtrQh4xnX24%2FXBYW6853zWkKRQlJiyok70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;368&quot; height=&quot;300&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림의 문제를 쪼개서 생각해보니 해법이 보였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제에서 7(0층)부터 시작해 마지막 층까지 합을 구할 때 총 3가지 패턴이 존재한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 현재 층의 0번째 인덱스의 원소는 무조건 전 층의 0번째 인덱스의 원소와 더해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 현재 층의 마지막 인덱스의 원소는 무조건 전 층의 마지막 인덱스의 원소와 더해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 위 두가지 경우의 수를 제외한 원소는 2개의 경우의 수가 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 전 층의 현재 인덱스의 원소와 더하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 전 층의 현재 인덱스에 1을 뺸 인덱스의 원소와 더하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3번의 패턴에서는 그리디 방법을 통해 2가지 경우에서 가장 큰 수와 더하게 되면&amp;nbsp; 큰 피라미드가 작은 피라미드로 쪼개지게 되고, 작은 피라미드에서 구한 값을 큰 피라미드 결과를 구하기 위해 계속 사용되어 동적 계획법에 따른 알고리즘이 만들어졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kz63V/btrQkQmdmxb/jS8nKZfNLFeT9TxjCSJYY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kz63V/btrQkQmdmxb/jS8nKZfNLFeT9TxjCSJYY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kz63V/btrQkQmdmxb/jS8nKZfNLFeT9TxjCSJYY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkz63V%2FbtrQkQmdmxb%2FjS8nKZfNLFeT9TxjCSJYY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;490&quot; height=&quot;435&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림으로 예를 들면 더 이해가 쉬울거라 생각한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;0층의 7은 이전에 더할 층이 없으므로 7이 된다. (계산 로직에서 제외, 코드에서도 0층이 아닌 1층부터 시작한다)&lt;br /&gt;1층의 3과 8은 1,2번 패턴에 의해 더할 값이 7로 제한된다. 따라서 10 15가 되는 게 최적이다.&lt;br /&gt;2층의 8 1 0 중 8은 1번패턴 0은 2번 패턴으로 계산되고 1은 3번 패턴에 의해 계산된다.&amp;nbsp;&lt;br /&gt;2층은&lt;br /&gt;&amp;nbsp; &amp;nbsp; 8은 10을 더해서 18&lt;br /&gt;&amp;nbsp; &amp;nbsp; 1은 10과 15중 큰 수와 더해서 16&lt;br /&gt;&amp;nbsp; &amp;nbsp; 0은 15를 더해서 15&lt;br /&gt;가 되는게 최적이다.&lt;br /&gt;&lt;br /&gt;이렇게 계산을 이어가다 보면 4층에서는 24 30 27 26 24가 최적이 되고 가장 큰 수는 30이다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JS언어로도 풀어보고 싶지만 이 문제에서는 지원하지 않아서 PASS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  참고자료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EB%8F%99%EC%A0%81%20%EA%B3%84%ED%9A%8D%EB%B2%95#toc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://namu.wiki/w/%EB%8F%99%EC%A0%81%20%EA%B3%84%ED%9A%8D%EB%B2%95#toc&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667438854229&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;동적 계획법 - 나무위키&quot; data-og-description=&quot;동적 계획법의 개념과 구현에 대해 정확하게 짚고 넘어가기 위해 동적 계획법을 적용시킬 수 있는 예에 대해 알아보자. f(a,b) = f(a-1,b) + f(a,b-1) (a,b &amp;gt;= 1 )f(0,0) = 1, 임의의 자연수 n에 대해 f(n,0) = f(0,&quot; data-og-host=&quot;namu.wiki&quot; data-og-source-url=&quot;https://namu.wiki/w/%EB%8F%99%EC%A0%81%20%EA%B3%84%ED%9A%8D%EB%B2%95#toc&quot; data-og-url=&quot;https://namu.wiki/w/%EB%8F%99%EC%A0%81%20%EA%B3%84%ED%9A%8D%EB%B2%95#toc&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eK2XTE/hyQr9D2teK/Bwy8c8ca7irnWcXKdHwlsk/img.png?width=250&amp;amp;height=275&amp;amp;face=0_0_250_275&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EB%8F%99%EC%A0%81%20%EA%B3%84%ED%9A%8D%EB%B2%95#toc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://namu.wiki/w/%EB%8F%99%EC%A0%81%20%EA%B3%84%ED%9A%8D%EB%B2%95#toc&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eK2XTE/hyQr9D2teK/Bwy8c8ca7irnWcXKdHwlsk/img.png?width=250&amp;amp;height=275&amp;amp;face=0_0_250_275');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;동적 계획법 - 나무위키&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;동적 계획법의 개념과 구현에 대해 정확하게 짚고 넘어가기 위해 동적 계획법을 적용시킬 수 있는 예에 대해 알아보자. f(a,b) = f(a-1,b) + f(a,b-1) (a,b &amp;gt;= 1 )f(0,0) = 1, 임의의 자연수 n에 대해 f(n,0) = f(0,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;namu.wiki&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>python</category>
      <category>동적계획법</category>
      <category>알고리즘</category>
      <category>정수 삼각형</category>
      <category>프로그래머스</category>
      <author>작은코딩</author>
      <guid isPermaLink="true">https://a-littlecoding.tistory.com/132</guid>
      <comments>https://a-littlecoding.tistory.com/132#entry132comment</comments>
      <pubDate>Thu, 3 Nov 2022 11:01:03 +0900</pubDate>
    </item>
  </channel>
</rss>