<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Algorithms of Ju-jh</title>
        <link>https://velog.io/</link>
        <description>Node.js 개발자</description>
        <lastBuildDate>Fri, 02 Feb 2024 02:53:34 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Algorithms of Ju-jh</title>
            <url>https://velog.velcdn.com/images/ju-jh/profile/1549d381-1157-41a8-907b-d5ee4f36af24/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Algorithms of Ju-jh. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ju-jh" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[.includes( 포함되어있는지 알고자 하는 value )]]></title>
            <link>https://velog.io/@ju-jh/.includes</link>
            <guid>https://velog.io/@ju-jh/.includes</guid>
            <pubDate>Fri, 02 Feb 2024 02:53:34 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[.slice( 자르고자 하는 시작점, 자르고자 하는 끝점 )]]></title>
            <link>https://velog.io/@ju-jh/.slice</link>
            <guid>https://velog.io/@ju-jh/.slice</guid>
            <pubDate>Fri, 02 Feb 2024 02:51:43 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[.repeat( 문자열 반복 할 횟수 )]]></title>
            <link>https://velog.io/@ju-jh/.repeat-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B0%98%EB%B3%B5-%ED%9A%9F%EC%88%98</link>
            <guid>https://velog.io/@ju-jh/.repeat-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B0%98%EB%B3%B5-%ED%9A%9F%EC%88%98</guid>
            <pubDate>Tue, 30 Jan 2024 15:07:50 GMT</pubDate>
            <description><![CDATA[<pre><code>// 3중 for문으로 풀은 방법
const inputData = require(&#39;fs&#39;)
  .readFileSync(0, &#39;utf8&#39;)
  .toString()
  .trim()
  .split(&#39;\n&#39;);

const T = Number(inputData[0]);

for (let i = 1; i &lt;= T; i++) {
  let result = [];
  let [num, Words] = inputData[i].split(&#39; &#39;);

  for (let j = 0; j &lt; Words.length; j++) {
    for (let k = 0; k &lt; +num; k++) {
      result.push(Words[j]);
    }
  }

  console.log(result.join(&#39;&#39;));
}

// 2중 for문 만으로 .repeat()를 사용하여 반복한 효과
const inputData = require(&#39;fs&#39;)
  .readFileSync(0, &#39;utf8&#39;)
  .toString()
  .trim()
  .split(&#39;\n&#39;);

const T = Number(inputData[0]);

for (let i = 1; i &lt;= T; i++) {
  let result = [];
  let [num, Words] = inputData[i].split(&#39; &#39;);

  for (let j = 0; j &lt; Words.length; j++) {
    result.push(Words[j].repeat(+num));
  }

  console.log(result.join(&#39;&#39;));
}</code></pre><p>위의 결과처럼 문자열을 N 횟수만큼 반복해주는 간편한 .repeat(N) 메서드가 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[.indexOf( 찾고자 하는 배열안의 value )]]></title>
            <link>https://velog.io/@ju-jh/.indexOf</link>
            <guid>https://velog.io/@ju-jh/.indexOf</guid>
            <pubDate>Tue, 30 Jan 2024 07:03:10 GMT</pubDate>
            <description><![CDATA[<pre><code>
let arr = [1, 2, 3, 4, 5]

변수를 선언했을 때

const idx = arr.indexOf(6)

이면 arr배열에 6이라는 value는 존재하지 않는다.

따라서 idx === -1을 갖는다.

</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[.splice( 바꾸고자 하는 idx , 1 | 0 , 추가하거나 바꾸는 value )]]></title>
            <link>https://velog.io/@ju-jh/.splice</link>
            <guid>https://velog.io/@ju-jh/.splice</guid>
            <pubDate>Tue, 30 Jan 2024 06:59:29 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.acmicpc.net/problem/5597">https://www.acmicpc.net/problem/5597</a></p>
<p><strong>문제</strong>
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.</p>
<p>교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.</p>
<p><strong>입력</strong>
입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.</p>
<p><strong>출력</strong>
출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.</p>
<pre><code>const inputData = require(&#39;fs&#39;).readFileSync(0, &#39;utf8&#39;).toString().trim().split(&#39;\n&#39;)

let arr = Array(30).fill(0)

for (let i = 0; i &lt; 30; i++){
  arr[i] = i + 1;
}

for (let i = 0; i &lt; 30; i++){
  const studentNumber = +inputData[i]
  const idx = arr.indexOf(studentNumber)
  if (idx != -1) {
    arr.splice(idx, 1)
  }
}

console.log(arr.join(&#39;\n&#39;))</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[.forEach( ) 는 값을 모으지 않는다...!]]></title>
            <link>https://velog.io/@ju-jh/.forEach-%EB%8A%94-%EA%B0%92%EC%9D%84-%EB%AA%A8%EC%9C%BC%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4</link>
            <guid>https://velog.io/@ju-jh/.forEach-%EB%8A%94-%EA%B0%92%EC%9D%84-%EB%AA%A8%EC%9C%BC%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4</guid>
            <pubDate>Mon, 29 Jan 2024 15:33:52 GMT</pubDate>
            <description><![CDATA[<pre><code>const inputData = require(&#39;fs&#39;).readFileSync(0, &#39;utf8&#39;).toString().trim().split(&#39;\n&#39;).map(Number)

const maxNumber = Math.max(...inputData)

const result = inputData.forEach((num, idx) =&gt; {
  if (Number(num) === maxNumber) {
    idx
  }
});

console.log(maxNumber)
console.log(result);</code></pre><p><a href="https://www.acmicpc.net/problem/2562">https://www.acmicpc.net/problem/2562</a></p>
<p>해당 백준 문제를 풀다가 forEach를 사용하여 배열을 순회하면서 최댓값을 구한 후 최댓값이 있는 배열의 index를 같이 반환하는걸 풀고있다가</p>
<p>계속 오류가 나서 무엇이 문제인지 확인하고있었다.</p>
<p>그러다가 찾은 명쾌한 답이 있었다. </p>
<blockquote>
<p><strong>forEach는 값을 모으고 있지 않다는 것</strong>...!</p>
</blockquote>
<p>예를 들어서 </p>
<pre><code>inputData = [10, 30, 20, 13, 42, 45, 23, 31, 33] 
</code></pre><pre><code>const maxIdx = inputData.forEach((num, idx)=&gt;{
    if(num === maxNumber){
        idx
    }
})</code></pre><p>를 하더라도 maxIdx 는 undefined 이다. 왜냐?</p>
<p>forEach() 메소드는 콜백 함수에서 반환하는 값들을 모으지 않고, </p>
<p>단순히 각 요소에 대해 함수를 실행한다. </p>
<p>따라서 forEach() 메소드 자체가 반환하는 값은 언제나 undefined인 것이다.</p>
<p>그렇다면 어떤 다른 방법이 있을까?</p>
<blockquote>
<p><strong>그렇다 let으로 maxIds를 먼저 선언하고 선언한 변수에 값을 할당해주면 된다.</strong></p>
</blockquote>
<pre><code>let maxIdx
...
const maxIdx = inputData.forEach((num, idx)=&gt;{
    if(num === maxNumber){
        maxIdx = idx
    }
})</code></pre><p>이런식으로 할당할 수 있다.</p>
<p>따라서 </p>
<pre><code>const inputData = require(&#39;fs&#39;)
  .readFileSync(0, &#39;utf8&#39;)
  .toString()
  .trim()
  .split(&#39;\n&#39;)
  .map(Number);

const maxNumber = Math.max(...inputData);

let maxIndex;

inputData.forEach((num, idx) =&gt; {
  if (num === maxNumber) {
    maxIndex = idx + 1;
  }
});

console.log(maxNumber);
console.log(maxIndex);</code></pre><p>이와 같은 출력을 해볼 수 있다.</p>
<p>번외로 </p>
<blockquote>
<p><strong>indexOf()를 활용하면 더 간단하게 할 수 있다.</strong></p>
</blockquote>
<pre><code>const inputData = require(&#39;fs&#39;)
  .readFileSync(0, &#39;utf8&#39;)
  .toString()
  .trim()
  .split(&#39;\n&#39;)
  .map(Number);

const maxNumber = Math.max(...inputData);

const idx = inputData.indexOf(maxNumber) + 1;

console.log(maxNumber);
console.log(idx);</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[.join( 배열안의 value들을 더해서 문자열로 바꿔줄 중간의 문자열 )]]></title>
            <link>https://velog.io/@ju-jh/join</link>
            <guid>https://velog.io/@ju-jh/join</guid>
            <pubDate>Mon, 29 Jan 2024 14:45:04 GMT</pubDate>
            <description><![CDATA[<pre><code>const array = [1, 2, 3, 4, 5, 6, 7, 8]</code></pre><p>array라는 배열에</p>
<pre><code>console.log(array.join(&#39; &#39;))</code></pre><p>위 처럼 출력하면</p>
<pre><code>&quot;1 2 3 4 5 6 7 8&quot;
</code></pre><p>로 출력된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[.filter( 배열안의 value들을 원하는 value들만 가릴 수 있는 조건 )]]></title>
            <link>https://velog.io/@ju-jh/filter</link>
            <guid>https://velog.io/@ju-jh/filter</guid>
            <pubDate>Mon, 29 Jan 2024 14:42:52 GMT</pubDate>
            <description><![CDATA[<pre><code>const array = [1, 2, 3, 4, 5, 6]</code></pre><p>이런 배열이 있을경우에</p>
<pre><code>console.log(array.filter((num) num &lt; 5))</code></pre><p>위의 값을 출력하면</p>
<pre><code>[1, 2, 3, 4]
</code></pre><p>가 나온다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코드를 함수화 하면 코드가 사용하는 메모리가 가벼워지고 속도가 더 빠르다?]]></title>
            <link>https://velog.io/@ju-jh/%EC%BD%94%EB%93%9C%EB%A5%BC-%ED%95%A8%EC%88%98%ED%99%94-%ED%95%98%EB%A9%B4-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B0%80-%EA%B0%80%EB%B2%BC%EC%9B%8C%EC%A7%80%EA%B3%A0-%EC%86%8D%EB%8F%84%EA%B0%80-%EB%8D%94-%EB%B9%A0%EB%A5%B4%EB%8B%A4</link>
            <guid>https://velog.io/@ju-jh/%EC%BD%94%EB%93%9C%EB%A5%BC-%ED%95%A8%EC%88%98%ED%99%94-%ED%95%98%EB%A9%B4-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B0%80-%EA%B0%80%EB%B2%BC%EC%9B%8C%EC%A7%80%EA%B3%A0-%EC%86%8D%EB%8F%84%EA%B0%80-%EB%8D%94-%EB%B9%A0%EB%A5%B4%EB%8B%A4</guid>
            <pubDate>Mon, 29 Jan 2024 06:12:16 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.acmicpc.net/problem/9498">https://www.acmicpc.net/problem/9498</a>
해당 백준 문제를 풀면서 알게된 사실이 있다.</p>
<p>코드를 함수화 하고 안하고의 차이를 시각적으로 보게되니 피부로 와 닿았다.</p>
<p>*<em>내가 기존에 작성한 코드
*</em></p>
<pre><code>const inputData = Number(require(&#39;fs&#39;).readFileSync(0, &#39;utf8&#39;).trim());

function cal(num) {
  if (90 &lt;= num &amp;&amp; num &lt;= 100) {
    console.log(&#39;A&#39;);
  } else if (80 &lt;= num &amp;&amp; num &lt; 90) {
    console.log(&#39;B&#39;);
  } else if (70 &lt;= num &amp;&amp; num &lt; 80) {
    console.log(&#39;C&#39;);
  } else if (60 &lt;= num &amp;&amp; num &lt; 70) {
    console.log(&#39;D&#39;);
  } else {
    console.log(&#39;F&#39;);
  }
}

cal(inputData);</code></pre><p>*<em>function 화 하지 않았을 때 코드
*</em></p>
<pre><code>const inputData = Number(require(&#39;fs&#39;).readFileSync(0, &#39;utf8&#39;).trim());

if (90 &lt;= inputData &amp;&amp; inputData &lt;= 100) {
  console.log(&#39;A&#39;);
} else if (80 &lt;= inputData &amp;&amp; inputData &lt; 90) {
  console.log(&#39;B&#39;);
} else if (70 &lt;= inputData &amp;&amp; inputData &lt; 80) {
  console.log(&#39;C&#39;);
} else if (60 &lt;= inputData &amp;&amp; inputData &lt; 70) {
  console.log(&#39;D&#39;);
} else {
  console.log(&#39;F&#39;);
}</code></pre><p>위 두 코드에서 </p>
<p><img src="https://velog.velcdn.com/images/ju-jh/post/199f373f-3236-4b3e-8a65-65672eb61234/image.png" alt=""></p>
<p>이렇게 근사한 차이가 생겼다.</p>
<p>메모리는 4KB 속도는 4ms 의 차이이다 어떤 부분이 그렇게 만든걸까?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[.trim( )]]></title>
            <link>https://velog.io/@ju-jh/trim</link>
            <guid>https://velog.io/@ju-jh/trim</guid>
            <pubDate>Mon, 29 Jan 2024 05:17:15 GMT</pubDate>
            <description><![CDATA[<p>trim() 메서드는 문자열 </p>
<p><strong>양 끝의 공백을 제거</strong>하고 <strong>원본 문자열을 수정하지 않고</strong> <strong>새로운 문자열을 반환</strong>합니다.</p>
<pre><code>const fs = require(&#39;fs&#39;);
const inputData = fs.readFileSync(0, &#39;utf8&#39;).trim();</code></pre><p>```
const greeting = &#39;   Hello world!   &#39;;</p>
<p>console.log(greeting);
// Expected output: &quot;   Hello world!   &quot;;</p>
<p>console.log(greeting.trim());
// Expected output: &quot;Hello world!&quot;;```</p>
]]></description>
        </item>
    </channel>
</rss>