<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>현수 세상</title>
    <link>https://junghyeonsu.tistory.com/</link>
    <description>깃허브 : https://github.com/junghyeonsu
개인 블로그 : https://junghyeonsu.com/
(양질의 글을 올리려고 항상 노력합니다.)</description>
    <language>ko</language>
    <pubDate>Sat, 30 May 2026 10:51:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>정현수</managingEditor>
    <image>
      <title>현수 세상</title>
      <url>https://tistory1.daumcdn.net/tistory/4035099/attach/2be66e0f219f49fe9f4926631f60e74a</url>
      <link>https://junghyeonsu.tistory.com</link>
    </image>
    <item>
      <title>[백준] 16935번: 배열 돌리기 3 (JavaScript, NodeJS)</title>
      <link>https://junghyeonsu.tistory.com/297</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AKZyk/btrEZdenc9e/jg7RslX9YUVTvKOKIfyZJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AKZyk/btrEZdenc9e/jg7RslX9YUVTvKOKIfyZJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AKZyk/btrEZdenc9e/jg7RslX9YUVTvKOKIfyZJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAKZyk%2FbtrEZdenc9e%2Fjg7RslX9YUVTvKOKIfyZJ0%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;333&quot; height=&quot;333&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정답 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1655369828103&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.

let input = require(&quot;fs&quot;)
  .readFileSync(path)
  .toString()
  .trim()
  .split(&quot;\n&quot;)
  .map(i =&amp;gt; i.split(' ').map(Number));

/* input 정리 */
const [N, M, R] = input.shift();
const calculators = input.pop();

/* 문제 풀이 */
const go = (...args) =&amp;gt; args.reduce((a, f) =&amp;gt; f(a));

for (const calculator of calculators) {
  switch (calculator) {
    case 1: upDownReverse(); break;
    case 2: leftRightReverse(); break;
    case 3: right90degreeRotate(); break;
    case 4: left90degreeRotate(); break;
    case 5: divideFourSectionAndRotateRight(); break;
    case 6: divideFourSectionAndRotateLeft(); break;
  }
}

input.forEach(i =&amp;gt; console.log(i.join(' ')));

// 1
function upDownReverse() {
  input = [...input].reverse();
}

// 2
function leftRightReverse() {
  input = input.map(row =&amp;gt; [...row].reverse());
}

// 3
function right90degreeRotate() {
  const n = input.length;
  const m = input[0].length;
  const newArray = Array.from({ length: m }, () =&amp;gt; Array.from({ n }));

  for (let i = 0; i &amp;lt; m; i++) {
    for (let j = 0; j &amp;lt; n; j++) {
      newArray[i][j] = input[n - j - 1][i]; 
    }
  }

  input = newArray
}

// 4
function left90degreeRotate() {
  return go(
    input,
    right90degreeRotate,
    right90degreeRotate,
    right90degreeRotate,
  );
}

// 5
function divideFourSectionAndRotateRight() {
  const n = input.length / 2;
  const m = input[0].length / 2;
  const top = input.slice(0, n);
  const bottom = input.slice(n);

  const part1 = top.map(row =&amp;gt; row.slice(0, m));
  const part2 = top.map(row =&amp;gt; row.slice(m));
  const part3 = bottom.map(row =&amp;gt; row.slice(0, m));
  const part4 = bottom.map(row =&amp;gt; row.slice(m));

  input = [
    ...part3.map((row, index) =&amp;gt; [...row, ...part1[index]]),
    ...part4.map((row, index) =&amp;gt; [...row, ...part2[index]]),
  ];
}

// 6
function divideFourSectionAndRotateLeft() {
  return go(
    input,
    divideFourSectionAndRotateRight,
    divideFourSectionAndRotateRight,
    divideFourSectionAndRotateRight,
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/백준</category>
      <category>백준</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/297</guid>
      <comments>https://junghyeonsu.tistory.com/297#entry297comment</comments>
      <pubDate>Thu, 16 Jun 2022 17:57:39 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 20438번: 출석체크 (JavaScript, NodeJS)</title>
      <link>https://junghyeonsu.tistory.com/296</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xvdxv/btrENEZuJcT/T78Ug8fYg5rRkvAkD2al1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xvdxv/btrENEZuJcT/T78Ug8fYg5rRkvAkD2al1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xvdxv/btrENEZuJcT/T78Ug8fYg5rRkvAkD2al1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxvdxv%2FbtrENEZuJcT%2FT78Ug8fYg5rRkvAkD2al1k%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;333&quot; height=&quot;333&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정답 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1655277642237&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.

const input = require(&quot;fs&quot;)
  .readFileSync(path)
  .toString()
  .trim()
  .split(&quot;\n&quot;)
  .map(i =&amp;gt; i.split(' ').map(Number));

function solution(input) {
  /* input 정리 */
  const [N, K, Q, M] = input[0];
  const sleeps = input[1];
  const students = input[2].filter(student =&amp;gt; !sleeps.includes(student));

  /* 문제 풀이 */
  const preSum = [0, 0, 0];
  
  for (let i = 3; i &amp;lt;= N + 2; i++) {
    preSum[i] = preSum[i - 1];
    
    if (sleeps.includes(i)) continue;
    
    for (const student of students) {
      if (i % student === 0) {
        preSum[i] += 1;
        break;
      }
    }
  }

  let answer = '';
  for (let i = 3; i &amp;lt; M + 3; i++) {
    const [S, E] = input[i];
    answer += E - S + 1 - (preSum[E] - preSum[S - 1]) + '\n';
  }

  console.log(answer.substring(0, answer.length - 1));
}

solution(input);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/백준</category>
      <category>백준</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/296</guid>
      <comments>https://junghyeonsu.tistory.com/296#entry296comment</comments>
      <pubDate>Wed, 15 Jun 2022 16:20:55 +0900</pubDate>
    </item>
    <item>
      <title>블로그 이동했습니다.</title>
      <link>https://junghyeonsu.tistory.com/295</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://junghyeonsu.com&quot;&gt;https://junghyeonsu.com&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1668932961630&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;junghyeonsu.com&quot; data-og-source-url=&quot;https://junghyeonsu.com&quot; data-og-url=&quot;https://junghyeonsu-dev.vercel.app&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXbDLP/hyQDrSWvyF/cdn6km3sdBPUoXU4nOeVb0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://junghyeonsu.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://junghyeonsu.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXbDLP/hyQDrSWvyF/cdn6km3sdBPUoXU4nOeVb0/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;junghyeonsu.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;옮긴 이유는&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 나만의 블로그를 가지고 싶어서 (내가 온전히 커스터마이징 할 수 있는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 어떤 플랫폼에 종속되기 싫어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 블로그 포스팅하면서 잔디 심고 싶어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;만들어 보니 어떤가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상당히 많이 귀찮다. (RSS 설정, SEO 신경쓰기, 스타일링, 자동화, 구글 애널리틱스 달기 등등)&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. 예쁘다.&lt;/p&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;Feedly 이용해서 구독도 해주시면,, 감사합니다.&lt;/p&gt;</description>
      <category>블로그 이등</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/295</guid>
      <comments>https://junghyeonsu.tistory.com/295#entry295comment</comments>
      <pubDate>Fri, 8 Apr 2022 19:33:28 +0900</pubDate>
    </item>
    <item>
      <title>블로그 이동</title>
      <link>https://junghyeonsu.tistory.com/notice/294</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://junghyeonsu-dev.vercel.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://junghyeonsu-dev.vercel.app/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1649413572123&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;junghyeonsu-dev.vercel.app&quot; data-og-source-url=&quot;https://junghyeonsu-dev.vercel.app/&quot; data-og-url=&quot;https://junghyeonsu-dev.vercel.app&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/E9jYv/hyNYFlsDFj/LJp0x8tyLJC9zOJoG0xeC1/img.jpg?width=2791&amp;amp;height=2800&amp;amp;face=1220_931_1403_1132&quot;&gt;&lt;a href=&quot;https://junghyeonsu-dev.vercel.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://junghyeonsu-dev.vercel.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/E9jYv/hyNYFlsDFj/LJp0x8tyLJC9zOJoG0xeC1/img.jpg?width=2791&amp;amp;height=2800&amp;amp;face=1220_931_1403_1132');&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;junghyeonsu-dev.vercel.app&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/notice/294</guid>
      <pubDate>Fri, 8 Apr 2022 19:26:17 +0900</pubDate>
    </item>
    <item>
      <title>[NEXTSTEP 자바스크립트 클린코드 2기] 환경설정</title>
      <link>https://junghyeonsu.tistory.com/293</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;eslint, prettier 설치&lt;/h2&gt;
&lt;pre id=&quot;code_1646807651293&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -D eslint eslint-config-airbnb-base eslint-config-prettier eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-prettier prettier​&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 eslint와 Prettier를 설치해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;.eslintrc.js&lt;/h2&gt;
&lt;pre id=&quot;code_1646807679898&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;module.exports = {
  env: {
    browser: true,
    es2021: true,
    node: true,
  },
  extends: ['eslint:recommended', 'airbnb-base', 'prettier'],
  plugins: ['prettier'],
  rules: {
    'import/prefer-default-export': 'off',
    'import/extensions': ['off'],
    'class-methods-use-this': 'off',
    'no-alert': 'off',
    'no-undef': 'off',
    'no-new': 'off',
  },
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;eslint 내용을 작성해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 numeric-separators을 활용하고 싶다면 추가적인 설정이 필요하다.&lt;/p&gt;
&lt;pre id=&quot;code_1648558444043&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  parserOptions: {
    ecmaVersion: 2021,
  },&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;numeric-separators이 ecma 2021 버전에서만 동작하기 때문에 &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;numeric-separators을 사용하고 싶다면 eslintrc에 추가!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;.prettierrc.js&lt;/h2&gt;
&lt;pre id=&quot;code_1646807701675&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;module.exports = {
  singleQuote: true,
  semi: true,
  useTabs: false,
  tabWidth: 2,
  trailingComma: 'all',
  printWidth: 100,
  bracketSpacing: true,
  arrowParens: 'avoid',
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prettierc 파일도 작성!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Cypress 설치&lt;/h2&gt;
&lt;pre id=&quot;code_1648558554430&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install cypress --save-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후에 만약 cypress 폴더랑 cypress.json 파일이 생성되지 않으면&lt;/p&gt;
&lt;pre id=&quot;code_1648558582506&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx cypress open&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령어를 통해서 cypress 폴더랑 cypress.json 파일을 생성&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;cypress-watch-and-reload 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cypress로 TDD를 할 때, 코드가 저장될 때 마다 테스트를 돌리고 싶다면 해당 라이브러리를 설치해서 설정해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;cypress.json 설정&lt;/h2&gt;
&lt;pre id=&quot;code_1648558992208&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;video&quot;: false,
  &quot;baseUrl&quot;: &quot;http://localhost:8080&quot;,
  &quot;cypress-watch-and-reload&quot;: {
    &quot;watch&quot;: &quot;src/js/*&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;baseUrl은 live-server했을 때 구동되는 포트번호로 맞춰서 쓰면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;video: false는 테스트 실패 시 테스트 실패에 관한 비디오를 만드는 것인데, 용량을 위해서 사용하지 않는다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;cypress-watch-and-reload 설치&lt;/h2&gt;
&lt;pre id=&quot;code_1649999970794&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install cypress-watch-and-reload&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;cypress/plugins/index.js 파일 수정&lt;/h2&gt;
&lt;pre id=&quot;code_1648559111704&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/// &amp;lt;reference types=&quot;cypress&quot; /&amp;gt;
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************

// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)

module.exports = (on, config) =&amp;gt; {
  // https://github.com/bahmutov/cypress-watch-and-reload
  // eslint-disable-next-line global-require
  require('cypress-watch-and-reload/plugins')(config);
  // IMPORTANT: return the config object
  // because the plugin might have changed it
  return config;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;cypress/integration/_.spec.js 파일 생성&lt;/h2&gt;
&lt;pre id=&quot;code_1648559217995&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;describe('자동차 경주 게임', () =&amp;gt; {
  it('테스트1', () =&amp;gt; {
    expect(true).to.be(false);
  });
});&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;그리고 열심히 개발을 진행하면 된다...!&lt;/p&gt;</description>
      <category>NEXTSTEP 자바스크립트 클린코드 2기</category>
      <category>nextstep</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/293</guid>
      <comments>https://junghyeonsu.tistory.com/293#entry293comment</comments>
      <pubDate>Wed, 9 Mar 2022 15:38:21 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 15486번: 퇴사2 (JavaScript, NodeJS)</title>
      <link>https://junghyeonsu.tistory.com/292</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b15Yaz/btrtb14IRHu/BKtB58On3NNFBKTGK4jlC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b15Yaz/btrtb14IRHu/BKtB58On3NNFBKTGK4jlC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b15Yaz/btrtb14IRHu/BKtB58On3NNFBKTGK4jlC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb15Yaz%2Fbtrtb14IRHu%2FBKtB58On3NNFBKTGK4jlC0%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;333&quot; height=&quot;333&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N = 7인 경우에 다음과 같은 상담 일정표를 보자.&lt;/p&gt;
&amp;nbsp;1일2일3일4일5일6일7일TiPi
&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&gt;3&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 15이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상담을 하는데 필요한 기간은 1일보다 클 수 있기 때문에, 모든 상담을 할 수는 없다. 예를 들어서 1일에 상담을 하게 되면, 2일, 3일에 있는 상담은 할 수 없게 된다. 2일에 있는 상담을 하게 되면, 3, 4, 5, 6일에 잡혀있는 상담은 할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, N+1일째에는 회사에&amp;nbsp;없기 때문에, 6, 7일에 있는 상담을 할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퇴사 전에 할 수 있는 상담의 최대 이익은 1일, 4일, 5일에 있는 상담을 하는 것이며, 이때의 이익은 10+20+15=45이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상담을 적절히 했을 때, 백준이가 얻을 수 있는 최대 수익을 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 N (1 &amp;le; N &amp;le; 1,500,000)이 주어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 &amp;le; Ti&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;le; 50, 1 &amp;le; Pi&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;le;&amp;nbsp;1,000)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;basic&quot;&gt;&lt;code&gt;7
3 10
5 20
1 10
1 20
2 15
4 40
2 200
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;45
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-2&quot; class=&quot;basic&quot;&gt;&lt;code&gt;10
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-2&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;55
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 3&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-3&quot; class=&quot;basic&quot;&gt;&lt;code&gt;10
5 10
5 9
5 8
5 7
5 6
5 10
5 9
5 8
5 7
5 6
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 3&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-3&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;20
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 4&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-4&quot; class=&quot;basic&quot;&gt;&lt;code&gt;10
5 50
4 40
3 30
2 20
1 10
1 10
2 20
3 30
4 40
5 50
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 4&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-4&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;90&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정답 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1644752756876&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.
let [n, ...inputsBeforeMakeUp] = require(&quot;fs&quot;)
  .readFileSync(path)
  .toString()
  .trim()
  .split(&quot;\n&quot;);

const N = +n;
const inputs = inputsBeforeMakeUp.map((input) =&amp;gt; input.split(&quot; &quot;).map(Number));

function solution(N, inputs) {
  const dp = new Array(N + 1).fill(0);
  let max = 0;

  for (let i = 0; i &amp;lt; N; i += 1) {
    max = Math.max(max, dp[i]);

    const [day, pay] = inputs[i];
    if (i + day &amp;lt;= N) dp[i + day] = Math.max(dp[i + day], max + pay);
  }

  return Math.max(...dp);
}

const answer = solution(N, inputs);
console.log(answer);&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;⭐ 문제 핵심 아이디어 ⭐&lt;br /&gt;1. DP&lt;/blockquote&gt;</description>
      <category>알고리즘/백준</category>
      <category>백준</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/292</guid>
      <comments>https://junghyeonsu.tistory.com/292#entry292comment</comments>
      <pubDate>Sun, 13 Feb 2022 20:47:59 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 1106번: 호텔 (JavaScript, NodeJS)</title>
      <link>https://junghyeonsu.tistory.com/291</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcTUzk/btrtb29SCHy/vycnV46pj3pApyraVfkKL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcTUzk/btrtb29SCHy/vycnV46pj3pApyraVfkKL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcTUzk/btrtb29SCHy/vycnV46pj3pApyraVfkKL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcTUzk%2Fbtrtb29SCHy%2FvycnV46pj3pApyraVfkKL1%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;333&quot; height=&quot;333&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&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;ldquo;어떤 도시에서 9원을 들여서 홍보하면 3명의 고객이 늘어난다.&amp;rdquo;와 같은 정보이다. 이때, 이러한 정보에 나타난 돈에 정수배 만큼을 투자할 수 있다. 즉, 9원을 들여서 3명의 고객, 18원을 들여서 6명의 고객, 27원을 들여서 9명의 고객을 늘어나게 할 수 있지만, 3원을 들여서 홍보해서 1명의 고객, 12원을 들여서 4명의 고객을 늘어나게 할 수는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 도시에는 무한 명의 잠재적인 고객이 있다. 이때, 호텔의 고객을 적어도 C명 늘이기 위해 형택이가 투자해야 하는 돈의 최솟값을 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 C와 형택이가 홍보할 수 있는 도시의 개수 N이 주어진다. C는 1,000보다 작거나 같은 자연수이고, N은 20보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 각 도시에서 홍보할 때 대는 비용과 그 비용으로 얻을 수 있는 고객의 수가 주어진다. 이 값은 100보다 작거나 같은 자연수이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 문제의 정답을 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;basic&quot;&gt;&lt;code&gt;12 2
3 5
1 1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;8&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-2&quot; class=&quot;basic&quot;&gt;&lt;code&gt;10 3
3 1
2 2
1 3
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-2&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;4
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 3&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-3&quot; class=&quot;basic&quot;&gt;&lt;code&gt;10 10
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 3&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-3&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;10
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 4&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-4&quot; class=&quot;basic&quot;&gt;&lt;code&gt;100 6
4 9
9 11
3 4
8 7
1 2
9 8
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 4&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-4&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;45&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정답 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1644669353016&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.
let [inputs, ...casesBeforeNormalize] = require(&quot;fs&quot;)
  .readFileSync(path)
  .toString()
  .trim()
  .split(&quot;\n&quot;);

const [C, N] = inputs.split(&quot; &quot;).map(Number);
const cases = casesBeforeNormalize.map((i) =&amp;gt; i.split(&quot; &quot;).map(Number));

function solution(C, N, cases) {
  const sortedCases = cases.sort((a, b) =&amp;gt; a[0] - b[0]);
  const dp = Array(C + 1).fill(Infinity);
  dp[0] = 0;

  for (let [cost, customN] of sortedCases) {
    if (dp[customN] &amp;gt; cost) dp[customN] = cost;
    for (let i = 1; i &amp;lt;= C; i += 1) {
      dp[i] =
        i &amp;lt; customN
          ? Math.min(dp[i], cost)
          : Math.min(dp[i], dp[customN] + dp[i - customN]);
    }
  }

  console.log(dp[C]);
}

solution(C, N, cases);&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;⭐ 문제 핵심 아이디어 ⭐&lt;br /&gt;1. DP&lt;br /&gt;2. dp[i]의 정의는 i번째일 때 제일 최소인 비용&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/백준</category>
      <category>백준</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/291</guid>
      <comments>https://junghyeonsu.tistory.com/291#entry291comment</comments>
      <pubDate>Sat, 12 Feb 2022 21:38:03 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 9465번: 스티커 (JavaScript, NodeJS)</title>
      <link>https://junghyeonsu.tistory.com/290</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7zRaL/btrs7ATNdPd/IkvxpKxbi0xzx3wtx5wc71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7zRaL/btrs7ATNdPd/IkvxpKxbi0xzx3wtx5wc71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7zRaL/btrs7ATNdPd/IkvxpKxbi0xzx3wtx5wc71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7zRaL%2Fbtrs7ATNdPd%2FIkvxpKxbi0xzx3wtx5wc71%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;333&quot; height=&quot;333&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBNKWp/btrs8BLpEAZ/g4nexPPDsGfsVQU1PXho9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBNKWp/btrs8BLpEAZ/g4nexPPDsGfsVQU1PXho9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBNKWp/btrs8BLpEAZ/g4nexPPDsGfsVQU1PXho9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBNKWp%2Fbtrs8BLpEAZ%2Fg4nexPPDsGfsVQU1PXho9k%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;575&quot; height=&quot;150&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;모든 스티커를 붙일 수 없게된 상냥이는 각 스티커에 점수를 매기고, 점수의 합이 최대가 되게 스티커를 떼어내려고 한다. 먼저, 그림 (b)와 같이 각 스티커에 점수를 매겼다. 상냥이가 뗄 수 있는 스티커의 점수의 최댓값을 구하는 프로그램을 작성하시오. 즉, 2n개의 스티커 중에서 점수의 합이 최대가 되면서 서로 변을 공유 하지 않는 스티커 집합을 구해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 그림의 경우에 점수가 50, 50, 100, 60인 스티커를 고르면, 점수는 260이 되고 이 것이 최대 점수이다. 가장 높은 점수를 가지는 두 스티커 (100과 70)은 변을 공유하기 때문에, 동시에 뗄 수 없다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 &amp;le; n &amp;le; 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 점수이다. 연속하는 두 정수 사이에는 빈 칸이 하나 있다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 테스트 케이스 마다, 2n개의 스티커 중에서 두 변을 공유하지 않는 스티커 점수의 최댓값을 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;basic&quot;&gt;&lt;code&gt;2
5
50 10 100 20 40
30 50 70 10 60
7
10 30 10 50 100 20 40
20 40 30 50 60 20 80
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;260
290&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정답 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1644580031032&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.
let [T, ...cases] = require(&quot;fs&quot;)
  .readFileSync(path)
  .toString()
  .trim()
  .split(&quot;\n&quot;);

function solution(T, cases) {
  for (let i = 0; i &amp;lt; T; i += 1) {
    const n = cases[i * 3];
    const line1 = cases[i * 3 + 1].split(' ').map(Number);
    const line2 = cases[i * 3 + 2].split(' ').map(Number);

    const dp = [[0, line1[0], line2[0]]];
    for (let j = 1; j &amp;lt; n; j += 1) {
      dp[j] = [
        Math.max(...dp[j - 1]),
        Math.max(dp[j - 1][0], dp[j - 1][2]) + line1[j],
        Math.max(dp[j - 1][0], dp[j - 1][1]) + line2[j],
      ];
    }

    console.log(Math.max(...dp[n - 1]));
  }
}

solution(T, cases);&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;⭐ 문제 핵심 아이디어 ⭐&lt;br /&gt;1. DP&lt;br /&gt;2. 하나의 열에서 고를 수 있는 가짓수는 3가지다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 두개의 행에서 아무것도 안 고를 때&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 위의 행을 고를 때&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 아래의 행을 고를 때&lt;br /&gt;3. 그 다음 dp 배열에서 하나의 열에서 고를 수 있는 최대 값은 다음과 같다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 이전 열에서 최댓값 (아무것도 고르지 않았으니 최대값을 고르면 된다.)&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 이전 열에서 아무것도 고르지 않은 경우와 이전 열에서 아래의 행을 골랐을 경우 중에 최대값&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 이전 열에서 아무것도 고르지 않은 경우아 이전 열에서 위의 행을 골랐을 경우 중에 최대값&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/백준</category>
      <category>백준</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/290</guid>
      <comments>https://junghyeonsu.tistory.com/290#entry290comment</comments>
      <pubDate>Fri, 11 Feb 2022 20:49:55 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 1890번: 점프 (JavaScript, NodeJS)</title>
      <link>https://junghyeonsu.tistory.com/289</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E6w6P/btrsYb8x40G/XHjJWVRguvjtFRNnSN7YeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E6w6P/btrsYb8x40G/XHjJWVRguvjtFRNnSN7YeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E6w6P/btrsYb8x40G/XHjJWVRguvjtFRNnSN7YeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE6w6P%2FbtrsYb8x40G%2FXHjJWVRguvjtFRNnSN7YeK%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;333&quot; height=&quot;333&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N&amp;times;N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거리를 의미한다. 반드시 오른쪽이나 아래쪽으로만 이동해야 한다. 0은 더 이상 진행을 막는 종착점이며, 항상 현재 칸에 적혀있는 수만큼 오른쪽이나 아래로 가야 한다. 한 번 점프를 할 때, 방향을 바꾸면 안 된다. 즉, 한 칸에서 오른쪽으로 점프를 하거나, 아래로 점프를 하는 두 경우만 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 이동할 수 있는 경로의 개수를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 게임 판의 크기 N (4 &amp;le; N &amp;le; 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장 오른쪽 아래 칸에는 항상 0이 주어진다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 문제의 규칙에 맞게 갈 수 있는 경로의 개수를 출력한다.&amp;nbsp;&lt;span&gt;경로의 개수는 2&lt;/span&gt;63&lt;span&gt;-1보다 작거나 같다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;basic&quot;&gt;&lt;code&gt;4
2 3 3 1
1 2 1 3
1 2 3 1
3 1 1 0
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;3
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-02-10 오후 6.46.57.png&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dt6PFM/btrsYIdGSaG/r2m2ukoj1LkqzkqkU9BP9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dt6PFM/btrsYIdGSaG/r2m2ukoj1LkqzkqkU9BP9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dt6PFM/btrsYIdGSaG/r2m2ukoj1LkqzkqkU9BP9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdt6PFM%2FbtrsYIdGSaG%2Fr2m2ukoj1LkqzkqkU9BP9K%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;1168&quot; height=&quot;241&quot; data-filename=&quot;스크린샷 2022-02-10 오후 6.46.57.png&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_hint&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정답 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1644486439387&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.
let [n, ...routes] = require(&quot;fs&quot;)
  .readFileSync(path)
  .toString()
  .trim()
  .split(&quot;\n&quot;);

n = +n;
routes = routes.map((i) =&amp;gt; i.split(&quot; &quot;).map(Number));

function solution(n, routes) {
  const dp = new Array(n).fill(null).map(() =&amp;gt; new Array(n).fill(BigInt(0)));
  dp[0][0] = 1;

  for (let i = 0; i &amp;lt; n; i += 1) {
    for (let j = 0; j &amp;lt; n; j += 1) {
      if (dp[i][j] === 0 || (i === n - 1 &amp;amp;&amp;amp; j === n - 1)) continue;

      const jump = routes[i][j];
      const right = j + jump;
      const down = i + jump;

      if (down &amp;lt; n) dp[down][j] += BigInt(dp[i][j]);
      if (right &amp;lt; n) dp[i][right] += BigInt(dp[i][j]);
    }
  }

  return dp[n - 1][n - 1].toString();
}

const answer = solution(n, routes);
console.log(answer);&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;⭐ 문제 핵심 아이디어 ⭐&lt;br /&gt;1. DP&lt;br /&gt;2. 받은 입력 행렬과 똑같은 크기의 dp 행렬을 만들어서, dp[i][j]는 (i, j) 까지 갈 수 있는 경우의 수를 나타낸다.&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;처음에 재귀로 풀려고 했는데, 풀고나니까 DP 문제들은 재귀로 풀면 시간초과가 난다는 것을 까먹었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력이 2^63- 1 까지 나올 수 있기 때문에 BigInt로 풀어서 toString() 해주어야 한다.&lt;/p&gt;</description>
      <category>알고리즘/백준</category>
      <category>백준</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/289</guid>
      <comments>https://junghyeonsu.tistory.com/289#entry289comment</comments>
      <pubDate>Thu, 10 Feb 2022 18:49:15 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 11055번: 가장 큰 증가 부분 수열 (JavaScript, NodeJS)</title>
      <link>https://junghyeonsu.tistory.com/288</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biigDi/btrsMAtNioz/UPrCmXb2BFpHNcnETqichk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biigDi/btrsMAtNioz/UPrCmXb2BFpHNcnETqichk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biigDi/btrsMAtNioz/UPrCmXb2BFpHNcnETqichk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiigDi%2FbtrsMAtNioz%2FUPrCmXb2BFpHNcnETqichk%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;333&quot; height=&quot;333&quot; data-filename=&quot;백준.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수열 A가 주어졌을 때, 그 수열의 증가 부분&amp;nbsp;수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분&amp;nbsp;수열은 A = {&lt;b&gt;1&lt;/b&gt;, 100,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;2&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;50&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;60&lt;/b&gt;, 3, 5, 6, 7, 8} 이고, 합은 113이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수열 A의 크기 N (1 &amp;le; N &amp;le; 1,000)이 주어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 &amp;le; Ai&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;le; 1,000)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수열 A의 합이 가장 큰 증가 부분&amp;nbsp;수열의 합을&amp;nbsp;출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;10
1 100 2 50 60 3 5 6 7 8
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;복사&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;113&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정답 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1644307315526&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.
const [n, sequence] = require(&quot;fs&quot;)
  .readFileSync(path)
  .toString()
  .trim()
  .split(&quot;\n&quot;);
const seq = sequence.split(&quot; &quot;).map(Number);

function solution(n, seq) {
  const memo = new Array(n).fill(0);

  for (let i = 0; i &amp;lt; n; i += 1) {
    let max = 0;
    let maxIndex = -1;

    for (let j = 0; j &amp;lt; i; j += 1) {
      if (seq[i] &amp;gt; seq[j] &amp;amp;&amp;amp; memo[j] &amp;gt; max) {
        max = memo[j];
        maxIndex = j;
      }
    }

    memo[i] = maxIndex === -1 ? seq[i] : seq[i] + memo[maxIndex];
  }

  return Math.max(...memo);
}

const answer = solution(n, seq);
console.log(answer);&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;⭐ 문제 핵심 아이디어 ⭐&lt;br /&gt;1. DP&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 DP가 익숙하지 않아서 도저히 감이 잡히지 않았다..&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8CQ8d/btrsMaa21L5/KXCpog9r2oYf89hxXnpmzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8CQ8d/btrsMaa21L5/KXCpog9r2oYf89hxXnpmzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8CQ8d/btrsMaa21L5/KXCpog9r2oYf89hxXnpmzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8CQ8d%2FbtrsMaa21L5%2FKXCpog9r2oYf89hxXnpmzK%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;847&quot; height=&quot;671&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leylaoriduck.tistory.com/527&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://leylaoriduck.tistory.com/527&lt;/a&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;</description>
      <category>알고리즘/백준</category>
      <category>백준</category>
      <author>정현수</author>
      <guid isPermaLink="true">https://junghyeonsu.tistory.com/288</guid>
      <comments>https://junghyeonsu.tistory.com/288#entry288comment</comments>
      <pubDate>Tue, 8 Feb 2022 17:03:22 +0900</pubDate>
    </item>
  </channel>
</rss>