<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hayoung's record</title>
        <link>https://velog.io/</link>
        <description>지적과 피드백은 언제나 환영합니다</description>
        <lastBuildDate>Tue, 03 Aug 2021 11:07:04 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hayoung's record</title>
            <url>https://images.velog.io/images/hayoung-jeremy/profile/a88c1f90-dfee-4d6b-88d6-8841da6e8691/social.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hayoung's record. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hayoung-jeremy" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[자릿수 더하기]]></title>
            <link>https://velog.io/@hayoung-jeremy/%EC%9E%90%EB%A6%BF%EC%88%98-%EB%8D%94%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@hayoung-jeremy/%EC%9E%90%EB%A6%BF%EC%88%98-%EB%8D%94%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 03 Aug 2021 11:07:04 GMT</pubDate>
            <description><![CDATA[<h2 id="자릿수-더하기">자릿수 더하기</h2>
<blockquote>
<p>본 글은 프로그래머스의 무료 강의 <a href="https://programmers.co.kr/learn/courses/18">알고리즘 문제 해설</a>을 공부하며 작성한 내용입니다.</p>
</blockquote>
<h3 id="문제-설명">문제 설명</h3>
<p>자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.</p>
<h3 id="제한사항">제한사항</h3>
<p>N의 범위 : 100,000,000 이하의 자연수</p>
<h3 id="문제-예시">문제 예시</h3>
<p>*
<img src="https://images.velog.io/images/hayoung-jeremy/post/c30637c6-c7cf-4496-9f49-4ee4cd89d3b4/image.png" alt=""></p>
<h3 id="keywords">keywords</h3>
<p><code>toString()</code> , <code>split()</code> , <code>map()</code> , <code>Number()</code> , <code>reduce()</code> , <code>자연수</code></p>
<h3 id="문제-풀이">문제 풀이</h3>
<p><code>123</code> 이라는 숫자를 받으면, <code>[1, 2, 3]</code> 이라는 배열로 바꿔준 다음, 각각의 배열 안 요소들을 더하여 그 합<code>6</code>을 구하면 된다.</p>
<ul>
<li><p>먼저 숫자를 배열로 바꾸기 위해서는, <code>toString()</code> 함수를 사용하여 문자열로 바꿔주어야 한다.</p>
<pre><code class="language-javascript">function solution(n) // 123
{
  let digits = n.toString() // &quot;123&quot;
}</code></pre>
<br>
</li>
<li><p>문자열을 배열로 바꿔주는 <code>split()</code> 함수는 숫자에는 사용할 수 없기 때문이다. 이제 문자열을 배열로 바꿔준다.</p>
<pre><code class="language-javascript">function solution(n) // 123
{
  let digits = n.toString().split(&quot;&quot;) // &quot;123&quot; -&gt; [&quot;1&quot;, &quot;2&quot;, &quot;3&quot;]
}</code></pre>
<blockquote>
<p><code>split(seperator)</code> 함수의 <code>seperator</code> 에 <code>&quot;&quot;</code> 처럼 빈 문자열을 주었을 경우, 원본 문자열의 각각의 문자가 배열의 원소 하나씩으로 반환된다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li><p>이제 반환된 문자들의 배열을 숫자들의 배열로 바꿔준다. <code>map()</code> 함수로 배열안의 요소들에 <code>Number()</code> wrapper 객체를 사용하여 새로운 배열로 바꿔 주었다.</p>
<pre><code class="language-javascript">function solution(n) // 123
{
  let digits = n.toString().split(&quot;&quot;).map(item =&gt; Number(item));
    // &quot;123&quot; -&gt; [&quot;1&quot;, &quot;2&quot;, &quot;3&quot;] -&gt; [1, 2, 3]
}</code></pre>
<br>
</li>
<li><p>배열의 요소들의 총 합을 구하는 방법은 <code>for loop</code> 을 사용하거나, <code>lodash</code> 라이브러리의 <code>sum</code> 함수를 사용하는 방법도 있다. 여기서는 javascript 의 내장함수인 <code>reduce()</code> 를 사용했다.</p>
<pre><code class="language-javascript">function solution(n) // 123
{
  let digits = n.toString().split(&quot;&quot;).map(item =&gt; Number(item));
    // &quot;123&quot; -&gt; [&quot;1&quot;, &quot;2&quot;, &quot;3&quot;] -&gt; [1, 2, 3]
    const result = digits.reduce((accumulator, currentValue) =&gt; accumulator + currentValue,0);
    // 누적값:0 + 현재값:1 -&gt; 누적값:1
    // 누적값:1 + 현재값:2 -&gt; 누적값:3
    // 누적값:3 + 현재값:3 -&gt; 결과값:6
      return result;
}</code></pre>
<blockquote>
<p><code>reduce</code> 함수는 <code>reducer</code> 함수를 실행하고, 하나의 결과 값을 반환한다. <code>reducer</code> 함수는 누적값과 현재값을 가질 수 있다(선택사항으로 현재 <code>index</code> 와 <code>원본 배열</code>을 받을 수도 있지만, 생략 가능하다).</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>이제 n의 범위를 정해준다.<pre><code class="language-javascript">function solution(n)
{
  if(n&lt;100_000_000){
      let digits = n.toString().split(&quot;&quot;).map(item =&gt; Number(item));
      const result = digits.reduce((accumulator, currentValue) =&gt; accumulator + currentValue,0);
      return result;
  }else{
      alert(&quot;the number is too big&quot;);
  }
}</code></pre>
<br>

</li>
</ul>
<h3 id="에러-현상">에러 현상</h3>
<ul>
<li>테스트 실행 중, 런타임 에러가 발생했다.
<img src="https://images.velog.io/images/hayoung-jeremy/post/0d2059e8-8269-4a0e-965f-6d933c69affa/image.png" alt=""></li>
</ul>
<p><a href="https://jaimemin.tistory.com/1522">런타임 에러가 발생하는 주 요인</a>은 다음과 같다.</p>
<p><strong>1. 배열에 할당된 크기를 넘어서 접근했을 때 (배열 인덱스를 잘못 참조했을 때)</strong>
2. 전역 배열의 크기가 메모리 제한을 초과할 때
3. 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
4. 0으로 나눌 떄
5. 라이브러리에서 예외를 발생시켰을 때
6. 재귀 호출이 너무 깊어질 때
7. 이미 해제된 메모리를 또 참조할 때</p>
<p>이 경우, 1번에 해당하는 에러가 발생한 것인데, 그 이유는 n 의 범위 설정을 잘못했기 때문이다.</p>
<pre><code class="language-javascript">...
    if(n&lt;100_000_000){
      ...
    }
...</code></pre>
<p>제한 사항에서, n 은 1억 미만의 <strong>자연수</strong>이다. 즉, 0 이하의 음수가 올 수는 없는 것이므로, 범위를 <code>0&lt;n&lt;100_000_000</code> 으로 설정해주어야 한다.
<br></p>
<h3 id="다른-방법">다른 방법</h3>
<ul>
<li>강사님처럼 <code>do while</code> 문을 사용하는 방법이 있는데, <a href="https://im-designloper.tistory.com/58">이 방식</a>이 속도가 더 빠르다고 한다.<br>

</li>
</ul>
<h3 id="references">references</h3>
<ul>
<li><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/split">https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/split</a></li>
<li><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce">https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce</a></li>
<li><a href="https://blogpack.tistory.com/626">https://blogpack.tistory.com/626</a></li>
<li><a href="https://www.delftstack.com/ko/howto/javascript/javascript-sum-of-array/">https://www.delftstack.com/ko/howto/javascript/javascript-sum-of-array/</a></li>
<li><a href="https://im-designloper.tistory.com/58">https://im-designloper.tistory.com/58</a></li>
<li><a href="https://hianna.tistory.com/408">https://hianna.tistory.com/408</a></li>
<li><a href="https://www.zerocho.com/category/JavaScript/post/5acafb05f24445001b8d796d">https://www.zerocho.com/category/JavaScript/post/5acafb05f24445001b8d796d</a></li>
<li><a href="https://ko.khanacademy.org/math/cc-sixth-grade-math/cc-6th-factors-and-multiples/whole-numbers-integers/a/whole-numbers-integers">https://ko.khanacademy.org/math/cc-sixth-grade-math/cc-6th-factors-and-multiples/whole-numbers-integers/a/whole-numbers-integers</a></li>
</ul>
]]></description>
        </item>
    </channel>
</rss>