<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>FEEJ</title>
        <link>https://velog.io/</link>
        <description>조금씩 꾸준히</description>
        <lastBuildDate>Sun, 01 Dec 2024 14:17:34 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>FEEJ</title>
            <url>https://velog.velcdn.com/images/0l0jjo/profile/d2df885e-f5b5-4a73-af67-4ff04b50ee58/image.JPG</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. FEEJ. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/17__colin" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[99클럽 코테 스터디 35일차 TIL + 구현]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-35%EC%9D%BC%EC%B0%A8-TIL-%EA%B5%AC%ED%98%84</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-35%EC%9D%BC%EC%B0%A8-TIL-%EA%B5%AC%ED%98%84</guid>
            <pubDate>Sun, 01 Dec 2024 14:17:34 GMT</pubDate>
            <description><![CDATA[<h1 id="주사위-윷놀이">주사위 윷놀이</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/17825">https://www.acmicpc.net/problem/17825</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;;
const input = require(&quot;fs&quot;)
  .readFileSync(filePath)
  .toString()
  .trim()
  .split(&quot; &quot;)
  .map(Number);

const point = [
  0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40,
  13, 16, 19, 22, 24, 25, 26, 27, 28, 30, 35, 0,
];

const next = [
  [1, 2, 3, 4, 5],
  [2, 3, 4, 5, 6],
  [3, 4, 5, 6, 7],
  [4, 5, 6, 7, 8],
  [5, 6, 7, 8, 9],
  [21, 22, 23, 26, 30],
  [7, 8, 9, 10, 11],
  [8, 9, 10, 11, 12],
  [9, 10, 11, 12, 13],
  [10, 11, 12, 13, 14],
  [24, 25, 26, 30, 31],
  [12, 13, 14, 15, 16],
  [13, 14, 15, 16, 17],
  [14, 15, 16, 17, 18],
  [15, 16, 17, 18, 19],
  [29, 28, 27, 26, 30],
  [17, 18, 19, 20, 32],
  [18, 19, 20, 32, 32],
  [19, 20, 32, 32, 32],
  [20, 32, 32, 32, 32],
  [32, 32, 32, 32, 32],
  [22, 23, 26, 30, 31],
  [23, 26, 30, 31, 20],
  [26, 30, 31, 20, 32],
  [25, 26, 30, 31, 20],
  [26, 30, 31, 20, 32],
  [30, 31, 20, 32, 32],
  [26, 30, 31, 20, 32],
  [27, 26, 30, 31, 20],
  [28, 27, 26, 30, 31],
  [31, 20, 32, 32, 32],
  [20, 32, 32, 32, 32],
  [32, 32, 32, 32, 32],
];

let max = 0;

for (let i = 0; i &lt; 4; i++) {
  move(i, 0, [0, 0, 0, 0], 0);
}

console.log(max);
function move(unit, cnt, location, score) {
  if (cnt == 10) {
    max = Math.max(max, score);
    return;
  }

  const nowLocation = location[unit];
  if (nowLocation == 32) {
    return;
  }

  const nextLocation = next[nowLocation][input[cnt] - 1];

  if (location.filter((v) =&gt; v != 32).includes(nextLocation)) {
    return;
  } else {
    const newLocation = [...location];
    newLocation[unit] = nextLocation;
    const newScore = score + point[nextLocation];
    for (let i = 0; i &lt; 4; i++) {
      move(i, cnt + 1, newLocation, newScore);
    }
  }
}
</code></pre>
<p>역시 개인적으로 제대로 풀고 싶었는데,,,, 기말이라 벼락치기하느라 제대로 못 풀었다,,,,</p>
<p><a href="https://lhoiktiv.tistory.com/520">풀이 코드</a>를 보고 해결한 대신, 기말 이후에 다시 한 번 더 풀어볼 예정!</p>
<p>마지막 TIL인데 아쉽당</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 34일차 TIL + 구현]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-34%EC%9D%BC%EC%B0%A8-TIL-%EA%B5%AC%ED%98%84</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-34%EC%9D%BC%EC%B0%A8-TIL-%EA%B5%AC%ED%98%84</guid>
            <pubDate>Sat, 30 Nov 2024 13:37:35 GMT</pubDate>
            <description><![CDATA[<h1 id="개인정보-수집-유효기간">개인정보 수집 유효기간</h1>
<ul>
<li><a href="https://school.programmers.co.kr/learn/courses/30/lessons/150370">https://school.programmers.co.kr/learn/courses/30/lessons/150370</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const changeToDate = (year, month, date) =&gt; {
  return +year * 12 * 28 + +month * 28 + +date;
};

function solution(today, terms, privacies) {
  var answer = [];

  const termsObj = {};
  for (const info of terms) {
    const [type, month] = info.split(&#39; &#39;);
    termsObj[type] = changeToDate(0, month, 0);
  }

  const todayDate = changeToDate(...today.split(&#39;.&#39;));

  for (let i = 0; i &lt; privacies.length; i++) {
    const [date, type] = privacies[i].split(&#39; &#39;);
    const dueDate = changeToDate(...date.split(&#39;.&#39;)) + termsObj[type] - 1;

    if (todayDate &gt; dueDate) answer.push(i + 1);
  }

  return answer;
}</code></pre>
<p>개인적으로 제대로 풀고 싶었는데,,,, 내일이 기말이라 벼락치기하느라 제대로 못 풀었다,,ㅠ (변명일수도)</p>
<p>풀이 코드를 보고 해결한 대신, 기말 이후에 다시 한 번 더 풀어볼 예정!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 32일차 TIL]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-32%EC%9D%BC%EC%B0%A8-TIL</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-32%EC%9D%BC%EC%B0%A8-TIL</guid>
            <pubDate>Fri, 29 Nov 2024 14:30:04 GMT</pubDate>
            <description><![CDATA[<h2 id="신규-아이디-추천">신규 아이디 추천</h2>
<ul>
<li><a href="https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=javascript">https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=javascript</a></li>
</ul>
<h2 id="코드">코드</h2>
<p>구글링 및 풀이 참고..</p>
<pre><code class="language-js">function solution(new_id) {
    const answer = new_id
        .toLowerCase()
        .replace(/[^\w-_.]/g, &#39;&#39;)
        .replace(/\.+/g, &#39;.&#39;)
        .replace(/^\.|\.$/g, &#39;&#39;)
        .replace(/^$/, &#39;a&#39;)
        .slice(0, 15).replace(/\.$/, &#39;&#39;);
    const len = answer.length;
    return len &gt; 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 31일차 TIL + DP]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-31%EC%9D%BC%EC%B0%A8-TIL-DP-5nuziaeh</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-31%EC%9D%BC%EC%B0%A8-TIL-DP-5nuziaeh</guid>
            <pubDate>Thu, 28 Nov 2024 14:23:14 GMT</pubDate>
            <description><![CDATA[<h1 id="가장-긴-바이토닉-부분-수열">가장 긴 바이토닉 부분 수열</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/11054">https://www.acmicpc.net/problem/11054</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;;
const [N, input] = require(&quot;fs&quot;)
  .readFileSync(filePath)
  .toString()
  .trim()
  .split(&quot;\n&quot;);

const arr = input.split(&quot; &quot;).map((i) =&gt; +i);

const inDP = new Array(N).fill(1);
const deDP = new Array(N).fill(1);

for (let i = 0; i &lt; N; i += 1) {
  let cnt = 1;
  for (let j = 0; j &lt; i; j += 1) {
    if (arr[i] &gt; arr[j]) cnt = Math.max(cnt, inDP[j] + 1);
  }
  inDP[i] = cnt;
}

for (let i = N - 1; i &gt;= 0; i -= 1) {
  let cnt = 1;
  for (let j = i + 1; j &lt; N; j += 1) {
    if (arr[i] &gt;  arr[j]) cnt = Math.max(cnt, deDP[j] + 1);
  }
  deDP[i] = cnt;
}

console.log(Math.max(...inDP.map((v, i) =&gt; v + deDP[i])) - 1);</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 31일차 TIL + DP]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-31%EC%9D%BC%EC%B0%A8-TIL-DP</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-31%EC%9D%BC%EC%B0%A8-TIL-DP</guid>
            <pubDate>Wed, 27 Nov 2024 14:44:08 GMT</pubDate>
            <description><![CDATA[<h1 id="줄세우기">줄세우기</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/2631">https://www.acmicpc.net/problem/2631</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;;
let [N, ...arr] = require(&quot;fs&quot;)
  .readFileSync(filePath)
  .toString()
  .trim()
  .split(&quot;\n&quot;)
  .map(Number);

const longest = new Array(N).fill(1);

for (let i = 1; i &lt; N; i += 1) {
  let cnt = 0;
  for (let j = 0; j &lt; i; j += 1) {
    if (arr[j] &lt; arr[i]) cnt = Math.max(cnt, longest[j]);
  }
  longest[i] = cnt + 1;
}

console.log(N - Math.max(...longest));
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 30일차 TIL + DP]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-30%EC%9D%BC%EC%B0%A8-TIL-DP</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-30%EC%9D%BC%EC%B0%A8-TIL-DP</guid>
            <pubDate>Tue, 26 Nov 2024 15:02:45 GMT</pubDate>
            <description><![CDATA[<h2 id="상자넣기">상자넣기</h2>
<ul>
<li><a href="https://www.acmicpc.net/problem/1965">https://www.acmicpc.net/problem/1965</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;;
const input = require(&quot;fs&quot;)
  .readFileSync(filePath)
  .toString()
  .trim()
  .split(&quot;\n&quot;);

const N = Number(input[0]);
const boxes = input[1].split(&quot; &quot;).map(Number);

function returnMaxBox(len, boxes) {
  const dp = new Array(len).fill(1);

  for (let i = 1; i &lt; len; i++) {
    for (let j = 0; j &lt; i; j++) {
      if (boxes[j] &lt; boxes[i]) dp[i] = Math.max(dp[i], dp[j] + 1);
    }
  }

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

console.log(returnMaxBox(N, boxes));</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 29일차 TIL + DP]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-29%EC%9D%BC%EC%B0%A8-TIL-DP</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-29%EC%9D%BC%EC%B0%A8-TIL-DP</guid>
            <pubDate>Tue, 26 Nov 2024 00:25:40 GMT</pubDate>
            <description><![CDATA[<h1 id="파도반-수열">파도반 수열</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/9461">https://www.acmicpc.net/problem/9461</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filepath = process.platform === &#39;linux&#39; ? 0 : &#39;./input.txt&#39;;
const [N, ...input] = require(&#39;fs&#39;)
  .readFileSync(filepath)
  .toString()
  .trim()
  .split(&#39;\n&#39;);

const dp = new Array(101).fill(1);

dp[4] = 2;
dp[5] = 2;

for (let i = 6; i &lt;= 100; i++) {
  dp[i] = dp[i - 1] + dp[i - 5];
}

for (const n of input) {
  console.log(dp[Number(n)]);
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 28일차 TIL + DP]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-28%EC%9D%BC%EC%B0%A8-TIL-DP</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-28%EC%9D%BC%EC%B0%A8-TIL-DP</guid>
            <pubDate>Mon, 25 Nov 2024 01:09:54 GMT</pubDate>
            <description><![CDATA[<h1 id=""></h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/11055">https://www.acmicpc.net/problem/11055</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;;
const [N, input] = require(&quot;fs&quot;)
  .readFileSync(filePath)
  .toString()
  .trim()
  .split(&quot;\n&quot;);

const nums = input.split(&quot; &quot;).map(Number);
const memo = new Array(N).fill(0);

for (let i = 0; i &lt; N; i++) {
  let max = 0;
  let maxIdx = -1;

  for (let j = 0; j &lt; i; j++) {
    if (nums[i] &gt; nums[j] &amp;&amp; memo[j] &gt; max) {
      max = memo[j];
      maxIdx = j;
    }
  }
  memo[i] = maxIdx === -1 ? nums[i] : nums[i] + memo[maxIdx];
}

console.log(Math.max(...memo));</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 27일차 TIL + DP]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-27%EC%9D%BC%EC%B0%A8-TIL-DP</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-27%EC%9D%BC%EC%B0%A8-TIL-DP</guid>
            <pubDate>Sun, 24 Nov 2024 00:01:55 GMT</pubDate>
            <description><![CDATA[<h1 id="가장-긴-감소하는-부분-수열">가장 긴 감소하는 부분 수열</h1>
<ul>
<li><a href="https://acmicpc.net/problem/11722">https://acmicpc.net/problem/11722</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const file = process.platform === &#39;linux&#39; ? 0 : &#39;./input.txt&#39;;
const [N, input] = require(&#39;fs&#39;)
  .readFileSync(file)
  .toString()
  .trim()
  .split(&#39;\n&#39;);

let inputs = input.split(&#39; &#39;).map((v) =&gt; Number(v));
let dp = [];

for (let i = 0; i &lt; N; i++) {
  let max = 0;
  for (let j = 0; j &lt; i; j++) {
    if (inputs[i] &lt; inputs[j] &amp;&amp; dp[j] &gt; max) max = dp[j];
  }
  dp[i] = max + 1;
}

console.log(Math.max(...dp));</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 26일차 TIL + 수학]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-26%EC%9D%BC%EC%B0%A8-TIL-%EC%88%98%ED%95%99-4iym42vl</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-26%EC%9D%BC%EC%B0%A8-TIL-%EC%88%98%ED%95%99-4iym42vl</guid>
            <pubDate>Sat, 23 Nov 2024 00:16:49 GMT</pubDate>
            <description><![CDATA[<h1 id="돌게임">돌게임</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/9655">https://www.acmicpc.net/problem/9655</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;;
const input = +require(&quot;fs&quot;).readFileSync(filePath).toString().trim();

input % 2 === 0 ? console.log(&quot;CY&quot;) : console.log(&quot;SK&quot;);</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 25일차 TIL + 완전탐색]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-25%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-25%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</guid>
            <pubDate>Fri, 22 Nov 2024 00:39:20 GMT</pubDate>
            <description><![CDATA[<h1 id="주사위-쌓기">주사위 쌓기</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/2116">https://www.acmicpc.net/problem/2116</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform === &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;input.txt&quot;;
const input = require(&quot;fs&quot;).readFileSync(filePath).toString().split(&quot;\n&quot;);
const N = Number(input.shift());
const dice = input.map((r) =&gt; r.split(&quot; &quot;).map(Number));
const facToFace = {
  0: 5,
  1: 3,
  2: 4,
  3: 1,
  4: 2,
  5: 0,
};

let max = 0;

const dfs = (diceIdx, topNum, sum) =&gt; {
  if (diceIdx === N) {
    max = Math.max(sum, max);
    return;
  }
  const bottom = dice[diceIdx].findIndex((v) =&gt; v === topNum);
  const top = facToFace[bottom];

  const maxNum = Math.max(
    ...dice[diceIdx].filter((_, i) =&gt; i !== bottom &amp;&amp; i !== top)
  );
  dfs(diceIdx + 1, dice[diceIdx][top], sum + maxNum);
};

(function () {
  dice[0].forEach((_, i) =&gt; {
    const bottom = i;
    const top = facToFace[bottom];

    const maxNum = Math.max(
      ...dice[0].filter((_, i) =&gt; i !== bottom &amp;&amp; i !== top)
    );
    dfs(1, dice[0][top], maxNum);
  });
  console.log(max);
})();</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 24일차 TIL + 완전탐색]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-24%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-24%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</guid>
            <pubDate>Thu, 21 Nov 2024 00:48:25 GMT</pubDate>
            <description><![CDATA[<h1 id="전력망을-둘로-나누기">전력망을 둘로 나누기</h1>
<ul>
<li><a href="https://school.programmers.co.kr/learn/courses/30/lessons/86971">https://school.programmers.co.kr/learn/courses/30/lessons/86971</a></li>
</ul>
<h2 id="오늘의-학습-키워드">오늘의 학습 키워드</h2>
<h3 id="bfs">BFS</h3>
<ul>
<li>정점과 같은 레벨에 있는 노드(형제 노드)를 먼저 탐색하는 방식</li>
<li>큐 자료구조를 사용하여 인접한 정점들의 리스트를 관리한다</li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">class Queue {
  constructor() {
    this.items = {};
    this.headIndex = 0;
    this.tailIndex = 0;
  }
  enqueue(item) {
    this.items[this.tailIndex] = item;
    this.tailIndex += 1;
  }
  dequeue() {
    const item = this.items[this.headIndex];
    delete this.items[this.headIndex];
    this.headIndex += 1;
    return item;
  }
  peek() {
    return this.items[this.headIndex];
  }
  get length() {
    return this.tailIndex - this.headIndex;
  }
  get isEmpty() {
    return this.length === 0;
  }
}

function solution(n, wires) {
  let answer = Number.MAX_SAFE_INTEGER;

  // G (graph)
  const G = Array.from(new Array(n + 1), () =&gt; []);

  wires.forEach(([u, v]) =&gt; {
    G[u].push(v);
    G[v].push(u);
  });

  // BFS
  const bfs = (start, target) =&gt; {
    const visited = Array(n + 1).fill(false);
    const Q = new Queue();
    let count = 0;

    Q.enqueue([start]);
    visited[start] = true;

    while (!Q.isEmpty) {
      let w = Q.dequeue();
      G[w].forEach((next) =&gt; {
        if (next !== target &amp;&amp; visited[next] === false) {
          visited[next] = true;
          Q.enqueue([next]);
        }
      });
      count += 1;
    }

    return count;
  };

  wires.forEach((next) =&gt; {
    let [u, v] = next;
    answer = Math.min(answer, Math.abs(bfs(u, v) - bfs(v, u)));
  });

  return answer;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 23일차 TIL + 완전탐색]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-23%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-23%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</guid>
            <pubDate>Wed, 20 Nov 2024 00:26:50 GMT</pubDate>
            <description><![CDATA[<h1 id="소수-찾기">소수 찾기</h1>
<ul>
<li><a href="https://school.programmers.co.kr/learn/courses/30/lessons/42839">https://school.programmers.co.kr/learn/courses/30/lessons/42839</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">// 소수 판별하기
function isPrime(n) {
  if (n &lt; 2) return false;
  for (let i = 2; i &lt;= Math.sqrt(n); i++) {
    if (n % i === 0) return false;
  }
  return true;
}

// 순열 - 만들 수 있는 모든 경우의 수 추출하기
const getNumbers = (arr, len) =&gt; {
  if (len === 1) return arr.map((v) =&gt; [v]);

  const result = [];

  arr.forEach((f, i, o) =&gt; {
    const rest = [...o.slice(0, i), ...o.slice(i + 1)];
    const cases = getNumbers(rest, len - 1);
    const newCases = cases.map((v) =&gt; [f, ...v]);
    result.push(...newCases);
  });

  return result;
};

const getAllNumbers = (arr) =&gt; {
  let results = [];
  arr.forEach((_, i, o) =&gt; results.push(...getNumbers(o, i + 1)));

  return results;
};

function solution(numbers) {
  const output = getAllNumbers([...numbers]);
  const createdNumbers = output.map((v) =&gt;
    v.length === 1 ? Number(v) : Number(v.join(&quot;&quot;))
  );
  const filteredNumbers = createdNumbers.filter(
    (v, i) =&gt; createdNumbers.indexOf(v) === i &amp;&amp; isPrime(v)
  );
  return filteredNumbers.length;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 22일차 TIL + 완전탐색]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-22%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-22%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</guid>
            <pubDate>Tue, 19 Nov 2024 01:47:46 GMT</pubDate>
            <description><![CDATA[<h2 id="피로도">피로도</h2>
<ul>
<li><a href="https://school.programmers.co.kr/learn/courses/30/lessons/87946">https://school.programmers.co.kr/learn/courses/30/lessons/87946</a></li>
</ul>
<h2 id="오답노트">오답노트</h2>
<ul>
<li><strong>모든 상황</strong>을 고려했는가<ul>
<li>완전탐색이라면서 <code>그리디</code>로 풀지는 않았는지,,,ㅎ</li>
<li>그래서 정확도가 떨어지지 않았는지,,,,</li>
</ul>
</li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">function makeAllCase(arr, len) {
  if (len === 1) return arr.map((v) =&gt; [v]);

  const result = [];

  arr.forEach((f, i, o) =&gt; {
    const rest = [...o.slice(0, i), ...o.slice(i + 1)];
    const cases = makeAllCase(rest, len - 1);
    const newCases = cases.map((el) =&gt; [f, ...el]);
    result.push(...newCases);
  });

  return result;
}

function solution(k, dungeons) {
  let maxCount = 0;
  const allCases = makeAllCase(dungeons, dungeons.length);

  allCases.forEach((cases) =&gt; {
    let currentK = k;
    let count = 0;

    for (const [r, m] of cases) {
      if (currentK &gt;= r) {
        currentK -= m;
        count += 1;
      }
    }

    maxCount = Math.max(maxCount, count);
  });

  return maxCount;
}</code></pre>
<h3 id="실패했던-코드">실패했던 코드</h3>
<pre><code class="language-js">function solution(k, dungeons) {
  let cnt = 0;
  const copy = dungeons.slice(0).sort((a, b) =&gt; b[0] - a[0]);

  while (copy.length &gt; 0) {
    const [r, u] = copy[0];
    if (k &lt; r) break;

    if (k === r) {
      copy.shift();
      k -= u;
    } else {
      const [, mu] = copy.sort((a, b) =&gt; a[1] - b[1]).shift();
      k -= mu;
    }
    cnt += 1;
  }

  return cnt;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 21일차 TIL + 완전탐색]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-21%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-21%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</guid>
            <pubDate>Mon, 18 Nov 2024 01:50:38 GMT</pubDate>
            <description><![CDATA[<h1 id="카펫">카펫</h1>
<ul>
<li><a href="https://school.programmers.co.kr/learn/courses/30/lessons/42842">https://school.programmers.co.kr/learn/courses/30/lessons/42842</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">function solution(brown, yellow) {
  const total = brown + yellow;

  for (let h = 3; h &lt;= Math.sqrt(total); h += 1) {
    if (total % h === 0) {
      const w = total / h;

      if ((w - 2) * (h - 2) === yellow) {
        return [w, h];
      }
    }
  }
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 20일차 TIL + 완전탐색]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-20%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-20%EC%9D%BC%EC%B0%A8-TIL-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89</guid>
            <pubDate>Sat, 16 Nov 2024 11:23:37 GMT</pubDate>
            <description><![CDATA[<h1 id="모의고사">모의고사</h1>
<ul>
<li><a href="https://school.programmers.co.kr/learn/courses/30/lessons/42840">https://school.programmers.co.kr/learn/courses/30/lessons/42840</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">function solution(answers) {
  const patterns = [&quot;12345&quot;, &quot;21232425&quot;, &quot;3311224455&quot;];
  const scores = patterns.map(
    (p) =&gt; answers.filter((a, i) =&gt; a == p[i % p.length]).length
  );
  const maxScore = Math.max(...scores);

  return scores.map((s, i) =&gt; (s === maxScore ? i + 1 : null)).filter(Boolean);
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 19일차 TIL + 우선순위 큐]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-19%EC%9D%BC%EC%B0%A8-TIL-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84-%ED%81%90</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-19%EC%9D%BC%EC%B0%A8-TIL-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84-%ED%81%90</guid>
            <pubDate>Sat, 16 Nov 2024 01:21:04 GMT</pubDate>
            <description><![CDATA[<h1 id="강의실">강의실</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/1374">https://www.acmicpc.net/problem/1374</a></li>
</ul>
<h2 id="오늘의-학습-키워드">오늘의 학습 키워드</h2>
<h3 id="우선순위-큐priority-queue">우선순위 큐(Priority Queue)</h3>
<ul>
<li>우선순위에 따라서 데이터를 추출하는 자료구조</li>
<li>컴퓨터 운영체제, 온라인 게임 매칭 등에서 활용</li>
<li>일반적으로 힙(heap)을 이용해 구현한다</li>
</ul>
<h3 id="힙heap">힙(Heap)</h3>
<ul>
<li>원소들 중에서 최댓값 혹은 최솟값을 빠르게 찾아내는 자료구조</li>
<li>최대 힙(max heap) : 값이 큰 원소부터 추출</li>
<li>최소 힙(min heap) : 값이 작은 원소부터 추출</li>
<li>힙은 원소의 삽입과 삭제를 위해 O(logN)의 수행 시간을 요구</li>
<li>단순한 N개의 데이터를 힙에 넣었다가 모두 꺼내는 작업은 정렬과 동일</li>
<li>이 경우 시간 복잡도는 O(NlogN)</li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform == &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;./input.txt&quot;;
const [N, ...arr] = require(&quot;fs&quot;)
  .readFileSync(filePath)
  .toString()
  .trim()
  .split(&quot;\n&quot;)
  .map((v) =&gt; v.split(&quot; &quot;).map(Number));

class MinHeap {
  #arr;

  constructor(els) {
    this.#arr = els ?? [];
  }

  enq(el) {
    this.#arr.push(el);

    let curIdx = this.#arr.length - 1;
    let parIdx = Math.floor((curIdx - 1) / 2);

    while (curIdx &gt; 0 &amp;&amp; this.#arr[parIdx] &gt; this.#arr[curIdx]) {
      this._swap(curIdx, parIdx);
      curIdx = parIdx;
      parIdx = Math.floor((curIdx - 1) / 2);
    }
  }

  deq() {
    if (this.#arr.length === 0) return null;
    if (this.#arr.length === 1) return this.#arr.pop();

    const originRoot = this.#arr[0];
    this.#arr[0] = this.#arr.pop();
    let curIdx = 0;

    while (curIdx * 2 + 1 &lt; this.#arr.length) {
      let childIdx =
        curIdx * 2 + 2 &lt; this.#arr.length &amp;&amp;
        this.#arr[curIdx * 2 + 2] &lt; this.#arr[curIdx * 2 + 1]
          ? curIdx * 2 + 2
          : curIdx * 2 + 1;

      if (this.#arr[curIdx] &lt; this.#arr[childIdx]) {
        break;
      }

      this._swap(curIdx, childIdx);
      curIdx = childIdx;
    }
    return originRoot;
  }

  _swap(a, b) {
    const tmp = this.#arr[a];
    this.#arr[a] = this.#arr[b];
    this.#arr[b] = tmp;
  }

  get size() {
    return this.#arr.length;
  }

  get peek() {
    return this.#arr[0];
  }
}

const minHeap = new MinHeap();

const sorted = arr.sort((a, b) =&gt; a[1] - b[1]);

sorted.forEach(([_, s, t]) =&gt; {
  if (minHeap.size === 0) minHeap.enq(t);
  else {
    const head = minHeap.peek;
    if (s &gt;= head) minHeap.deq();
    minHeap.enq(t);
  }
});

console.log(minHeap.size);</code></pre>
<p>최소힙 자체는 구현한 경험이 있어서, 문제 해결 방법을 캐치한 후에는 빠르게 풀 수 있었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 18일차 TIL + 그리디]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-18%EC%9D%BC%EC%B0%A8-TIL-%EA%B7%B8%EB%A6%AC%EB%94%94</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-18%EC%9D%BC%EC%B0%A8-TIL-%EA%B7%B8%EB%A6%AC%EB%94%94</guid>
            <pubDate>Sat, 16 Nov 2024 01:15:55 GMT</pubDate>
            <description><![CDATA[<h1 id="센서">센서</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/2212">https://www.acmicpc.net/problem/2212</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const file = process.platform === &#39;linux&#39; ? 0 : &#39;./input.txt&#39;;
const [n, k, ...inputs] = fs
  .readFileSync(path)
  .toString()
  .trim()
  .split(&#39;\n&#39;)
  .map((it) =&gt; it.split(&#39; &#39;).map(Number))
  .flat();

const sensors = inputs.sort((a, b) =&gt; a - b);

let diff = [];
for (let i = 1; i &lt; n; i++) {
  diff.push(sensors[i] - sensors[i - 1]);
}

diff = diff.sort((a, b) =&gt; a - b).filter((it) =&gt; it !== 0);

for (let i = 0; i &lt; k - 1; i++) {
  if (diff.length &gt; 0) diff.pop();
}

if (diff.length === 0) console.log(0);
else console.log(diff.reduce((pre, cur) =&gt; pre + cur));</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 17일차 TIL : 그리디]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-17%EC%9D%BC%EC%B0%A8-TIL-%EA%B7%B8%EB%A6%AC%EB%94%94</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-17%EC%9D%BC%EC%B0%A8-TIL-%EA%B7%B8%EB%A6%AC%EB%94%94</guid>
            <pubDate>Wed, 13 Nov 2024 14:23:48 GMT</pubDate>
            <description><![CDATA[<h1 id="밤양갱">밤양갱</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/31926">https://www.acmicpc.net/problem/31926</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform == &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;./input.txt&quot;;
let N = +require(&quot;fs&quot;).readFileSync(filePath).toString().trim();

const DALDIDALGO = 8; // (d)(a)(l)(d)(i)(dal)(g)(o)
const DALDIDAN = 2; // (daldida)(n)

let cnt = 0;

let exponent = Math.floor(Math.log2(N));
N -= 2 ** exponent;
cnt += exponent;

console.log(DALDIDALGO + cnt + DALDIDAN);</code></pre>
<p>비비.. 밤양갱이... 백준 코테 문제로 희생되다니..🫢</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[99클럽 코테 스터디 16일차 TIL : 그리디]]></title>
            <link>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-16%EC%9D%BC%EC%B0%A8-TIL-%EA%B7%B8%EB%A6%AC%EB%94%94</link>
            <guid>https://velog.io/@17__colin/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-16%EC%9D%BC%EC%B0%A8-TIL-%EA%B7%B8%EB%A6%AC%EB%94%94</guid>
            <pubDate>Tue, 12 Nov 2024 14:30:26 GMT</pubDate>
            <description><![CDATA[<h1 id="게임을-만든-동준이">게임을 만든 동준이</h1>
<ul>
<li><a href="https://www.acmicpc.net/problem/2847">https://www.acmicpc.net/problem/2847</a></li>
</ul>
<h2 id="코드">코드</h2>
<pre><code class="language-js">const filePath = process.platform == &quot;linux&quot; ? &quot;/dev/stdin&quot; : &quot;./input.txt&quot;;
let [N, ...scores] = require(&quot;fs&quot;)
  .readFileSync(filePath)
  .toString()
  .trim()
  .split(&quot;\n&quot;)
  .map(Number);

let cnt = 0;

for (let i = N - 1; i &gt; 0; i -= 1) {
  if (scores[i - 1] &gt;= scores[i]) {
    cnt += scores[i - 1] - scores[i] + 1;
    scores[i - 1] = scores[i] - 1;
  }
}

console.log(cnt);</code></pre>
]]></description>
        </item>
    </channel>
</rss>