<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>juwan-25.log</title>
        <link>https://velog.io/</link>
        <description>배움을 기록하자</description>
        <lastBuildDate>Sun, 09 Apr 2023 23:40:43 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>juwan-25.log</title>
            <url>https://velog.velcdn.com/images/juwan-25/profile/99dec9b4-74ec-4bb8-b115-6878c28b491d/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. juwan-25.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/juwan-25" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2주차 문제풀이]]></title>
            <link>https://velog.io/@juwan-25/2%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-8hd05qyx</link>
            <guid>https://velog.io/@juwan-25/2%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-8hd05qyx</guid>
            <pubDate>Sun, 09 Apr 2023 23:40:43 GMT</pubDate>
            <description><![CDATA[<h6 id="20230410">2023.04.10</h6>
<h2 id="1-최대공약수와-최소공배수">1. 최대공약수와 최소공배수</h2>
<h3 id="문제">문제</h3>
<p>두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.</p>
<h5 id="🔎-기본제공">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(n, m) {
    var answer = [];
    return answer;
}</code></pre>
<h3 id="풀이">풀이</h3>
<h4 id="📃-제출코드">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(n, m) {
    let gcd = (a, b)=&gt;{
        while(b!=0){
            let temp = a%b;
            a = b;
            b = temp;
        }
        return a;
    };
    let lcm = n*m/gcd(n,m);

    return [gcd(n,m), lcm];
}</code></pre>
<h4 id="📌-풀이설명">📌 풀이설명</h4>
<p>먼저, 최대공약수를 구하는 함수를 작성하였다. 매개변수로 n, m을 넘겨 주어 while문으로 m값이 0이 아닐 때 반복해주었다. 나머지 값을 이용해 a를 b로 나누었을 때 나머지를 b에 넣어주고, 원래 b값을 a에 넣어주며 최대공약수를 구한다. 그 다음으로 최소공배수는 두 수의 곱/최대공약수를 통해 구해준다.</p>
<br>

<h6 id="20230412">2023.04.12</h6>
<h2 id="2-같은-숫자는-싫어">2. 같은 숫자는 싫어</h2>
<h3 id="문제-1">문제</h3>
<p>배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,</p>
<ul>
<li>arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.</li>
<li>arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.</li>
</ul>
<h5 id="🔎-기본제공-1">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(arr) {
    var answer = [];
    return answer;
}</code></pre>
<h3 id="풀이-1">풀이</h3>
<h4 id="📃-제출코드-1">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(arr)
{
    let answer = [];
    for(let i=0; i&lt;arr.length; i++){
        if(arr[i]!=answer[answer.length - 1]) answer.push(arr[i]);
    }

    return answer;
}</code></pre>
<h4 id="📌-풀이설명-1">📌 풀이설명</h4>
<p>for문을 통해 arr의 길이까지 반복해주며 비교하여 반환할 배열에 값을 추가한다. arr의 값과 answer의 값을 비교하여 만약 전에 추가되지 않은 새로운 값일 경우 answer에 arr의 값을 추가한다.</p>
<p>🔑 다른 풀이를 찾아보니 filter를 활용하여 arr의 element와 그 다음 element가 같지 않을 경우 바로 배열에 추가해 반환한다.</p>
<pre><code class="language-javascript">function solution(arr){
    return arr.filter((val,index) =&gt; val != arr[index+1]);
}</code></pre>
<br>

<h6 id="20230414">2023.04.14</h6>
<h2 id="3-3진법-뒤집기">3. 3진법 뒤집기</h2>
<h3 id="문제-2">문제</h3>
<p>자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.</p>
<h5 id="🔎-기본제공-2">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(n) {
    var answer = 0;
    return answer;
}</code></pre>
<h3 id="풀이-2">풀이</h3>
<h4 id="📃-제출코드-2">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(n) {
    let answer = 0;
    let arr = [];
    while(n&gt;0){
        arr.push(n%3);
        n = Math.floor(n/3);
    }
    let j = 0;
    for(let i = arr.length-1; i&gt;=0; i--){
        answer += Math.pow(3,i)*arr[j];
        j++;
    }
    return answer;
} </code></pre>
<h4 id="📌-풀이설명-2">📌 풀이설명</h4>
<p>n을 3진법으로 변환하기 위하여 n(또는 n/3)을 3으로 나누었을 때 나머지를 배열에 넣어주면 3진법을 반전한 배열이 나오게 된다. 이때, 구한 배열에서 10진법으로 표현된 3진법 수를 구하고자 다시 반복문을 통하여 3의 i승 * 3진법 반전 배열의 값을 answer에 더해 반환해주어 반환한다.</p>
<p>🔑 다른 풀이를 찾아보니 진법을 바로 변환할 수 있는 함수가 있었다. 먼저 toString으로 원하는 진법으로 변환하고, 그 값을 잘라준 후 반전시킨다. 반전된 값을 다시 붙여준 후 parseInt로 3진법을 10진법으로 변환하여 그 값을 반환한다. </p>
<pre><code class="language-javascript">function solution(n) {
    return parseInt(n.toString(3).split(&#39;&#39;).reverse().join(&#39;&#39;), 3);
}</code></pre>
<br>


]]></description>
        </item>
        <item>
            <title><![CDATA[1주차 문제풀이]]></title>
            <link>https://velog.io/@juwan-25/1%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-bwi12fvj</link>
            <guid>https://velog.io/@juwan-25/1%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-bwi12fvj</guid>
            <pubDate>Sun, 02 Apr 2023 15:59:31 GMT</pubDate>
            <description><![CDATA[<h6 id="20230331">2023.03.31</h6>
<h2 id="1-가운데-글자-가져오기">1. 가운데 글자 가져오기</h2>
<h3 id="문제">문제</h3>
<p>단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.</p>
<h5 id="🔎-기본제공">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(s) {
    var answer = &#39;&#39;;
    return answer;
}</code></pre>
<h3 id="풀이">풀이</h3>
<h4 id="📃-제출코드">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(s) {
    let answer=&#39;&#39;;
    let len = Math.floor(s.length/2);
    if(s.length%2==0){
        answer = s[len-1]+s[len];
    } else {
        answer = s[len];
    }
    return answer;
}</code></pre>
<h4 id="📌-풀이설명">📌 풀이설명</h4>
<p>가운데 글자를 반환하기 위해서 가운데 index를 찾아서 Math.floor로 내림해주었다. 그리고 짝수인 경우와 홀수인 경우를 나누어 짝수인 경우에는 2글자를 반환하고 홀수인 경우에는 가운데 글자만 반환해주었다.
<br></p>
<h6 id="20230401">2023.04.01</h6>
<h2 id="2-수박수박수박수박수박수">2. 수박수박수박수박수박수?</h2>
<h3 id="문제-1">문제</h3>
<p>길이가 n이고, &quot;수박수박수박수....&quot;와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 &quot;수박수박&quot;을 리턴하고 3이라면 &quot;수박수&quot;를 리턴하면 됩니다.</p>
<h5 id="🔎-기본제공-1">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(n) {
    var answer = &#39;&#39;;
    return answer;
}</code></pre>
<h3 id="풀이-1">풀이</h3>
<h4 id="📃-제출코드-1">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(n) {
    let answer = &#39;&#39;;
    for(let i=0; i&lt;n; i++){
        if((i+1)%2==1) answer += &#39;수&#39;;
        else answer += &#39;박&#39;;
    }
    return answer;
}</code></pre>
<h4 id="📌-풀이설명-1">📌 풀이설명</h4>
<p>for문을 이용하여 n번째까지 반복해주며, 홀수 번째이면 수를 짝수 번째이면 박을 더하여 반환해주었다.
<br></p>
<h6 id="20230402">2023.04.02</h6>
<h2 id="3-내적">3. 내적</h2>
<h3 id="문제-2">문제</h3>
<p>길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]<em>b[0] + a[1]</em>b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)</p>
<h5 id="🔎-기본제공-2">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(a, b) {
    var answer = 1234567890;
    return answer;
}</code></pre>
<h3 id="풀이-2">풀이</h3>
<h4 id="📃-제출코드-2">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(a, b) {
    let answer = 0;
    for(let i in a){
        answer += a[i]*b[i];
    }
    return answer;
}</code></pre>
<h4 id="📌-풀이설명-2">📌 풀이설명</h4>
<p>for in을 활용하여서 key값에 접근할 수 있도록 하였다. key값에 순서대로 접근하여 a와 b 속성을 곱하고 더해주어 반환해주었다.
<br></p>
<h6 id="20230403">2023.04.03</h6>
<h2 id="4-문자열-내림차순으로-배치하기">4. 문자열 내림차순으로 배치하기</h2>
<h3 id="문제-3">문제</h3>
<p>문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.</p>
<h5 id="🔎-기본제공-3">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(n) {
    var answer = &#39;&#39;;
    return answer;
}</code></pre>
<h3 id="풀이-3">풀이</h3>
<h4 id="📃-제출코드-3">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(s) {
    let answer = &#39;&#39;;
    let str = s.split(&#39;&#39;).sort().reverse();
    for(let i in str){
        answer += str[i];
    }
    return answer;
}</code></pre>
<h4 id="📌-풀이설명-3">📌 풀이설명</h4>
<p>split으로 문자열을 배열로 나누어준 후 sort로 정렬해주었다. 그리고 reverse로 정렬된 배열을 반전시켜주고 for in을 통하여 순차적으로 문자열에 넣어 반환시켜주었다. </p>
<p>🔑 찾아보니 for in으로 하나씩 문자열에 더해 반환하는 것보다 join으로 문자열로 한 번에 바꾸어주는 방법이 더 효율적인 것 같다.
<br></p>
<h6 id="20230404">2023.04.04</h6>
<h2 id="5-약수의-개수와-덧셈">5. 약수의 개수와 덧셈</h2>
<h3 id="문제-4">문제</h3>
<p>두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.</p>
<h5 id="🔎-기본제공-4">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(left, right) {
    var answer = 0;
    return answer;
}</code></pre>
<h3 id="풀이-4">풀이</h3>
<h4 id="📃-제출코드-4">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(left, right) {
    let answer = 0;
    let cnt;
    for(let i=left; i&lt;=right; i++){
        cnt = 1;
        for(let j = 1 ; j &lt;= i/2 ; j++) if(i % j == 0) cnt++;
        if(cnt%2==0) answer+=i;
        else answer-=i;
    }
    return answer;
}</code></pre>
<h4 id="📌-풀이설명-4">📌 풀이설명</h4>
<p>left부터 right까지의 수들로 반복하고자 for문을 left부터 right까지 범위로 하였다. 약수는 본인을 제외하고 n/2보다 클 수 없어서 약수를 구할 때 전체 for문이 아닌 약수를 구하고자 하는 수/2까지만 돌려주었다. 이때, cnt는 약수의 개수인데 무조건 자기 자신은 포함되므로 1부터 시작해주었다. </p>
<p>🔑 다른 풀이를 찾아보니 제곱근의 정수이면 약수의 개수가 홀수임을 이용하여 풀 수 있다는 것을 알았다. for문으로 범위대로 반복하며 Math.sqrt()로 제곱근을 구해준다. 그 후 Number.isInteger로 그 값이 정수인지 확인하여 여부에 따라 더하거나 빼준다.</p>
<pre><code class="language-javascript">function solution(left, right) {
    var answer = 0;
    for (let i = left; i &lt;= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}</code></pre>
<br>

<h6 id="20230405">2023.04.05</h6>
<h2 id="6-문자열-다루기-기본">6. 문자열 다루기 기본</h2>
<h3 id="문제-5">문제</h3>
<p>문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 &quot;a234&quot;이면 False를 리턴하고 &quot;1234&quot;라면 True를 리턴하면 됩니다.</p>
<h5 id="🔎-기본제공-5">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(left, right) {
    var answer = 0;
    return answer;
}</code></pre>
<h3 id="풀이-5">풀이</h3>
<h4 id="📃-제출코드-5">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(s) {
    let cnt = 0;
    if(s.length!=4&amp;&amp;s.length!=6) return false;
    let arr = s.split(&#39;&#39;)
    for(const element of arr){
        if(0&lt;=element&amp;&amp;element&lt;=9) cnt++;
    }
    if(cnt==s.length) return true;
    else return false;
}</code></pre>
<h4 id="📌-풀이설명-5">📌 풀이설명</h4>
<p>먼저 문자열의 길이가 4혹은 6인지 판단하고자 length를 비교해주었다. 문자열 길이가 조건에 만족한다면 모두 숫자인지 알아보고자 split()로 문자열을 각각 문자로 나누고 for of로 반복하여 0에서 9 사이 숫자인지 비교하였다. 조건에 만족하는 문자의 개수가 문자열의 길이와 같다면 모두 숫자인 경우로 true를 아니라면 false를 반환하였다.</p>
<p>처음에는 문자열 내 모두 숫자일 경우에만 false를 반환하는 isNaN()을 사용하여 문제를 해결하려고 하였으나, 하나의 테스트 케이스에서 막혀 isNaN으로 해결하지 못하였다.</p>
<pre><code class="language-javascript">function solution(s) {
    if(s.length!=4&amp;&amp;s.length!=6) return false;
    if(!isNaN(s)) return true;
    else return false;
}</code></pre>
<p>♦ 문제를 풀 때 삼항연산자를 이용하거나 함수를 이용해보는 것이 좋을 거 같다.</p>
<p>🔑 정규식을 활용하는 방법도 있었다. // 는 정규식이며 안에는 <code>\d</code> 숫자, <code>^</code> ~로 시작, <code>{4}</code> 길이 4, <code>$</code> 숫자로 끝남, <code>|</code> 또는 을 의미한다. 즉, 숫자로 시작하고 길이가 4이며 숫자로 끝남 또는 숫자로 시작하고 길이가 6이며 숫자로 끝남을 이야기하는 것이다. 정규식에 대하여 test()로 조건에 만족하면 true를 아니면 false를 반환시키도록 한 것이다.</p>
<pre><code class="language-javascript">function solution(s) {  
  return /^\d{4}$|^\d{6}$/.test(s)
}</code></pre>
<br>

<h6 id="20230406">2023.04.06</h6>
<h2 id="7-부족한-금액-계산하기">7. 부족한 금액 계산하기</h2>
<h3 id="문제-6">문제</h3>
<p>새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.</p>
<h5 id="🔎-기본제공-6">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(price, money, count) {
    var answer = -1;
    return answer;
}</code></pre>
<h3 id="풀이-6">풀이</h3>
<h4 id="📃-제출코드-6">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(price, money, count) {
    let sum = 0;
    for(let i=1; i&lt;=count; i++) sum += price*i;
    if(money&lt;sum) return sum-money;
    return 0;
}</code></pre>
<h4 id="📌-풀이설명-6">📌 풀이설명</h4>
<p>놀이기구를 n번째 이용하기 때문에 1부터 count까지 for문으로 반복해주며, 값을 더해주었다. 그리고 가지고 있는 돈과 합계를 비교하여 지출해야하는 합계가 크다면 부족한 값을 반환하였다. </p>
<p>♦ 문제를 풀 때 삼항연산자를 이용하거나 함수를 이용해보는 것이 좋을 거 같다.</p>
<p>🔑 다른 풀이를 찾아보니 가우식 공식을 사용하여 (처음 숫자 + 마지막 숫자) * (마지막 숫자 - 처음 숫자) * 1/2를 통해 1부터 count까지의 합을 구한 후 가격을 곱해주면 총 합계가 나온다. 그 후 가지고 있는 돈을 빼주었을 때 조건을 비교하여 값을 반환한다.</p>
<pre><code class="language-javascript">function solution(price, money, count) {
    const tmp = price * count * (count + 1) / 2 - money;
    return tmp &gt; 0 ? tmp : 0;
}</code></pre>
<br>

<h6 id="20230407">2023.04.07</h6>
<h2 id="8-행렬의-덧셈">8. 행렬의 덧셈</h2>
<h3 id="문제-7">문제</h3>
<p>행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.</p>
<h5 id="🔎-기본제공-7">🔎 기본제공</h5>
<pre><code class="language-javascript">function solution(arr1, arr2) {
    var answer = [[]];
    return answer;
}</code></pre>
<h3 id="풀이-7">풀이</h3>
<h4 id="📃-제출코드-7">📃 제출코드</h4>
<pre><code class="language-javascript">function solution(arr1, arr2) {
    let answer = [];
    for(let i in arr1){
        let arr = [];
        for(let j in arr1[i]){
            arr.push(arr1[i][j]+arr2[i][j]);
        }
        answer.push(arr)
    }
    return answer;
}</code></pre>
<h4 id="📌-풀이설명-7">📌 풀이설명</h4>
<p>먼저 for in으로 arr1의 길이까지 반복해주고 반환할 배열 안에 들어갈 배열을 만들어주었다. 그 배열에 for in으로 arr1[i]의 길이까지 반복하여 같은 행렬끼리 덧셈을 구하고 push하여 넣어준다. 그리고 그 배열을 다시 반환할 배열에 넣어주었다.</p>
<p>🔑 다른 풀이를 찾아보니 map을 중첩하여 풀었는데, 아직은 이해하기 어려웠다. 첫 배열에 map을 이용해 i 인덱스를 만들고 또 그 내부 배열에 map을 걸어 j 인덱스를 만든다. 그리고 B배열의 i,j 요소를 더해 반환한다. 빈배열을 할당하지 않아도 두 배열을 다뤄서인지 구성된다는 점이 신기했다. </p>
<pre><code class="language-javascript">function sumMatrix(A,B){
    return A.map((arr1, idx1) =&gt; arr1.map((val, idx2) =&gt; val+B[idx1][idx2]));
}</code></pre>
<br>

<h6 id="20230408">2023.04.08</h6>
<h2 id="9-직사각형-별찍기">9. 직사각형 별찍기</h2>
<h3 id="문제-8">문제</h3>
<p>이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.</p>
<h5 id="🔎-기본제공-8">🔎 기본제공</h5>
<pre><code class="language-javascript">process.stdin.setEncoding(&#39;utf8&#39;);
process.stdin.on(&#39;data&#39;, data =&gt; {
    const n = data.split(&quot; &quot;);
    const a = Number(n[0]), b = Number(n[1]);
    console.log(a);
    console.log(b);
});</code></pre>
<h3 id="풀이-8">풀이</h3>
<h4 id="📃-제출코드-8">📃 제출코드</h4>
<pre><code class="language-javascript">process.stdin.setEncoding(&#39;utf8&#39;);
process.stdin.on(&#39;data&#39;, data =&gt; {
    const n = data.split(&quot; &quot;);
    const a = Number(n[0]), b = Number(n[1]);
    for(let i=0; i&lt;b; i++){
        let str = &quot;&quot;;
        for(let j=0; j&lt;a; j++){
            str += &#39;*&#39;;
        }
        console.log(str);
    }
});</code></pre>
<h4 id="📌-풀이설명-8">📌 풀이설명</h4>
<p>for문을 통해서 a까지 반복하여 빈 문자열에 &#39;*&#39;을 추가해준다. 그리고 a까지 돌린 후 문자열을 찍어준다. b까지 반복하는 for문 안에 넣어 직사각형으로 나올 수 있도록 한다.</p>
<p>🔑 다른 풀이를 찾아보니 repeat 메서드를 통해 &#39;*&#39;을 a 횟수만큼 반복하여 붙인 새로운 문자열을 만들어준다. 그리고 만들어준 문자열을 b까지 반복하는 for문으로 출력한다.</p>
<pre><code class="language-javascript">process.stdin.setEncoding(&#39;utf8&#39;);
process.stdin.on(&#39;data&#39;, data =&gt; {
    const n = data.split(&quot; &quot;);
    const a = Number(n[0]), b = Number(n[1]);
    const row = &#39;*&#39;.repeat(a)
    for(let i =0; i &lt; b; i++){
        console.log(row)
    }

});</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[암호화&복호화]]></title>
            <link>https://velog.io/@juwan-25/%EC%95%94%ED%98%B8%ED%99%94%EB%B3%B5%ED%98%B8%ED%99%94</link>
            <guid>https://velog.io/@juwan-25/%EC%95%94%ED%98%B8%ED%99%94%EB%B3%B5%ED%98%B8%ED%99%94</guid>
            <pubDate>Tue, 28 Mar 2023 14:46:13 GMT</pubDate>
            <description><![CDATA[<h2 id="🔒-암호화와-복호화">🔒 암호화와 복호화</h2>
<h4 id="span-stylebackground-colorfff5b1암호화span--평문을-암호문으로-변환"><span style='background-color:#fff5b1'>암호화</span> : 평문을 암호문으로 변환</h4>
<p>plain text &gt; plain bytes &gt; encrypt &gt; encrypted bytes &gt; encrypted base64 text</p>
<h4 id="span-stylebackground-colorfff5b1복호화span--암호문을-평문으로-변환"><span style='background-color:#fff5b1'>복호화</span> : 암호문을 평문으로 변환</h4>
<p>encrpyted base64 text &gt; encrypted bytes &gt; decrypt &gt; plain bytes &gt; plain text
<br>
<br></p>
<h2 id="❗-aes">❗ AES</h2>
<h4 id="▪-고급-암호화-표준">▪ 고급 암호화 표준</h4>
<h4 id="▪-대칭키-알고리즘">▪ 대칭키 알고리즘</h4>
<h4 id="▪-안정성-높음">▪ 안정성 높음</h4>
<h4 id="aes-128-aes-192-aes-256">AES-128, AES-192, AES-256</h4>
<p>이때, 숫자는 키의 길이를 의미(bit단위)
<br>
<br></p>
<h2 id="❗-aes-암호화-필요-요소">❗ AES 암호화 필요 요소</h2>
<h4 id="span-stylebackground-colorf5f0ff비밀키secret-keyspan"><span style='background-color:#f5f0ff'>비밀키(Secret key)</span></h4>
<p>외부에 노출이 되서는 안되며, AES 종류에 따라 길이 달라짐</p>
<h4 id="span-stylebackground-colorf5f0ff블록-암호-운용-방식block-cipher-modespan"><span style='background-color:#f5f0ff'>블록 암호 운용 방식(Block Cipher Mode)</span></h4>
<p>일정한 크기의 블록으로 잘라낸 후 각 블록 암호화
만약, 암호화하려는 정보가 블록의 길이보다 길면 특정한 운용 모드 사용 
ex) ECB CBC</p>
<h4 id="span-stylebackground-colorf5f0ff패딩-기법paddingspan"><span style='background-color:#f5f0ff'>패딩 기법(Padding)</span></h4>
<p>데이터를 특정 크기로 맞추기 위해서 부족한 공간을 의미없는 문자로 채워서 비트수 맞춤
ex) PKCS5, PKCS7 
<br>
<br></p>
<p>🔗 <a href="https://blog.naver.com/PostView.naver?blogId=01075970528&amp;logNo=222484380977&amp;parentCategoryNo=&amp;categoryNo=10&amp;viewDate=&amp;isShowPopularPosts=true&amp;from=search">참고1</a>
🔗 <a href="https://www.zerocho.com/category/NodeJS/post/593a487c2ed1da0018cff95d">참고2</a>
🔗 <a href="https://sieunlim.tistory.com/16">참고3</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[11,12차시 - 인공지능을 통한 음성인식 기초 / 인공지능을 통한 음성인식 심화]]></title>
            <link>https://velog.io/@juwan-25/1112-%EC%B0%A8%EC%8B%9C-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%84-%ED%86%B5%ED%95%9C-%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D-%EA%B8%B0%EC%B4%88-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%84-%ED%86%B5%ED%95%9C-%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D-%EC%8B%AC%ED%99%94</link>
            <guid>https://velog.io/@juwan-25/1112-%EC%B0%A8%EC%8B%9C-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%84-%ED%86%B5%ED%95%9C-%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D-%EA%B8%B0%EC%B4%88-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%84-%ED%86%B5%ED%95%9C-%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D-%EC%8B%AC%ED%99%94</guid>
            <pubDate>Thu, 09 Jun 2022 15:16:14 GMT</pubDate>
            <description><![CDATA[<h3 id="🔊-span-stylecolor-navy음성인식span">🔊 <span style="color: navy">음성인식</span></h3>
<h4 id="트레이닝-셋--라벨링된-데이터---업로드한-음성에-라벨을-붙여-만듦">트레이닝 셋 : 라벨링된 데이터 - 업로드한 음성에 라벨을 붙여 만듦</h4>
<h4 id="span-stylecolor-00c0e9배경소음-수집span이-중요--백색소음-주변소음이-담겨-인식하지-못할-수-있어서-필수적으로-수집"><span style="color: #00c0e9">배경소음 수집</span>이 중요 : 백색소음, 주변소음이 담겨 인식하지 못할 수 있어서 필수적으로 수집</h4>
<p>인식할 소리를 제외하고 생활 소음, 백색소음, 주변 소음을 20초 이상 수집해야 한다.</p>
<h4 id="제대로-발음-그렇지-않은-발음-녹음">제대로 발음, 그렇지 않은 발음 녹음</h4>
<p>정확한 소리만 수집하는 것이 아니라 여러 발음으로 녹음해 다양한 데이터를 수집해야 한다.</p>
<h4 id="하나의-클래스의-모아진-소리-합이-10초-정도-되게해야-함">하나의 클래스의 모아진 소리 합이 10초 정도 되게해야 함</h4>
<p>음성 1초에 44000개의 데이터로 오랜시간이 필요하다.</p>
<h4 id="span-stylecolor-00c0e9중첩요인span--빈도에-따라-0은-1초간격-05는-05초-간격으로-인식"><span style="color: #00c0e9">중첩요인</span> : 빈도에 따라 0은 1초간격 0.5는 0.5초 간격으로 인식</h4>
<p>주변소음이 달라지거나 다른 사람의 목소리로 테스트 하게되면 성능이 떨어질 수 있으므로 다양한 데이터를 수집해 인식률을 높이는 것이 중요하다.</p>
<br>
<br>

<h3 id="🎤-span-stylecolor-navy음성인식-인공지능span">🎤 <span style="color: navy">음성인식 인공지능</span></h3>
<p>배경 소음 인식, 음성의 특징이 잘 드러나게 녹음해야 하며, 특징이 정확할 수록 인식율이 늘어난다.</p>
<h4 id="학슴-샘플--트레이닝-샘플-트레이닝-데이터-셋">학슴 샘플 : 트레이닝 샘플, 트레이닝 데이터 셋</h4>
<h4 id="테스트-샘플--모아놓은-데이터셋의-15가량으로-가중치-업데이트마다-성능을-평가하기-위한-데이터로-사용되는-테스트-데이터셋">테스트 샘플 : 모아놓은 데이터셋의 15%가량으로 가중치 업데이트마다 성능을 평가하기 위한 데이터로 사용되는 테스트 데이터셋</h4>
<br>
<br>

<h3 id="🎤-span-stylecolor-navy과소적합span">🎤 <span style="color: navy">과소적합</span></h3>
<h4 id="인공지능-모델이-학습샘플의-어떠한-특징이나-복잡성을-파악하지-못하여-분류-상태가-좋지-않은-경우">인공지능 모델이 학습샘플의 어떠한 특징이나 복잡성을 파악하지 못하여 분류 상태가 좋지 않은 경우</h4>
<p>초기 에포크 상태에 자주 발생하며, 훈련 데이터 셋과 테스트 데이터 셋에 대한 성능이 둘 다 좋지 않다.</p>
<br>
<br>

<h3 id="🎤-span-stylecolor-navy과적합span">🎤 <span style="color: navy">과적합</span></h3>
<h4 id="인공지능-모델이-지나치게-학습-샘플과-유사하게-분류하도록-학습되어서-테스트-샘플에-대해서는-성능이-좋지-않은-경우">인공지능 모델이 지나치게 학습 샘플과 유사하게 분류하도록 학습되어서 테스트 샘플에 대해서는 성능이 좋지 않은 경우</h4>
<p>훈련 데이터 셋 성능이 좋으나 테스트 데이터 셋 성능은 좋지 않다. 데이터 셋의 구성을 더 다양한 데이터와 많은 양의 데이터가 필요하다.</p>
<h4 id="과적합-과소적합-해결-방안">과적합, 과소적합 해결 방안</h4>
<ol>
<li>배경소음 데이터 확보</li>
<li>데이터 양 늘리기</li>
<li>데이터 특징 잘 드러나도록 정제하기</li>
</ol>
<p>손실, 정확도 함수 그래프로 성능 평가할 수 있다.</p>
<p>스크래치 내에서 티처블 머신 연동 프로그램, tts 프로그램을 활용해 음성인식 인공지능을 제작해 볼 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[9,10차시 - 음성 데이터의 이해 / 인공지능과 음성인식]]></title>
            <link>https://velog.io/@juwan-25/910%EC%B0%A8%EC%8B%9C-%EC%9D%8C%EC%84%B1-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%9D%B4%ED%95%B4-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EA%B3%BC-%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D</link>
            <guid>https://velog.io/@juwan-25/910%EC%B0%A8%EC%8B%9C-%EC%9D%8C%EC%84%B1-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%9D%B4%ED%95%B4-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EA%B3%BC-%EC%9D%8C%EC%84%B1%EC%9D%B8%EC%8B%9D</guid>
            <pubDate>Thu, 09 Jun 2022 14:59:50 GMT</pubDate>
            <description><![CDATA[<h3 id="🔍-span-stylecolor-navy음성-데이터span">🔍 <span style="color: navy">음성 데이터</span></h3>
<h4 id="인간의-언어--자연어">인간의 언어 : 자연어</h4>
<h4 id="기계의-언어--기계어---01로만-이루어짐">기계의 언어 : 기계어 - 0,1로만 이루어짐</h4>
<p><strong><span style="color: #00c0e9">기계어 -&gt; 어셈블리어 -&gt; 고급어(고급 프로그래밍 언어)</span></strong></p>
<p>자연어에 가까울 수록 인간이 이해하기 쉬워진다.</p>
<p><strong>음성인식 : 우리의 말들을 인지, 파악하고 분석해 그 결과에 맞는 표현이나 결과 전달</strong></p>
<p>문자언어는 시각적으로 이미지를 사용하지만, 음성언어는 청각적으로 소리를 사용하여 전달해야 한다.</p>
<br>
<br>

<h3 id="📢-span-stylecolor-navy소리span와-span-stylecolor-navy주파수span">📢 <span style="color: navy">소리</span>와 <span style="color: navy">주파수</span></h3>
<h4 id="소리--주기적인-움직임을-갖는-waveform의-형태로-표현">소리 : 주기적인 움직임을 갖는 waveform의 형태로 표현</h4>
<p>주기적인 움직임은 어떠한 단위시간 동안 진동한 횟수의 개념으로 <strong>x축은 시간, y축은 진폭</strong>을 의미한다. <strong>진폭</strong>은 주기적으로 진동하는 파형, 진동의 폭이다. <strong>주기</strong>는 특정 지점에서 다시 같은 부분이 등장하는 부분까지의 시간, 한번 진동하는데 걸리는 시간을 의미한다.<img src="https://velog.velcdn.com/images/juwan-25/post/380f8b03-4d21-4079-bb86-f84782980d12/image.png" alt=""></p>
<h4 id="주파수--hz라는-단위를-사용하며-단위시간-1초에-진동하는-횟수">주파수 : Hz라는 단위를 사용하며, 단위시간 1초에 진동하는 횟수</h4>
<p>주파수는 1/주기이고, 주기는 1/주파수이다. 고주파는 초당 진동 수 많으며, 높은 음의 소리를 낸다. 저주파는 초당 진동 수 적으며, 낮은 음의 소리를 낸다. 진폭의 크기가 크면 대체적으로 소리의 크기가 크다.</p>
<h4 id="소리-샘플링--소리-파동의-높이를-일정한-간격에-의한-좌표값으로-저장--소리를-숫자화-디지털화">소리 샘플링 : 소리 파동의 높이를 일정한 간격에 의한 좌표값으로 저장 &amp; 소리를 숫자화, 디지털화</h4>
<h4 id="저장하는-주기--샘플링-레이트">저장하는 주기 = 샘플링 레이트</h4>
<p>샘플링 레이트가 짧으면 실제와 가깝고, 멀면 손실이 많은 신호로 실제와 멀다. 표준 샘플링 레이트는 44.1KHz로 0.0000267초 간격이다.</p>
<br>
<br>

<h3 id="📉-span-stylecolor-navy소리의-파동span">📉 <span style="color: navy">소리의 파동</span></h3>
<h4 id="span-stylecolor-00c0e9시간-영역span"><span style="color: #00c0e9">시간 영역</span></h4>
<p>waveform, 파형에 익숙함</p>
<h4 id="span-stylecolor-00c0e9주파수-영역span"><span style="color: #00c0e9">주파수 영역</span></h4>
<p>파형은 무한개의 코사인 또는 사인과 같은 주기함수의 합으로 나타낼 수 있으며, 여러 주기 함수는 주파수 별로 분리 가능
<strong>-&gt; 소리의 파동 신호는 다른 주기의 주파수 성분의 합으로 표현</strong></p>
<br>
<br>

<h3 id="📝-span-stylecolor-navy주파수-정보-특징-추출span">📝 <span style="color: navy">주파수 정보 특징 추출</span></h3>
<h4 id="span-stylecolor-00c0e9스펙트럼-방식span--소리를-주파수-영역으로-봄"><span style="color: #00c0e9">스펙트럼 방식</span> : 소리를 주파수 영역으로 봄</h4>
<p>특정 주파수의 진폭값을 알 수 있게 되고, x축은 주파수, y축은 진폭 구성된 값으로 표현이 가능하다.</p>
<h4 id="span-stylecolor-00c0e9멜-스펙트로그램-방식span--시간에-대한-정보까지-고려해서-주파수-특성이-시간에-따라-달라지는-특징을-추출해-줄-수-있는-기법"><span style="color: #00c0e9">멜 스펙트로그램 방식</span> : 시간에 대한 정보까지 고려해서 주파수 특성이 시간에 따라 달라지는 특징을 추출해 줄 수 있는 기법</h4>
<p>실제 주파수 정보를 인간이 청각구조를 반영하여 수학적으로 변환하기 위한 대표적인 방법이다.</p>
<h3 id="📡-span-stylecolor-navy음성인식span">📡 <span style="color: navy">음성인식</span></h3>
<h4 id="음성인식--기계가-사람의-말소리를-인식하고-그-결과를-문자로-출력해주는-시스템">음성인식 : 기계가 사람의 말소리를 인식하고 그 결과를 문자로 출력해주는 시스템</h4>
<p>ex) LG ThinQ, Apple Siri</p>
<h4 id="span-stylecolor-00c0e9음향모델-acoustic-modelspan--음성을-자주-듣고-학습해-음성에-대해-익숙해지는-과정"><span style="color: #00c0e9">음향모델 (Acoustic Model)</span> : 음성을 자주 듣고 학습해 음성에 대해 익숙해지는 과정</h4>
<p>음향모델을 훈련하는 것은 특정 언어에 존재하는 <strong>모든 음소</strong>를 배우는 과정을 담고 있다.</p>
<h4 id="span-stylecolor-00c0e9언어모델-language-modelspan--단어의-자연스러운-결합을-듣고-배우는-과정"><span style="color: #00c0e9">언어모델 (Language Model)</span> : 단어의 자연스러운 결합을 듣고 배우는 과정</h4>
<p>언어모델을 훈련하며 특정 언어에 존재하는 <strong>단어 결합 규칙을 습득</strong>할 수 있다.</p>
<p>음성인식을 위해서는 음향모델로 음소와 단어를 학습하고, 언어모델로 어휘, 문법, 주제를 학습해야 한다.</p>
<h3 id="🥽-span-stylecolor-navy베이즈-정리span">🥽 <span style="color: navy">베이즈 정리</span></h3>
<p>어떤 사건이 서로 배반하는 원인 둘에 의해 일어난다고 할 때 실제 사건이 일어났을 때, 이것이 두 원인 중 하나일 확률을 구하는 정리</p>
<h4 id="베이즈-정리를-음성인식-과정에-대입">베이즈 정리를 음성인식 과정에 대입</h4>
<p><img src="https://velog.velcdn.com/images/juwan-25/post/2ce590f2-af9c-44fd-be47-326d2b426109/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[7,8차시 - Teachable Machine 시작하기 / Teachable Machine으로 마스크 미착용자 찾아낼 수 있다?!]]></title>
            <link>https://velog.io/@juwan-25/78%EC%B0%A8%EC%8B%9C-Teachable-Machine-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Teachable-Machine%EC%9C%BC%EB%A1%9C-%EB%A7%88%EC%8A%A4%ED%81%AC-%EB%AF%B8%EC%B0%A9%EC%9A%A9%EC%9E%90-%EC%B0%BE%EC%95%84%EB%82%BC-%EC%88%98-%EC%9E%88%EB%8B%A4</link>
            <guid>https://velog.io/@juwan-25/78%EC%B0%A8%EC%8B%9C-Teachable-Machine-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Teachable-Machine%EC%9C%BC%EB%A1%9C-%EB%A7%88%EC%8A%A4%ED%81%AC-%EB%AF%B8%EC%B0%A9%EC%9A%A9%EC%9E%90-%EC%B0%BE%EC%95%84%EB%82%BC-%EC%88%98-%EC%9E%88%EB%8B%A4</guid>
            <pubDate>Sun, 22 May 2022 15:55:15 GMT</pubDate>
            <description><![CDATA[<h3 id="📺-span-stylecolor-navyteachable-machinespan">📺 <span style="color: navy">Teachable Machine</span></h3>
<h4 id="span-stylecolor-00c0e9기계학습을-보다-쉽게-해주어-모델span을-만들-수-있는-프로그램으로-이미지-오디오-포즈-프로젝트가-있음"><span style="color: #00c0e9">기계학습을 보다 쉽게 해주어 모델</span>을 만들 수 있는 프로그램으로 이미지, 오디오, 포즈 프로젝트가 있음</h4>
<p>트레이닝 셋을 라벨링을 통해 구현하여 사진을 추가해 라벨을 붙인다. 여러 각도로 사진을 추가해 다양한 데이터 수집하는 것이 중요하다. 만약, 출력의 정확도가 부족하다면 더 많은 데이터 수집을 통해 정확도를 높여 성능이 좋아지도록 해야 한다.</p>
<p><strong>배경이 달라지면, 즉 환경이 변화하면 학습이 되지 않아</strong> 예측한 결과가 나오지 않을 수 있다. 그러므로 여러 형태, 각도, 주변 환경 등을 고려해서 학습을 모두 시켜야 한다.</p>
<p>색감이 확실하거나 특이한 형태를 지닌 경우 <strong>특징이 많아서 구분을 잘 할 수</strong> 있게 된다. 만약 구분이 잘 안된다면 <strong>데이터를 추가하거나 불필요한 데이터를 삭제</strong>해야 한다. 
<br>
<br></p>
<h3 id="📉-span-stylecolor-navy혼동행렬-정확도-그래프-손실도-그래프span">📉 <span style="color: navy">혼동행렬, 정확도 그래프, 손실도 그래프</span></h3>
<h4 id="span-stylecolor-00c0e9혼동-행렬span"><span style="color: #00c0e9">혼동 행렬</span></h4>
<p><strong>y축 : class
x축 : prediction - 예측해서 분류할 수 있는 항목</strong>
대각에 수치가 모두 위치했다면 학습이 매우 잘 되었다는 뜻</p>
<h4 id="span-stylecolor-00c0e9정확도-그래프span"><span style="color: #00c0e9">정확도 그래프</span></h4>
<p><strong>에포크 돌기 전에는 모든 데이터에 대해 손실이 큼</strong>
점차 손실이 줄어서 loss가 0에 가까워지게 된다.</p>
<h4 id="span-stylecolor-00c0e9손실도-그래프span"><span style="color: #00c0e9">손실도 그래프</span></h4>
<p><strong>물질의 특징이 확실하다면 test loss는 처음부터 0에 가까움</strong></p>
<blockquote>
<p>각 데이터 샘플 중에 85% = 트레이닝 셋
각 데이터 샘플 중에 15% = 테스트 샘플</p>
</blockquote>
<h4 id="에포크와-배치-크기의-사이즈가-적절하지-않으면-정확도가-떨어지고-손실이-늘어나며-혼동행렬-수치가-대각에-위치-하지-않음">에포크와 배치 크기의 사이즈가 적절하지 않으면 정확도가 떨어지고 손실이 늘어나며, 혼동행렬 수치가 대각에 위치 하지 않음</h4>
<ol>
<li>데이터 수집량 늘리기</li>
<li>데이터 정제하기</li>
<li>에포크와 배치사이즈 적절히 조절하기</li>
</ol>
<p>정확도 그래프, 손실 그래프, 혼동행렬 그래프로 성능을 평가하고 비교할 수 있다.</p>
<p>이렇게 만든 모델은 링크나 코드로 변환해 어디서나 사용할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[6차시 – 영상처리와 인공지능]]></title>
            <link>https://velog.io/@juwan-25/6%EC%B0%A8%EC%8B%9C-%EC%98%81%EC%83%81%EC%B2%98%EB%A6%AC%EC%99%80-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5</link>
            <guid>https://velog.io/@juwan-25/6%EC%B0%A8%EC%8B%9C-%EC%98%81%EC%83%81%EC%B2%98%EB%A6%AC%EC%99%80-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5</guid>
            <pubDate>Tue, 10 May 2022 16:27:28 GMT</pubDate>
            <description><![CDATA[<h3 id="🎥-span-stylecolor-navy영상-인식span">🎥 <span style="color: navy">영상 인식</span></h3>
<h4 id="영상-즉-이미지데이터를-가지고-span-stylecolor-00c0e9이미지-처리를-하거나-인공지능을-거쳐서-영상에-포함된-의미span를-분석-해석해내는-과정">영상 즉, 이미지데이터를 가지고 <span style="color: #00c0e9">이미지 처리를 하거나 인공지능을 거쳐서 영상에 포함된 의미</span>를 분석, 해석해내는 과정</h4>
<p>컴퓨터를 사용해서 영상을 처리, 즉 이미지 처리를 연구하는 분야인 컴퓨터 비전에 속하며, 영상인식은 컴퓨터 비전의 핵심 작업이다.</p>
<br>
<br>

<h3 id="📟-span-stylecolor-navy영상-인식-작업의-종류span">📟 <span style="color: navy">영상 인식 작업의 종류</span></h3>
<h4 id="객체-탐지">객체 탐지</h4>
<p><strong><span style="color: #00c0e9">오브젝트가 존재하는지에 대한 유무 판단</span></strong>
찾고자 하는 객체의 <strong>특징을 사전에 추출하고 주어진 영상에서 해당 특징을 검출</strong>해내는 접근을 사용한다. 객체 탐지를 통해서는 정해진 특징에 맞는 어떤 객체이다 정도 까지만 판단 가능하다.</p>
<h4 id="객체-인식">객체 인식</h4>
<p><strong><span style="color: #00c0e9">검출된 객체, 그 객체 자체가 무엇인지 인식 시키는 개념</span></strong>
객체 탐지되어야 진행 가능하며, 객체가 라벨링 된다고 생각하면 된다.</p>
<h4 id="객체-추적">객체 추적</h4>
<p><strong>탐지된 객체, 인식된 객체를 <span style="color: #00c0e9">매 프레임마다 확인하면서  그 객체가 어떻게 어디로 움직이는지 등을 파악하며 </span>추적하는 것</strong>
객체 탐지, 인식이 선행되어야 진행할 수 있다.</p>
<h4 id="객체-영역-분할">객체 영역 분할</h4>
<p><strong>단순히 분류에 그치지 않고 <span style="color: #00c0e9">인식된 대상을 픽셀 단위로 정확히 분할하고 나누어내는 것</span></strong></p>
<br>
<br>

<h3 id="📌-span-stylecolor-navy영상의-특징span">📌 <span style="color: navy">영상의 특징</span></h3>
<h4 id="주변과-다르게-숫자가-변하는-수치적-느낌이-있는-것수치적-의미">주변과 다르게 숫자가 변하는 수치적 느낌이 있는 것(수치적 의미)</h4>
<p>가장 중요한 것은 영상이 인식되려면 먼저 객체의 특징을 사전에 정의하고 추출해야 한다는 것이다. 영상에 대한 특징을 구하는 것은 숫자값들이 확 변하거나 내가 검출한 점이나 픽셀 간격이 확 벌어진다는 등의 특징을 구할 수 있다. 이러한 특징을 구하려면 애매하게 차이나는 것들을 <strong>확실하게 구분</strong>지어서 특징을 보다 쉽게 잡는다거나 관심 있는 것 이외의 것들에 영향을 미치지 않게 해서 특징을 잡기 쉽게 해주는 등의 <strong>전처리 또는 처리 과정</strong>이 필요하다.</p>
<br>
<br>

<h3 id="🎭-span-stylecolor-navy영상-처리-알고리즘의-종류span">🎭 <span style="color: navy">영상 처리 알고리즘의 종류</span></h3>
<h4 id="span-stylecolor-00c0e9화소점-처리span"><span style="color: #00c0e9">화소점 처리</span></h4>
<p><strong>원 화소의 값이나 위치를 바탕으로 단일 화소 값을 변경하는 기술</strong></p>
<p>화소 점, 픽셀의 원래 값이나 위치를 기준으로 그 픽셀 안의 값을 변경하면서 이루어지는 처리로 산술 연산과 논리 연산의 방법이 있다.</p>
<h4 id="span-stylecolor-00c0e9영역-처리span"><span style="color: #00c0e9">영역 처리</span></h4>
<p><strong>픽셀의 원래 값과 이웃하는 여러 픽셀이 서로 관계하여 생성된 픽셀 값을 기준으로 값이 변경 되는 것</strong></p>
<p><strong>블러링</strong> : 영상 세세한 부분까지 제거해 흐릿하게 만든다.
<strong>샤프닝</strong> : 주변 픽셀을 대비해서 값이 크게 변하는 경계 부분이 돋보이게 하는 기법으로 개체들의 윤곽이 뚜렷해진다.</p>
<h4 id="span-stylecolor-00c0e9기하학-처리span"><span style="color: #00c0e9">기하학 처리</span></h4>
<p><strong>디지털 영상 픽셀의 위치나 픽셀의 모임인 배열을 변화시키는 방법</strong></p>
<h4 id="span-stylecolor-00c0e9프레임-처리span"><span style="color: #00c0e9">프레임 처리</span></h4>
<p><strong>두가지 이상의 서로다른 영상으로 각종 연산을 조합하여 새로운 픽셀값을 생성</strong></p>
<blockquote>
<p>1초전 영상과 현재의 영상에서 1초전 영상 - 현재의 영상 의 값이 0이 아니라면 그 부분을 흰색으로, 0인 부분을 흑색으로 처리한다.</p>
</blockquote>
<br>
<br>

<h3 id="📑-span-stylecolor-navy인공지능-학습-과정span">📑 <span style="color: navy">인공지능 학습 과정</span></h3>
<p>인공지능의 영상 인식률이 점차 높아져 98%까지 이끌어내었고 사람의 인식률 98.5%로 거의 비슷한 수준이 되었다. 예외적인 상황이 없는 일반적인 물체로 많은 데이터를 모을 수 있었고 <strong>계속해서 학습하고 보완이 가능하기 때문</strong>에 이러한 발전을 이루어낼 수 있었다.</p>
<h4 id="인공지능-학습-과정">인공지능 학습 과정</h4>
<p><strong><span style="color: #00c0e9">데이터 수집 &gt; 전처리 &gt; 특징추출 &gt; 학습 &gt; 검증</span></strong></p>
<p>트레이딩 데이터 셋을 모으는 것은 데이터 수집에서 특징추출 과정 사이에 이루어지고, 학습 시키고 추론 결과를 살피는 것은 학습에서 검증 과정 사이에 이루어진다. 인공지능 학습 과정에서 보다 빠르고 정확하게 학습을 위해 날 것의 영상 데이터가 아니라 <strong>전처리가 되어있는 특징이 잘 나타나 있는 사진</strong>을 학습한다.
학습 데이터는 밝기와 크기를 비슷하게 맞추고, 여백을 최대한 줄여 <strong>효율적으로 데이터 수집</strong>을 할 수 있도록 해야한다. 이러한 <strong>학습 방식에 따라 인공지능의 성능</strong> 또한 달라지게 된다.</p>
<p><strong>무한한 데이터와 무한한 시간</strong>이 있는 상황에서는 인공지능이 우수하지만, <strong>돈을 투자할 산업과 소비자 모두 각기 다른 상황</strong>에서는 효율에 따라 인공지능 방식의 영상인식과 전통적인 영상인식 중 선택해야 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[5차시- 이미지 데이터의 이해 (pixel/frame/resolution)]]></title>
            <link>https://velog.io/@juwan-25/5%EC%B0%A8%EC%8B%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%9D%B4%ED%95%B4-pixelframeresolution</link>
            <guid>https://velog.io/@juwan-25/5%EC%B0%A8%EC%8B%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%9D%B4%ED%95%B4-pixelframeresolution</guid>
            <pubDate>Tue, 10 May 2022 16:00:57 GMT</pubDate>
            <description><![CDATA[<h3 id="🥽-span-stylecolor-navy영상-처리span">🥽 <span style="color: navy">영상 처리</span></h3>
<h4 id="동영상">동영상</h4>
<p>이미지가 일정한 간격으로 나열되어 있는 것</p>
<h4 id="영상-처리">영상 처리</h4>
<p><strong>기록된 시각적 정보를 분석, 해석, 판단 후 처리</strong>
델타t 간격으로 나열되며 델타t가 크면 영상이 띄엄띄엄 발생하고 작으면 촘촘히 발생한다. 실제 상황에서 만약 델타t가 크면 놓치는 장면이 많아진다. 우리가 사는 삶은 델타 t가 0에 가까운 삶을 살고 있으며, 컴퓨터는 델타t가 무조건 존재한다.</p>
<br>
<br>

<h3 id="📟-span-stylecolor-navypixel-prame-resolutionspan">📟 <span style="color: navy">pixel, prame, resolution</span></h3>
<h4 id="pixel">pixel</h4>
<p><strong><span style="color: #00c0e9">디지털 영상은 유한한 개수의 점들로 구성</span></strong>되어 있는데 이러한 점을 의미<strong>(=화소)</strong></p>
<p>우리가 살고 있는 세상은 3차원이지만 영상은 2차원으로 f(x,y)로 표현 가능하다. 이때 f는 밝기 정보를 x,y는 어떠한 지점 좌표를 의미하며, 이러한 영상 디지털 영상이라고 한다. 
픽셀을 작게 나눌수록 실제 형상에 가까워지게 된다.</p>
<h4 id="frame">frame</h4>
<p><strong><span style="color: #00c0e9">영상 처리에서의 델타</span></strong>를 의미
1초에 나오는 영상, frame수를 frame/seconds = <strong>fps</strong>라고 한다.</p>
<blockquote>
<p>티비로 보여지는 축구 경기는 시청하고 영상을 내보내는 환경에 따라 실시간으로 보여질 때도 있고 끊겨서 보여질 때도 있다고 생각하는데 이것은 흔히 컴퓨터상에서 랙이 걸린다고 한다. 이러한 랙이 발생하는 이유는 정보의 손실 때문이다.</p>
</blockquote>
<h4 id="resolution">resolution</h4>
<p><strong><span style="color: #00c0e9">픽셀 수에 따라 실제에 가까운 정도</span></strong>를 의미<strong>(=해상도)</strong>
해상도가 높을 수록 픽셀을 많이 나눈 것이다.
<br>
<br></p>
<h3 id="🎨-span-stylecolor-navyrgb-모델-gray모델-span">🎨 <span style="color: navy">RGB 모델, Gray모델 </span></h3>
<h4 id="색상-모델---영상의-색을-나타내는-옵션">색상 모델 :  영상의 색을 나타내는 옵션</h4>
<p>RGB 모델과 Gray 모델은 가장 기본이 되는 색상 모델이다.</p>
<h4 id="rgb-모델">RGB 모델</h4>
<p><strong><span style="color: #00c0e9">빛의 삼원색으로 빨강, 초록, 파랑</span></strong>을 의미</p>
<p>픽셀의 밝기 정보에는 RGB가 담겨 있는데 한개의 픽셀에 3가지에 정보가 담겨 있다는 것은 3가지가 겹쳐 있다는 것으로 3차원의 개념이다. 하지만 영상은 2차원으로 3차원을 표현할 수 없어서 <strong>픽셀을 3등분하여 RGB LED 소자로 구성</strong>하는 것이다. RGB는 <strong>채널(R채널, B채널, G채널)</strong>이라고 불리며, 3개의 채널이 겹쳐져 만들어진다. 이때 RGB는 0~255로 각각 표현할 수 있다.</p>
<h4 id="gray-모델">Gray 모델</h4>
<p><strong><span style="color: #00c0e9">Gray 채널</span> : 흰색부터 흑색(색이 없음)까지를 표현, 한개의 채널로 이루어진 영상</strong></p>
<br>
<br>

<h3 id="🧶-span-stylecolor-navyhsvspan">🧶 <span style="color: navy">HSV</span></h3>
<h4 id="사람이-색상을-인식하는-방식과-비슷한-방식으로-정의된-모델">사람이 색상을 인식하는 방식과 비슷한 방식으로 정의된 모델</h4>
<p><strong><span style="color: #00c0e9">Hue : 색상
Saturation : 채도
Value : 값 / 명도</span></strong></p>
<p>색상의 조합이 아니라 어떤 색상을 지정하고 <strong>채도 명도의 조합으로 표현하는 것</strong>으로 특정 색을 정의내리기가 훨씬 쉽고 실제와 가깝다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[4차시 – 코딩을 몰라도 개발이 가능하다? 간단한 노코드의 세계]]></title>
            <link>https://velog.io/@juwan-25/4%EC%B0%A8%EC%8B%9C-%EC%BD%94%EB%94%A9%EC%9D%84-%EB%AA%B0%EB%9D%BC%EB%8F%84-%EA%B0%9C%EB%B0%9C%EC%9D%B4-%EA%B0%80%EB%8A%A5%ED%95%98%EB%8B%A4-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%85%B8%EC%BD%94%EB%93%9C%EC%9D%98-%EC%84%B8%EA%B3%84</link>
            <guid>https://velog.io/@juwan-25/4%EC%B0%A8%EC%8B%9C-%EC%BD%94%EB%94%A9%EC%9D%84-%EB%AA%B0%EB%9D%BC%EB%8F%84-%EA%B0%9C%EB%B0%9C%EC%9D%B4-%EA%B0%80%EB%8A%A5%ED%95%98%EB%8B%A4-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%85%B8%EC%BD%94%EB%93%9C%EC%9D%98-%EC%84%B8%EA%B3%84</guid>
            <pubDate>Sun, 24 Apr 2022 15:23:03 GMT</pubDate>
            <description><![CDATA[<h3 id="🙋♀️-span-stylecolor-navy가트너의-비지니스-개발자-유형span">🙋‍♀️ <span style="color: navy">가트너의 비지니스 개발자 유형</span></h3>
<h4 id="전문-개발자">전문 개발자</h4>
<p>비지니스 주도 전문 개발자 : <strong>로우/프로코드</strong>
IT 기업 전문 개발자 : <strong>프로코드</strong></p>
<h4 id="시민개발자">시민개발자</h4>
<p>완성형 노코드 툴을 활용하는 시민 개발자 : <strong>노코드</strong>
로우코드를 사용하는 파워 유저 시민 개발자 : <strong>로우코드</strong></p>
<blockquote>
<p><strong>시민개발자</strong>
전문성을 갖추진 않았지만 앱, 웹, 인공지능을 개발하는 사람들로 대부분 완성되어있는 개발 플랫폼 활용해 개발을 진행한다.</p>
</blockquote>
<br>
<br>

<h3 id="📟-span-stylecolor-navy노코드-개발과-로우코드-개발span">📟 <span style="color: navy">노코드 개발과 로우코드 개발</span></h3>
<p><strong>앱, 웹, 가상현실, 증강현실, 인공지능 개발에 사용되어 대기업들도 로우코드, 노코드 개발에 기여하고 있다.</strong></p>
<h4 id="노코드">노코드</h4>
<p><strong><span style="color: #00c0e9">코딩을 생략하는 툴</span></strong> : 코딩을 못해도 사용 가능</p>
<p>👍 비개발자 사용 가능하다.
👍 시간 대비 효율이 뛰어나다.</p>
<blockquote>
<p>블록코딩</p>
</blockquote>
<h4 id="로우코드">로우코드</h4>
<p><strong><span style="color: #00c0e9">코딩이 필요하나 그 비중이 매우 낮은 툴</span></strong> : 코딩 지식이 약간 필요</p>
<p>👍 빠르고 간단한 코딩 가능하다.</p>
<blockquote>
<p><strong>프로그래밍 **
주어진 문제에 대한 알고리즘 설계하는 것으로 알고리즘을 컴퓨터가 수행하도록 명령을 만드는 작업을 의미한다.
**코딩</strong>
컴퓨터가 사용하는 언어로 자신만의 명령을 번역하고 변환하는 것을 의미한다.</p>
</blockquote>
<br>
<br>

<h3 id="🔎-개발자-span-stylecolor-navy필요-이유span">🔎 개발자 <span style="color: navy">필요 이유</span></h3>
<h4 id="시민개발자-필요-이유">시민개발자 필요 이유</h4>
<p>기술이 나날이 발전하며 개발 업무는 급증하는데 <strong>전문개발자가 한정</strong>되어있다. 이때, 노코드 툴로 시민 개발자가 개발시 개발에 필요한 <strong>비용과 시간 절감</strong>할 수 있게된다. </p>
<p>👍 개발 직군과 비개발 직군의 지식차이로 발생한 소통 오류를 최소화 할 수 있다.
👍 불필요한 커뮤니케이션 단축할 수 있다.</p>
<h4 id="전문개발자-필요-이유">전문개발자 필요 이유</h4>
<p>노코드와 로우코드 개발은 개발 범위에 한계가 있으며, 사용자 규모는 커졌으나 백엔드 최적화에 어려움을 겪을 때는 코딩으로 전환해야 하기 때문이다.</p>
<br>
<br>

<h3 id="💬-span-stylecolor-navy플랫폼span">💬 <span style="color: navy">플랫폼</span></h3>
<h4 id="노코드-플랫폼">노코드 플랫폼</h4>
<p><strong>데브온 NCD</strong>
❕ 서버로직, 프레임워크, 화면개발이 가능하다.
❕ 다양한 프로젝트에 활발히 사용된다.
❕ flow chart로 작성해 쉽고 가시적으로 구현이 가능하다.</p>
<p><strong>클로바 스튜디오(준비)</strong>
❕ 노코드 ai 툴로 하이클로바 기술을 코딩 없이 사용 가능하다.</p>
<h4 id="로우코드-플랫폼">로우코드 플랫폼</h4>
<p><strong>칼스 플라츠</strong>
❕ 서비스용 소프트웨어 솔루션 제공한다.
❕ 응용 소프트웨어 개발에 필요한 모든 요소의 구현을 포괄하고 있다.
❕ 아이디어만 있으면 누구나 비지니스 어플 만들기 가능하다.
❕ 저비용으로 개발자 없이 클라우드 실행할 수 있다.</p>
<p><strong>단비 AI</strong>
❕ 클라우드형 챗봇 빌더 서비스로 단답, 시나리오를 이용할 수 있다.
❕ 실제 sns 메신저와 연동이 가능하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[3차시 – 인공지능은 우리 주변에서 어떻게 활용되고 있을까?]]></title>
            <link>https://velog.io/@juwan-25/3%EC%B0%A8%EC%8B%9C-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%80-%EC%9A%B0%EB%A6%AC-%EC%A3%BC%EB%B3%80%EC%97%90%EC%84%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%99%9C%EC%9A%A9%EB%90%98%EA%B3%A0-%EC%9E%88%EC%9D%84%EA%B9%8C</link>
            <guid>https://velog.io/@juwan-25/3%EC%B0%A8%EC%8B%9C-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%80-%EC%9A%B0%EB%A6%AC-%EC%A3%BC%EB%B3%80%EC%97%90%EC%84%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%99%9C%EC%9A%A9%EB%90%98%EA%B3%A0-%EC%9E%88%EC%9D%84%EA%B9%8C</guid>
            <pubDate>Sun, 24 Apr 2022 14:55:20 GMT</pubDate>
            <description><![CDATA[<h3 id="💡-span-stylecolor-navy컴퓨터-사이언스와-컴퓨터-공학span">💡 <span style="color: navy">컴퓨터 사이언스와 컴퓨터 공학</span></h3>
<h4 id="컴퓨터-과학computer-science">컴퓨터 과학(Computer Science)</h4>
<p><strong><span style="color: #00c0e9">컴퓨터 자체</span>의 이론, 설계, 구현, 응용 및 효율성, 알고리즘, 계산 및 정보에 대해 연구하는 분야</strong>
컴퓨터 탄생 이후 오랫동안 유지해온 분야로 컴퓨터 이론, 알고리즘, 프로그램 언어, 수치 분석, 데이터 베이스 등 컴퓨터 자체에 초점을 둔 하위 카테고리들 존재</p>
<h4 id="컴퓨터-공학computer-engineering">컴퓨터 공학(Computer Engineering)</h4>
<p><strong>컴퓨터 과학과 전자공학을 이어주는 <span style="color: #00c0e9">컴퓨터를 활용</span>하는 분야</strong>
컴퓨터 공학 = 컴퓨터 과학 + 전자공학
기본 물리학과 수학에 기초하며 소프트 웨어와 하드 웨어를 전반적으로 학습해야 하는 분야이다. 디스플레이공학, 이미지 및 음성 처리, 패턴 인식, 로봇공학, 센서 및 컴퓨터의 인식 등이 속한다.</p>
<blockquote>
<p>인공지능 분야의 <strong>기초</strong> &gt; 컴퓨터 과학
인공지능 분야의 <strong>적용</strong> &gt; 컴퓨터 공학</p>
</blockquote>
<br>
<br>

<h3 id="🔧-span-stylecolor-navy4차-산업-핵심-기술span">🔧 <span style="color: navy">4차 산업 핵심 기술</span></h3>
<p><strong>모바일, 사물인터넷, 빅데이터, 클라우드컴퓨팅, 인공지능으로 서로 높은 연관성을 가짐</strong></p>
<h4 id="모바일">모바일</h4>
<p><strong><span style="color: #00c0e9">움직일 수 있는 장치</span></strong>를 의미하며, 무선 정보통신 기술 통신망에 기반한 대부분의 장치들을 통칭한다.</p>
<blockquote>
<p>핸드폰, 대중교통, 여러 전자장치 등</p>
</blockquote>
<h4 id="사물인터넷iot">사물인터넷(IoT)</h4>
<p><strong><span style="color: #00c0e9">각종 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술</span></strong>을 의미하며, 무선 통신을 통해 각종 사물 연결하는 것으로 모바일 분야가 발전하며 넷, 망으로 연결된 개념으로 사람과 장치 모드를 인터넷처럼 망으로 묶어 정보를 주고 받는 <strong>커넥티드</strong>가 생겨났다.</p>
<p>넷이 생겨나며 데이터 양이 증가하여 <strong>빅데이터 발생</strong>하였다.</p>
<h4 id="빅데이터">빅데이터</h4>
<p><strong><span style="color: #00c0e9">기존의 전통적인 방법으로는 처리하기 힘들 정도로 큰 데이터</span></strong>를 의미하며, 방대한 양의 정보를 수집, 분석, 표현, 처리하는 특징으로 연구 발전되고 있다. 정보를 제공, 관리, 분석을 가능하게 해 과거에 <strong>불가능했던 기술이 실현 가능</strong>해졌다.</p>
<p>빅데이터로 인해 저장과 처리하는 과정에 문제가 발생하였고 이 점을 클라우드컴퓨팅으로 해결하였다.</p>
<h4 id="클라우드컴퓨팅">클라우드컴퓨팅</h4>
<p><strong><span style="color: #00c0e9">전 세계의 인터넷이 연결돼 어느 곳에서든 컴퓨팅</span></strong>을 의미하며, 자원에 접근해 원하는대로 사용 가능, 한 곳에서 모두 처리하는 것이 아니라 <strong>나누어서 처리, 공유</strong>할 수 있는 기술이다. 인터넷(클라우드)을 통해 컴퓨팅 서비스를 제공하는 인터넷 기반의 컴퓨팅이다.</p>
<blockquote>
<p>서버, 스토리지, 데이터베이스, 네트워킹, 소프트웨어, 분석, 인텔리전스 등</p>
</blockquote>
<h4 id="🔑-인공지능">🔑 인공지능</h4>
<p><strong>뛰어난 컴퓨팅 기술, 방대한 양의 학습 데이터 필요</strong>하며, 모바일, 사물인터넷, 빅데이터, 클라우드컴퓨팅에서 <strong>데이터를 분석하고 결과를 도출하여 판단</strong>하는 것을 인공지능이 담당한다.</p>
<br>
<br>

<h3 id="🎲-인공지능의-span-stylecolor-navy주요-응용분야span">🎲 인공지능의 <span style="color: navy">주요 응용분야</span></h3>
<p><strong>전문가시스템, 자연어처리, 데이터마이닝, 음성인식, 컴퓨터비전, 지능로봇</strong></p>
<h4 id="전문가시스템">전문가시스템</h4>
<p>특정 분야에 대한 전문지시을 <span style="color: gray">체계화하여 시스템화</span> 하고 문제에 따른 _해결책_을 제공하여 활용한다.</p>
<h4 id="자연어처리">자연어처리</h4>
<p>_사람의 언어_를 인공지능이 _분석하고 해석_해주는 것이다.</p>
<h4 id="데이터마이닝">데이터마이닝</h4>
<p>방대한 양의 데이터에서 <span style="color: gray">유용한 정보를 추출</span>해내는 것이다.</p>
<h4 id="음성인식">음성인식</h4>
<p>사람의 _음성언어를 컴퓨터가 해석, 주파수로 나타나는 음성을 분석_하여 그 내용을 <span style="color: gray">문자 데이터</span>로 보여주는 것에 활용되는 분야이다.</p>
<h4 id="컴퓨터-비전">컴퓨터 비전</h4>
<p>기계의 시각정보해석에 해당하는 분야로 _물체를 인식하고 판단_하는 인공지능이 많이 활용한다.</p>
<h4 id="지능로봇">지능로봇</h4>
<p>로봇에 관련된 기술분야로 인공지능을 _활용한 지능기술을 탑재_하여 여러가지 인간의 영역을 대신하는 로봇들에 활용되는 분야이다.</p>
<br>
<br>

<h3 id="📊-span-stylecolor-navy머신러닝-활용-분야span">📊 <span style="color: navy">머신러닝 활용 분야</span></h3>
<h4 id="스팸-메일-필터">스팸 메일 필터</h4>
<p>불필요한 내용을 스팸함에 보내거나 삭제시 그 데이터를 학습해 이후 자동으로 필터링 된다.</p>
<h4 id="택시-배달-택배-예약-주문-등의-어플에서도-활용">택시, 배달, 택배, 예약, 주문 등의 어플에서도 활용</h4>
<p>지역, 하루 중 시간, 날씨, 전반적인 고객 수요 등을 기준으로 학습하여 미리 정보를 알고 활용할 수 있도록 한다.</p>
<br>
<br>

<h3 id="📊-span-stylecolor-navy딥러닝-활용-분야span">📊 <span style="color: navy">딥러닝 활용 분야</span></h3>
<h4 id="얼굴이나-신체를-휴대폰-카메라로-인식하고-스티커를-붙이거나-얼굴-모양을-바꾸거나-하는-기술">얼굴이나 신체를 휴대폰 카메라로 인식하고 스티커를 붙이거나 얼굴 모양을 바꾸거나 하는 기술</h4>
<p>얼굴 인식, 얼굴 구별하기, 얼굴 위치 찾기 등의 인공지능 기술 활용한다.</p>
<blockquote>
<p>스노우, 틱톡</p>
</blockquote>
<h4 id="음성인식이-가능한-인공지능-스피커">음성인식이 가능한 인공지능 스피커</h4>
<p>음성 입력 및 인식하고 자연어 처리 후 판단 결과를 만들고 피드백을 받는 과정으로 이루어지며, 두 사람 이상 동시 대화에서 목소리를 구분하고 사람이 웅성거리는 곳에서도 음성을 판단하도록 기술이 발전하였다. 또한, 같은 말이라도 뉘앙스를 판단하여 대응하기도 한다.</p>
<blockquote>
<p>ThinkQ Hub, 카카오 미니, 기가지니</p>
</blockquote>
<h4 id="검색했던-데이터를-기반으로-상품을-추천">검색했던 데이터를 기반으로 상품을 추천</h4>
<h4 id="📑-무인편의점">📑 무인편의점</h4>
<p><strong>ml과 dl을 모두 활용</strong>하여 인식과 판단을 하는 인공지능 기술이 사용된다.</p>
<blockquote>
<p>amazon go</p>
</blockquote>
<br>
<br>

<h3 id="머신러닝과-딥러닝의-span-stylecolor-navy차이span">머신러닝과 딥러닝의 <span style="color: navy">차이</span></h3>
<h4 id="머신러닝">머신러닝</h4>
<p>단순한 상황이나 엄청나게 많은 데이터들이 필요하지 않은 상황에서 이용되며, 문제를 일으켰을 때 사람이 개입하여 해결한다. 학습 데이터를 만들어 학습하기도 한다.</p>
<h4 id="딥러닝">딥러닝</h4>
<p>많은 양의 데이터가 주어지는 경우에 이용되며, 인간의 뇌 구조와 가깝게 스스로 업데이트 되며 보다 복잡한 상황에서 활용한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[4주차 문제풀이]]></title>
            <link>https://velog.io/@juwan-25/4%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4</link>
            <guid>https://velog.io/@juwan-25/4%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4</guid>
            <pubDate>Sun, 24 Apr 2022 14:05:54 GMT</pubDate>
            <description><![CDATA[<h6 id="20220418">2022.04.18</h6>
<h2 id="1-제일-작은-수-제거하기">1. 제일 작은 수 제거하기</h2>
<h3 id="문제">문제</h3>
<p>정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.</p>
<h5 id="🔎-기본제공">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        return answer;
    }
}</code></pre>
<h3 id="풀이">풀이</h3>
<h4 id="📃-제출코드">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public int[] solution(int[] arr) {
        if(arr.length==1){
            int[] answer = {-1};
            return answer;
        }

        int[] answer = new int[arr.length-1];
        int min = arr[0];
        for(int i=1; i&lt;arr.length; i++)
            if(min&gt;arr[i]) min = arr[i];
        int j=0;
        for(int i=0; i&lt; arr.length; i++){
            if(arr[i]==min) continue;
            answer[j] = arr[i];
            j++;
        }

        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드">💡 전체코드</h4>
<pre><code class="language-java">package programmers;

import java.util.Arrays;
import java.util.Scanner;

public class Solution {
    public static int[] solution(int[] arr) {
        if(arr.length==1){
            int[] answer = {-1};
            return answer;
        }

        int[] answer = new int[arr.length-1];
        int min = arr[0];
        for(int i=1; i&lt;arr.length; i++)
            if(min&gt;arr[i]) min = arr[i];
        int j=0;
        for(int i=0; i&lt; arr.length; i++){
            if(arr[i]==min) continue;
            answer[j] = arr[i];
            j++;
        }

        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int[] arr = new int[num];
        for(int i=0; i&lt; arr.length; i++)
            arr[i] = sc.nextInt();
        System.out.println(Arrays.toString(solution(arr)));
    }
}
</code></pre>
<h4 id="📌-풀이설명">📌 풀이설명</h4>
<p>배열의 길이가 한개, 즉, return 배열값이 없으면 -1을 return하기 위해서 if문을 사용하였다. 배열값이 있을 때는 최소값을 제외하고 return해야 하므로 for문을 통해 최소값을 찾았다. 그 후 배열에 넣는 for문을 돌리고, 최소값일 때 continue 시켰다.
출력할 때는 Array.toString을 사용해 int배열을 [1, 2, 3] 이러한 형식으로 출력되게 하였다. </p>
<h6 id="20220419">2022.04.19</h6>
<h2 id="2-없는-숫자-더하기">2. 없는 숫자 더하기</h2>
<h3 id="문제-1">문제</h3>
<p>0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.</p>
<h5 id="🔎-기본제공-1">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int solution(int[] numbers) {
        int answer = -1;
        return answer;
    }
}</code></pre>
<h3 id="풀이-1">풀이</h3>
<h4 id="📃-제출코드-1">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        boolean[] cnt = new boolean[10];
        for(int a:numbers)
            cnt[a] = true;
        for(int i=0; i&lt;cnt.length; i++) {
            if(cnt[i]==false) answer += i;
        }
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-1">💡 전체코드</h4>
<pre><code class="language-java">package programmers;

import java.util.Scanner;

public class Solution {
    public static int solution(int[] numbers) {
        int answer = 0;
        boolean[] cnt = new boolean[10];
        for(int a:numbers)
            cnt[a] = true;
        for(int i=0; i&lt;cnt.length; i++) {
            if(cnt[i]==false) answer += i;
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int[] numbers = new int[num];
        for(int i=0; i&lt;numbers.length; i++)
            numbers[i] = sc.nextInt();
        System.out.println(solution(numbers));
    }
}
</code></pre>
<h4 id="📌-풀이설명-1">📌 풀이설명</h4>
<p>for(:)을 사용해 a에 numbers 값을 대입해 사용하고, 입력된 숫자일 경우 true를 넣어주었다. 그 후 입력되지 않은 즉,false일 경우에만 return값에 더하였다.</p>
<h6 id="20220420">2022.04.20</h6>
<h2 id="3-약수의-개수와-덧셈">3. 약수의 개수와 덧셈</h2>
<h3 id="문제-2">문제</h3>
<p>두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.</p>
<h5 id="🔎-기본제공-2">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        return answer;
    }
}</code></pre>
<h3 id="풀이-2">풀이</h3>
<h4 id="📃-제출코드-2">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        int cnt;
        for(int i=left; i&lt;=right; i++){
            cnt=0;
            for(int j=1; j&lt;=i; j++){
                if(i%j==0) cnt++;
            }
            if(cnt%2==0) answer+=i;
            else answer-=i;
        }
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-2">💡 전체코드</h4>
<pre><code class="language-java">package programmers;

import java.util.Scanner;

public class Solution {
    public static int solution(int left, int right) {
        int answer = 0;
        int cnt;
        for(int i=left; i&lt;=right; i++){
            cnt=0;
            for(int j=1; j&lt;=i; j++){
                if(i%j==0) cnt++;
            }
            if(cnt%2==0) answer+=i;
            else answer-=i;
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int left = sc.nextInt();
        int right = sc.nextInt();
        System.out.println(solution(left,right));
    }
}

</code></pre>
<h4 id="📌-풀이설명-2">📌 풀이설명</h4>
<p>left부터 right사이의 수에서 약수를 구하기 위해 이중for문을 사용해 그 수 범위 약수를 찾고, 개수를 더해주었다. 약수의 개수를 구한 뒤 if문을 활용해 짝수인지 홀수인지 구하고 그에 따라 더하거나 빼주었다. </p>
<h6 id="20220421">2022.04.21</h6>
<h2 id="4-서울에서-김서방-찾기">4. 서울에서 김서방 찾기</h2>
<h3 id="문제-3">문제</h3>
<p>String형 배열 seoul의 element중 &quot;Kim&quot;의 위치 x를 찾아, &quot;김서방은 x에 있다&quot;는 String을 반환하는 함수, solution을 완성하세요. seoul에 &quot;Kim&quot;은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.</p>
<h5 id="🔎-기본제공-3">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public String solution(String[] seoul) {
        String answer = &quot;&quot;;
        return answer;
    }
}</code></pre>
<h3 id="풀이-3">풀이</h3>
<h4 id="📃-제출코드-3">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public String solution(String[] seoul) {
         String answer = &quot;&quot;;
        for(int i=0; i&lt;seoul.length; i++){
            if(seoul[i].equals(&quot;Kim&quot;)) answer = &quot;김서방은 &quot;+i+&quot;에 있다&quot;;
        }
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-3">💡 전체코드</h4>
<pre><code class="language-java">package programmers;

import java.util.Scanner;

public class Solution {
    public static String solution(String[] seoul) {
        String answer = &quot;&quot;;
        for(int i=0; i&lt;seoul.length; i++){
            if(seoul[i].equals(&quot;Kim&quot;)) answer = &quot;김서방은 &quot;+i+&quot;에 있다&quot;;
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        String[] seoul = new String[num];
        for(int i=0; i&lt;seoul.length; i++)
            seoul[i] = sc.next();
        System.out.println(solution(seoul));
    }
}
</code></pre>
<h4 id="📌-풀이설명-3">📌 풀이설명</h4>
<p>문자열을 입력 받은 후 Kim의 위치를 알아야 하기때문에 Kim과 각 문자열을 비교해주었다. 문자열을 비교할 때는 equals 메소드를 활용해주었다. 그 후 Kime의 위치를 찾으면 출력문과 함께 i의 값을 return 시켰다.</p>
<h6 id="20220422">2022.04.22</h6>
<h2 id="5-전화번호-목록">5. 전화번호 목록</h2>
<h3 id="문제-4">문제</h3>
<p>전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.</p>
<p>구조대 : 119
박준영 : 97 674 223
지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.</p>
<h5 id="🔎-기본제공-4">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        return answer;
    }
}</code></pre>
<h3 id="풀이-4">풀이</h3>
<h4 id="📃-제출코드-4">📃 제출코드</h4>
<pre><code class="language-java">import java.util.Arrays;
class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        Arrays.sort(phone_book);
        for (int i = 0; i &lt; phone_book.length - 1; i++){        
            if (phone_book[i + 1].startsWith(phone_book[i])){
                return false;
            }
        }
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-4">💡 전체코드</h4>
<pre><code class="language-java">package programmers;

import java.util.Arrays;
import java.util.Scanner;

public class Solution {
    public static boolean solution(String[] phone_book) {
        boolean answer = true;
        Arrays.sort(phone_book);
        for (int i = 0; i &lt; phone_book.length - 1; i++){
            if (phone_book[i + 1].startsWith(phone_book[i])){
                return false;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        String[] phone = new String[num];
        for(int i=0; i&lt;phone.length; i++)
            phone[i] = sc.next();
        System.out.println(solution(phone));
    }
}

</code></pre>
<h4 id="📌-풀이설명-4">📌 풀이설명</h4>
<h5 id="효율성을-통과하지-못해서-구글링의-도움을-받음">효율성을 통과하지 못해서 구글링의 도움을 받음</h5>
<p>효율성이 없었더라면 contains, matches, indexOf 등을 활용해야 할 수 있지만, 효율성을 고려해야하기 때문에 사용하기 어려웠다. 그래서 Arrays.sort()를 활용해 먼저 오름차순 정렬을 시켜주어야 한다. 그 후 starsWith()를 활용해 대상 문자열이 특정 문자 또는 문자열로 시작하는지 for문 한개를 활용해 다음방과 비교하였다. 이를 통해 효율성 높고 정확한 코드를 짤 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[3주차 문제풀이]]></title>
            <link>https://velog.io/@juwan-25/3%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4</link>
            <guid>https://velog.io/@juwan-25/3%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4</guid>
            <pubDate>Sun, 17 Apr 2022 13:46:12 GMT</pubDate>
            <description><![CDATA[<h6 id="20220411">2022.04.11</h6>
<h2 id="1-소수-만들기">1. 소수 만들기</h2>
<h3 id="문제">문제</h3>
<p>주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.</p>
<h5 id="🔎-기본제공">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int solution(int[] nums) {
        int answer = -1;

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println(&quot;Hello Java&quot;);

        return answer;
    }
}</code></pre>
<h3 id="풀이">풀이</h3>
<h4 id="📃-제출코드">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int sum;
        for(int i=0; i&lt;nums.length-2; i++){
            for(int j=i+1; j&lt;nums.length-1; j++){
                for (int k=j+1; k&lt;nums.length; k++){
                    sum=nums[i]+nums[j]+nums[k];
                    for(int x=2; x&lt;=sum; x++) {
                        if (sum % x == 0 &amp;&amp; x != sum) break;
                        else if(x==sum) answer++;
                    }
                }
            }

        }
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    public static int solution(int[] nums) {
        int answer = 0;
        int sum;
        for(int i=0; i&lt;nums.length-2; i++){
            for(int j=i+1; j&lt;nums.length-1; j++){
                for (int k=j+1; k&lt;nums.length; k++){
                    sum=nums[i]+nums[j]+nums[k];
                    for(int x=2; x&lt;=sum; x++) {
                        if (sum % x == 0 &amp;&amp; x != sum) break;
                        else if(x==sum) answer++;
                    }
                }
            }

        }

        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(&quot;개수 입력 : &quot;);
        int input = sc.nextInt();
        int[] nums = new int[input];
        for(int i=0; i&lt;nums.length; i++)
            nums[i] = sc.nextInt();
        System.out.println(&quot;결과 : &quot;+solution(nums));
    }

}</code></pre>
<h4 id="📌-풀이설명">📌 풀이설명</h4>
<p><strong>3중 for문</strong>을 이용해 sum에 3개의 값을 순서대로 더해주고, 그 후 sum이 소수인지 파악하기 위해서 for문을 돌린 후 if문을 활용해 sum을 2부터 나누어보며 소수를 구한다. <strong>3중 for문의 효율</strong>을 높이기 위해 필요없는 부분을 줄이는 것이 필요했고, <strong>else if</strong>로 sum과 x가 같을 때만 anaswer에 더해주는 것이 중요했다.</p>
<h6 id="20220412">2022.04.12</h6>
<h2 id="2-자연수-뒤집어-배열로-만들기">2. 자연수 뒤집어 배열로 만들기</h2>
<h3 id="문제-1">문제</h3>
<p>자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.</p>
<h5 id="🔎-기본제공-1">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int[] solution(long n) {
        int[] answer = {};
        return answer;
    }
}</code></pre>
<h3 id="풀이-1">풀이</h3>
<h4 id="📃-제출코드-1">📃 제출코드</h4>
<pre><code class="language-java">import java.util.stream.Stream;
class Solution {
    public int[] solution(long n) {
        int[] answer = {};
        int[] origin = Stream.of(String.valueOf(n).split(&quot;&quot;)).mapToInt(Integer::parseInt).toArray();
        answer = new int[origin.length];
        int leng = origin.length-1;
        for(int i=0; i&lt;=leng; i++){
            answer[i] = origin[leng-i];
        }
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-1">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;
import java.util.stream.Stream;

public class Solution {
    public static int[] solution(long n) {
        int[] answer = {};
        int[] origin = Stream.of(String.valueOf(n).split(&quot;&quot;)).mapToInt(Integer::parseInt).toArray();
        answer = new int[origin.length];
        int leng = origin.length-1;
        for(int i=0; i&lt;=leng; i++){
            answer[i] = origin[leng-i];
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long num = sc.nextLong();
        for(int i=0; i&lt;solution(num).length; i++){
            System.out.print(solution(num)[i]+&quot; &quot;);
        }

    }
}</code></pre>
<h4 id="📌-풀이설명-1">📌 풀이설명</h4>
<p>정수형 int를 int 배열로 바꾸기 위해서 for문을 돌리는 대신 메소드를 사용하였다. String.valueOf를 이용해 String 배열으로 변환하고 Stream.of(String 배열).mapToInt(Integer::parseInt).toArray();을 통해 String 배열을 int 배열로 바꿔준다. 이를 통해 int를 int 배열로 바꿔 주었다. 그 후 for문을 이용해 원래 배열에 있던 값을 뒤집어 answer 배열에 넣어주었다.</p>
<h6 id="20220413">2022.04.13</h6>
<h2 id="3-하샤드-수">3. 하샤드 수</h2>
<h3 id="문제-2">문제</h3>
<p>양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.</p>
<h5 id="🔎-기본제공-2">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        return answer;
    }
}</code></pre>
<h3 id="풀이-2">풀이</h3>
<h4 id="📃-제출코드-2">📃 제출코드</h4>
<pre><code class="language-java">import java.util.stream.Stream;
class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        int sum = 0;
        int[] arr = Stream.of(String.valueOf(x).split(&quot;&quot;)).mapToInt(Integer::parseInt).toArray();
        for(int i=0; i&lt; arr.length; i++)
            sum += arr[i];
        if(x%sum==0) return answer;
        else answer = false;
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-2">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;
import java.util.stream.Stream;

public class Solution {
    public static boolean solution(int x) {
        boolean answer = true;
        int sum = 0;
        int[] arr = Stream.of(String.valueOf(x).split(&quot;&quot;)).mapToInt(Integer::parseInt).toArray();
        for(int i=0; i&lt; arr.length; i++)
            sum += arr[i];
        if(x%sum==0) return answer;
        else answer = false;
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        if(solution(num)) System.out.println(&quot;하샤드 수입니다.&quot;);
        else System.out.println(&quot;하샤드 수가 아닙니다.&quot;);
    }
}
</code></pre>
<h4 id="📌-풀이설명-2">📌 풀이설명</h4>
<p>Stream.of(String.valueOf(x).split(&quot;&quot;)).mapToInt(Integer::parseInt).toArray();를 활용해 int 정수를 int 배열에 집어 넣어 각 자리 숫자 끼리 더할 수 있도록 하였다. for문을 통해 각자리 숫자의 합을 구한 후 그 값으로 원래 값을 나누었을 때 나머지가 없다면 true를 반환, 아니라면 false를 반환한다.</p>
<h6 id="20220414">2022.04.14</h6>
<h2 id="4-약수의-합">4. 약수의 합</h2>
<h3 id="문제-3">문제</h3>
<p>정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.</p>
<h5 id="🔎-기본제공-3">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}</code></pre>
<h3 id="풀이-3">풀이</h3>
<h4 id="📃-제출코드-3">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=1; i&lt;=n; i++)
            if(n%i==0) answer+=i;
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-3">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    public static int solution(int n) {
        int answer = 0;
        for(int i=1; i&lt;=n; i++)
            if(n%i==0) answer+=i;
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        System.out.println(solution(num));
    }
}</code></pre>
<h4 id="📌-풀이설명-3">📌 풀이설명</h4>
<p>Scanner를 통해 정수를 입력 받고, for문을 활용해 입력받은 수를 1부터 입력받은 수까지 나누어 약수를 구하고 바로 answer에 더한다.</p>
<h6 id="20220415">2022.04.15</h6>
<h2 id="5-모의고사">5. 모의고사</h2>
<h3 id="문제-4">문제</h3>
<p>수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.</p>
<p>1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...</p>
<p>1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.</p>
<h5 id="🔎-기본제공-4">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        return answer;
    }
}</code></pre>
<h3 id="풀이-4">풀이</h3>
<h4 id="📃-제출코드-4">📃 제출코드</h4>
<pre><code class="language-java">import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        List&lt;Integer&gt; answer_list = new ArrayList&lt;Integer&gt;();
        int[] cnt = new int[3];

        int[] one = {1,2,3,4,5};
        int[] two = {2,1,2,3,2,4,2,5};
        int[] three = {3,3,1,1,2,2,4,4,5,5};

        int[] one_a = new int[answers.length];
        int[] two_a = new int[answers.length];
        int[] three_a = new int[answers.length];
        for(int i=0; i &lt; answers.length; i++){
            one_a[i] = one[i%one.length];
            two_a[i] = two[i% two.length];
            three_a[i] = three[i% three.length];
        }

        for(int i=0; i&lt; answers.length; i++){
            if(answers[i]==one_a[i]) cnt[0]++;
            if(answers[i]==two_a[i]) cnt[1]++;
            if(answers[i]==three_a[i]) cnt[2]++;
        }

        if(cnt[0]&gt;cnt[1]&amp;&amp;cnt[0]&gt;cnt[2]) answer_list.add(1);
        else if(cnt[1] &gt; cnt[0] &amp;&amp; cnt[1] &gt; cnt[2]) answer_list.add(2);
        else if(cnt[2] &gt; cnt[0] &amp;&amp; cnt[2] &gt; cnt[1]) answer_list.add(3);
        else if(cnt[0] == cnt[1]){
            if(cnt[0]==cnt[2]){
                for(int i=0; i&lt;3; i++)
                    answer_list.add(i+1);
            }else{
                for(int i=0; i&lt;2; i++)
                    answer_list.add(i+1);
            }
        }else if(cnt[1]==cnt[2]){
            for(int i=0; i&lt;2; i++)
                answer_list.add(i+2);
        }else{
            answer_list.add(1);
            answer_list.add(3);
        }
        answer = answer_list.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-4">💡 전체코드</h4>
<pre><code class="language-java">package programmers;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Solution {
    public static int[] solution(int[] answers) {
        int[] answer = {};
        List&lt;Integer&gt; answer_list = new ArrayList&lt;Integer&gt;();
        int[] cnt = new int[3];

        int[] one = {1,2,3,4,5};
        int[] two = {2,1,2,3,2,4,2,5};
        int[] three = {3,3,1,1,2,2,4,4,5,5};

        int[] one_a = new int[answers.length];
        int[] two_a = new int[answers.length];
        int[] three_a = new int[answers.length];
        for(int i=0; i &lt; answers.length; i++){
            one_a[i] = one[i%one.length];
            two_a[i] = two[i% two.length];
            three_a[i] = three[i% three.length];
        }

        for(int i=0; i&lt; answers.length; i++){
            if(answers[i]==one_a[i]) cnt[0]++;
            if(answers[i]==two_a[i]) cnt[1]++;
            if(answers[i]==three_a[i]) cnt[2]++;
        }

        if(cnt[0]&gt;cnt[1]&amp;&amp;cnt[0]&gt;cnt[2]) answer_list.add(1);
        else if(cnt[1] &gt; cnt[0] &amp;&amp; cnt[1] &gt; cnt[2]) answer_list.add(2);
        else if(cnt[2] &gt; cnt[0] &amp;&amp; cnt[2] &gt; cnt[1]) answer_list.add(3);
        else if(cnt[0] == cnt[1]){
            if(cnt[0]==cnt[2]){
                for(int i=0; i&lt;3; i++)
                    answer_list.add(i+1);
            }else{
                for(int i=0; i&lt;2; i++)
                    answer_list.add(i+1);
            }
        }else if(cnt[1]==cnt[2]){
            for(int i=0; i&lt;2; i++)
                answer_list.add(i+2);
        }else{
            answer_list.add(1);
            answer_list.add(3);
        }
        answer = answer_list.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int q_num = sc.nextInt();
        int[] answers = new int[q_num];
        for(int i=0; i&lt; answers.length; i++)
            answers[i] = sc.nextInt();
        System.out.println(Arrays.toString(solution(answers)));
    }

}
</code></pre>
<h4 id="📌-풀이설명-4">📌 풀이설명</h4>
<h5 id="코드가-진심-비효율적으로-짜져서-아쉽지만-푼-것에-의미를-두고">코드가 진심 비효율적으로 짜져서 아쉽지만 푼 것에 의미를 두고...</h5>
<p>풀면서 가장 고민했던 점은 규칙이 짜여진 배열을 어떻게 답의 길이까지 for문을 돌려 비교해야 하는지와 최종 리턴 값이 배열로 최대값이 1개일 수도 여러개일 수도 있어서 배열의 길이가 달라질 수 있다는 점이었다. 규칙대로 3개의 배열을 만든 후 <strong>배열 길이(규칙의 길이)대로 %를 하여 반복</strong>할 수 있도록 하였다. 배열의 길이가 달라지는 것은 <strong>배열리스트</strong>를 활용해 조건에 따라 길이를 늘려 사용할 수 있도록 하였다. 그리고 배열리스트를 int 배열로 넘기기 위해 <strong>.stream().mapToInt(Integer::intValue).toArray()</strong>을 사용하였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2차시 – 머신러닝, 딥러닝 파헤치기]]></title>
            <link>https://velog.io/@juwan-25/2%EC%B0%A8%EC%8B%9C-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0</link>
            <guid>https://velog.io/@juwan-25/2%EC%B0%A8%EC%8B%9C-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0</guid>
            <pubDate>Mon, 11 Apr 2022 16:43:00 GMT</pubDate>
            <description><![CDATA[<h3 id="💡-span-stylecolor-navy인공지능span의-등장">💡 <span style="color: navy">인공지능</span>의 등장</h3>
<h4 id="아서-사무엘-명시적인-프로그래밍없이도-컴퓨터가-스스로-학습할-수-있도록-하는-학문-span-stylebackground-90d5eb지적-활동-능력span">아서 사무엘 명시적인 프로그래밍없이도 컴퓨터가 스스로 학습할 수 있도록 하는 학문 <span style="background: #90d5eb">지적 활동 능력</span></h4>
<p>&quot;프로그램이 데이터를 통해 스스로 학습 하면 어떨까?&quot;라는 아서 사무엘 생각에서 머신러닝 시작되었다. 머신러닝이  학습한 경험으로 새상품이 어떤 카테고리인지 분류하는 인공지능을 개발할 수 있다.
<br>
<br></p>
<h3 id="📑-span-stylecolor-navy머신러닝의-학습-방법span">📑 <span style="color: navy">머신러닝의 학습 방법</span></h3>
<h4 id="지도학습">지도학습</h4>
<p>이미 정답인 <span style="background: #90d5eb">label이 있는 데이터</span>를 이용해 학습하는 방법</p>
<blockquote>
<p>label : 어떤 대상의 특징에 따른 정답
라벨링 : 어떤 대상의 특징에 따라 정답을 표기하는 것
label이 된 데이터 : 라벨링 된 대상에 표기된 데이터
트레이닝(데이터) 셋 == 훈련데이터 : 라벨링 된 데이터의 모음</p>
</blockquote>
<p>트레이닝 셋을 통해 학습해 분류모델을 만들고, 분류모델을 테스트할 때는 새로운 데이터인 테스트 데이터를 사용한다. 이때, 테스트 데이터는 라벨링 되어있지 않다. 레이닝 셋은 형태에 따라 분류와 회귀 분석으로 나뉘어진다.</p>
<h4 id="1-분류">1. 분류</h4>
<p>문제와 정답이 <span style="background: #90d5eb">정확히 <strong>인간이 정해 놓은</strong>대로</span> 딱 맞아 떨어지는 경우</p>
<h4 id="2-회귀분석">2. 회귀분석</h4>
<p>문제와 답이 정확히 존재한다기보다 <span style="background: #90d5eb">문제와 답의 관계가 <strong>인과성</strong>을 지닌 연속적인 수치</span>
로 나타나는 데이터 셋을 사용하여 학습하는 것</p>
<p>&lt;회귀분석의 과정 예시&gt;</p>
<ol>
<li>각 사진에 사람이 라벨링을 함</li>
<li>트레이닝 셋을 학습 시킴</li>
<li>테스트 데이터를 통해 라벨이 딱 붙음</li>
<li>알맞은지 확인 가능</li>
</ol>
<p>라벨링이 되어있는 트레이닝 셋은 정답과 답이 매핑되어 있다고 한다.</p>
<pre><code>y = f(x)</code></pre><p>x : 원인, 문제, input
y : 결과, 답, output
f : 관계 풀이(function) 
이러한 수식으로 이루어진 그래프를 통해 해석할 수 있고, 이를 통해 정확한 예측을 할 수 있게 되는데 이러한 과정이 <strong>회귀분석</strong>이다.
<br></p>
<h4 id="비지도-학습">비지도 학습</h4>
<p><span style="background: #90d5eb">라벨이 없는 데이터를 <strong>군집화</strong></span> 하여 새로운 데이터에 대한 결과를 예측하도록 학습하는 방법</p>
<p><strong>유사한 속성값</strong>을 갖는 군집으로 만들 수 있기 때문에 <strong>유사도 함수</strong>가 중요하고, 라벨링이 되어있지 않은 데이터로 부터 유사한 속성을 찾아내야 해서 지도학습에 비해 난이도가 있다. 트레이닝 셋을 학습시켜 유사도를 측정해 군집화 하는데 이러한 비지도 학습을 지도학습에서 <strong>적절한 특징(feature)을 찾아내기 위한 전처리 방법</strong>으로 이용하기도 한다.
<br>
이러한 인공지능의 학습과정은 사람의 지능과 매우 닮아 있다는 것을 알 수 있다. 지도학습은 우리가 교과서를 통해 수업하며 학습하는 과정과 비슷하고, 비지도 학습은 여러 경험을 통해 학습하는 과정과 유사하다.
<br>
<br></p>
<h3 id="💡-span-stylecolor-navy딥러닝span">💡 <span style="color: navy">딥러닝</span></h3>
<h4 id="학습-목적에-적합한-특징-속성을-자동으로-추출하고-이를-이용해-우수한-성능의-학습-수행하는-것">학습 목적에 적합한 특징, 속성을 자동으로 추출하고 이를 이용해 우수한 성능의 학습 수행하는 것</h4>
<p>뉴런은 수상돌기에서 신호를 받아 전달하는데 이때 뉴런 한 개와 기계학습은 비슷한 구조를 지녔다. 이러한 구조 여러개가 복잡하게 얽혀있는 것을 <strong>심층 신경망</strong>이라고 한다. 
<br>
<br></p>
<h3 id="🔎-span-stylecolor-navy딥러닝span의-특징">🔎 <span style="color: navy">딥러닝</span>의 특징</h3>
<blockquote>
<p><strong>퍼셉트론</strong>
1957년, 플랑크 로젠블라트가 만든 인공 신경망 최초의 알고리즘으로 뉴런으로 이루어진 신경망 구조를 수학적으로 본 뜬 구조를 의미한다.</p>
</blockquote>
<p>입력데이터에 가중치가 실리고 활성화 함수를 통해 전달할지 판단하여 출력을 내보내는 구조인 퍼셉트론이 복합되어 신경망이 만들어지고, 이러한 신경망은 <span style="background: #90d5eb">입력층, 은닉층, 출력층</span>으로 나뉜다.</p>
<h4 id="신경망의-구조">신경망의 구조</h4>
<p><strong>입력층</strong> : 입력뉴런(노드)으로 이루어진 입력데이터를 받는 층
<strong>은닉층</strong> : 은닉뉴런(노드)으로 이루어진 입력과 출력사이에 존재해 계산을 하는 층
<strong>출력층</strong> : 출력뉴런(노드)으로 이루어져 최종 출력을 하는 층
<br>
은닉층이 2개 이상일 때부터 <strong>심층 신경망</strong>이라고하며 딥러닝이다. 층들의 노드간에는 연결강도를 나타내는 <strong>가중치</strong>가 존재하는데 가중치란 이전층의 어떤 노드의 결과값을 얼마나 신뢰할 것이냐를 의미한다. 신경망에는 방향성이 존재하는데 <span style="background: #90d5eb">순전파와 역전파</span>가 있다.
<br>
<strong>순전파</strong> : 입력-은닉-출력 순서, <strong>출력값 - 실제값 = 손실(error)</strong>
초반에는 손실값이 크기 때문에 손실을 최소화하는 학습 필요하다.</p>
<p><strong>역전파</strong> : 역방향으로 계산하여 손실을 최소화할 수 있도록 <strong>가중치를 업데이트</strong></p>
<p>딥러닝은 <span style="background: #90d5eb">순전파와 역전파를 반복</span>하며 적합한 가중치를 스스로 찾아내고 우수한 성능을 가진 인공 신경망 생성하게 된다.
<br>
<br></p>
<h3 id="📌-span-stylecolor-navy배치-에포크-반복span">📌 <span style="color: navy">배치, 에포크, 반복</span></h3>
<p>적절한 학습시간, 좋은 성능 등의 최적화를 위해 <span style="background: #90d5eb">배치, 에포크, 반복</span>이 필요
<br></p>
<h4 id="배치batch">배치(batch)</h4>
<p><strong>트레이닝 셋을 배치 사이즈로 작게 나누는 것을 의미</strong>
<span style="background: #90d5eb">배치 사이즈</span> : 전체 트레이닝 셋을 여러 작은 그룹으로 나누었을 때, 하나의 소그룹의 속하는
데이터 수를 의미 
<span style="background: #90d5eb">배치 폼</span> : 배치 사이즈가 나누어진 형태</p>
<p>&lt;배치를 사용하는 까닭&gt;
트레이닝 데이터를 통째로 신경망에 넣으면 <strong>비효율적인 리소스 사용으로
학습시간이 오래걸리기 때문</strong>에 배치를 사용해 효육적 리소스 사용이 가능하도록 한다.
<br></p>
<h4 id="에포크epoch">에포크(epoch)</h4>
<p><strong>전체 트레이닝 셋이 신경망을 통과한 횟수</strong>
<strong>1-epoch</strong>는 전체 트레이닝 셋이 하나의 신경망에 적용되어 <strong>순전파와 역전파를 통해 신경망을 1번</strong> 통과한 것을 의미한다.
<br></p>
<h4 id="반복">반복</h4>
<p><strong>1-epoch를 마치는데 필요한 미니 배치 개수를 의미</strong> 
미니배치가 신경망을 통과할 때마다 <strong>가중치 업데이트</strong>가 된다.</p>
<p>만약 배치사이즈가 크면 한번에 처리하는 양이 많아 <strong>학습속도가 느려지며 메모리가 부족</strong>해지는 문제가 발생한다. 배치사이즈가 작으면 속도는 빠르나 <strong>가중치 업데이트가 빈번</strong>하게 일어나 불안정하게 훈련될 수 있다. 그러므로 <span style="background: #90d5eb">3가지 요소를 적절히 잡아주는 것</span>이 중요하다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2주차 문제풀이]]></title>
            <link>https://velog.io/@juwan-25/2%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4</link>
            <guid>https://velog.io/@juwan-25/2%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4</guid>
            <pubDate>Sun, 10 Apr 2022 08:38:06 GMT</pubDate>
            <description><![CDATA[<h6 id="20220404">2022.04.04</h6>
<h2 id="1-내적">1. 내적</h2>
<h3 id="문제">문제</h3>
<p>길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.</p>
<p>이때, a와 b의 내적은 a[0]<em>b[0] + a[1]</em>b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)</p>
<h5 id="🔎-기본제공">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int solution(int[] a, int[] b) {
        int answer = 1234567890;
        return answer;
    }
}</code></pre>
<h3 id="풀이">풀이</h3>
<h4 id="📃-제출코드">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public int solution(int[] a, int[] b) {
        int answer = 1234567890;
        int sum = 0;
        for(int i=0; i&lt;a.length; i++)
            sum += a[i]*b[i];
        answer = sum;
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    static int solution(int[] a, int[] b) {
        int answer = 0;
        for(int i=0; i&lt;a.length; i++)
            answer += a[i]*b[i];
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        System.out.print(&quot;입력할 수의 개수 입력 : &quot;);
        int length = sc.nextInt();
        int[] arr1 = new int[length];
        int[] arr2 = new int[length];
        System.out.print(&quot;입력 1 : &quot;);
        for(int i=0; i&lt;arr1.length; i++)
            arr1[i] = sc.nextInt();
        System.out.print(&quot;입력 2 : &quot;);
        for(int i=0; i&lt;arr1.length; i++)
            arr2[i] = sc.nextInt();
        System.out.println(&quot;내적 : &quot;+solution(arr1, arr2));
    }
}</code></pre>
<h4 id="📌-풀이설명">📌 풀이설명</h4>
<p>내적을 하기 위해서는 각각의 입력받은 값을 저장할 방이 필요하므로 배열을 만들어준 후 입력받은 값을 저장하였다. 배열을 넘길 때는 배열이름을 입력하고, 넘긴 배열을 받을 때는 자료형[] 배열이름의 형태로 넘겨 받는다. for문을 통해 각각의 값을 곱하고 answer에 더해 내적을 구하였다.</p>
<h6 id="20220405">2022.04.05</h6>
<h2 id="2-나머지가-1이-되는-수-찾기">2. 나머지가 1이 되는 수 찾기</h2>
<h3 id="문제-1">문제</h3>
<p>자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.</p>
<h5 id="🔎-기본제공-1">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}</code></pre>
<h3 id="풀이-1">풀이</h3>
<h4 id="📃-제출코드-1">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public int solution(int n) {
        int answer = 0;
        int i=2;
        while(true){
            if((n-1)%i==0){
                answer = i;
                break;
            }
            i++;
        }
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-1">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    static int solution(int n) {
        int answer = 0;
        int i=2;
        while(true){
            if((n-1)%i==0){
                answer = i;
                break;
            }
            i++;
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(&quot;수 입력 : &quot;);
        int num = sc.nextInt();
        System.out.println(&quot;결과 : &quot;+solution(num));
    }
}

</code></pre>
<h4 id="📌-풀이설명-1">📌 풀이설명</h4>
<p>나머지가 1이 되는 수를 찾으려면 n/x=몫+1이므로 n-1/x=몫이다. while문을 통해 작은 수부터 n-1이 나누어 떨어지는 수를 구하면 된다. 이때, n이 3부터 시작되고, 1은 어떤 수를 나누더라도 나누어 떨어지기 때문에 2부터 나누기 시작한다. if문을 사용해 n-1을 i로 나누었을 때 나머지가 0인 수를 찾아 그 수를 answer에 넣은 후 break를 해 while문을 빠져나가도록 했다.</p>
<h6 id="20220406">2022.04.06</h6>
<h2 id="3-문자열을-정수로-바꾸기">3. 문자열을 정수로 바꾸기</h2>
<h3 id="문제-2">문제</h3>
<p>문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.</p>
<h5 id="🔎-기본제공-2">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public int solution(String s) {
        int answer = 0;
        return answer;
    }
}</code></pre>
<h3 id="풀이-2">풀이</h3>
<h4 id="📃-제출코드-2">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public int solution(String s) {
        int answer = 0;
        answer = Integer.parseInt(s);
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-2">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    public static int solution(String s) {
        int answer = 0;
        answer = Integer.parseInt(s);
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(&quot;문자열 입력 : &quot;);
        String str = sc.next();
        System.out.println(&quot;결과 : &quot;+solution(str));

    }
}

</code></pre>
<h4 id="📌-풀이설명-2">📌 풀이설명</h4>
<p>Intenger.parseInt()를 활용해 문자열을 int값으로 바꿀 수 있도록 하였다.</p>
<h5 id="intengerparseint">Intenger.parseInt()</h5>
<pre><code class="language-java">String str1 = &quot;1234&quot;;
String str2 = &quot;-1234&quot;;

int num1 = Intenger.parseInt(str1);
int num2 = Intenger.parseInt(str2);</code></pre>
<h5 id="결과--1234--1234">결과 : 1234 -1234</h5>
<h5 id="intengervalueof">Intenger.valueOf()</h5>
<pre><code class="language-java">String str1 = &quot;1234&quot;;
String str2 = &quot;-1234&quot;;

int num1 = Intenger.parseInt(str1);
int num2 = Intenger.parseInt(str2);</code></pre>
<h5 id="결과--1234--1234-1">결과 : 1234 -1234</h5>
<h5 id="두-값의-결과는-동일하지만-parseint는-int값을-return하고-valueof는-intenger-object를-return한다-int는-자료형-중-하나로-산술-연산이-가능하고-null로-초기화가-불가능하지만-intenger-object는-객체로-unboxing-없이는-산술연산이-안되며-null-값을-처리할-수-있다">두 값의 결과는 동일하지만 parseInt()는 int값을 return하고, valueOf()는 intenger object를 return한다. int는 자료형 중 하나로 산술 연산이 가능하고 null로 초기화가 불가능하지만, intenger object는 객체로 unboxing 없이는 산술연산이 안되며, null 값을 처리할 수 있다.</h5>
<h6 id="20220407">2022.04.07</h6>
<h2 id="4-수박수박수박수박수박수">4. 수박수박수박수박수박수?</h2>
<h3 id="문제-3">문제</h3>
<p>길이가 n이고, &quot;수박수박수박수....&quot;와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 &quot;수박수박&quot;을 리턴하고 3이라면 &quot;수박수&quot;를 리턴하면 됩니다.</p>
<h5 id="🔎-기본제공-3">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public String solution(int n) {
        String answer = &quot;&quot;;
        return answer;
    }
}</code></pre>
<h3 id="풀이-3">풀이</h3>
<h4 id="📃-제출코드-3">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public String solution(int n) {
        String answer = &quot;&quot;;
        String[] str = new String[n];
        for(int i=0; i&lt; str.length; i++){
            if((i+1)%2==0) str[i] = &quot;박&quot;;
            else str[i] = &quot;수&quot;;
        }
        answer = String.join(&quot;&quot;,str);
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-3">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    static String solution(int n) {
        String answer = &quot;&quot;;
        String[] str = new String[n];
        for(int i=0; i&lt; str.length; i++){
            if((i+1)%2==0) str[i] = &quot;박&quot;;
            else str[i] = &quot;수&quot;;
        }
        answer = String.join(&quot;&quot;,str);
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(&quot;수 입력 : &quot;);
        int n = sc.nextInt();;
        System.out.println(solution(n));
    }
}</code></pre>
<h4 id="📌-풀이설명-3">📌 풀이설명</h4>
<p>Scanner를 사용해 수박의 입력 수를 구하고, 그 수를 넘겨주었다. 입력한 개수에 맞게 수박을 출력하기 위해 String 배열을 사용해 하나씩 넣을 수 있게 하였다. 이떼 for문을 사용해 입력받은 수만큼 반복되게 하였고, if문을 사용해 짝수일 때는 배열에 &quot;박&quot;을 넣어주고, 홀수일 때는 &quot;수&quot;를 넣어주었다. 배열을 String.join으로 합쳐 문자열을 return하도록 했다.</p>
<h6 id="20220408">2022.04.08</h6>
<h2 id="5-자릿수-더하기">5. 자릿수 더하기</h2>
<h3 id="문제-4">문제</h3>
<p>자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.</p>
<h5 id="🔎-기본제공-4">🔎 기본제공</h5>
<pre><code class="language-java">import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println(&quot;Hello Java&quot;);

        return answer;
    }
}</code></pre>
<h3 id="풀이-4">풀이</h3>
<h4 id="📃-제출코드-4">📃 제출코드</h4>
<pre><code class="language-java">public class Solution {
    public int solution(int n) {
        int answer = 0;
        while(n&gt;=10){
            answer += n%10;
            n/=10;
        }
        answer+=n;
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-4">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution_0408 {
    static int solution(int n) {
        int answer = 0;
        while(n&gt;=10){
            answer += n%10;
            n/=10;
        }
        answer+=n;
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(&quot;수 입력 : &quot;);
        int num = sc.nextInt();
        System.out.println(solution(num));
    }
}</code></pre>
<h4 id="📌-풀이설명-4">📌 풀이설명</h4>
<p>Scanner를 이용해 각자리 숫자의 합을 구할 수를 입력받아 넘겨주었다. while문을 이용해 입력받은 수가 10보다 작아질 때까지 반복하였다. 이때 각자리 숫자의 합을 구하기 위하여 입력 받은 수를 10으로 나눈 나머지를 answer에 더해 주었고, 입력받은 수를 10으로 나누는 작업을 반복하였다. 입력받은 수가 10보다 작아지면 반복문을 빠져나와 마지막으로 입력받은 수를 한번 더 더해주고 return해주었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1차시 - 인간지능 vs 인공지능, 인공지능에 대해 알아보자!]]></title>
            <link>https://velog.io/@juwan-25/1%EC%B0%A8%EC%8B%9C-%EC%9D%B8%EA%B0%84%EC%A7%80%EB%8A%A5-vs-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@juwan-25/1%EC%B0%A8%EC%8B%9C-%EC%9D%B8%EA%B0%84%EC%A7%80%EB%8A%A5-vs-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Wed, 06 Apr 2022 03:27:45 GMT</pubDate>
            <description><![CDATA[<h3 id="💡-span-stylecolor-navy지능span이란">💡 <span style="color: navy">지능</span>이란?</h3>
<h4 id="새로운-대상이나-상황에-부딪혀-그-의미를-이해하고-합리적인-적응방법을-알아내는-span-stylebackground-90d5eb지적-활동-능력span">새로운 대상이나 상황에 부딪혀 그 의미를 이해하고 합리적인 적응방법을 알아내는 <span style="background: #90d5eb">지적 활동 능력</span></h4>
<p>굉장히 복잡해 어떤 분야에서도 제대로 설명하기 어려우며 언어학, 심리학, 철학, 교육학 등 다양한 분야에서 중요하게 다뤄진다. 뇌과학과 신경학과에서 활발히 연구 중이다.
<br>
<br></p>
<h3 id="span-stylecolor-navy다중지능-이론span"><span style="color: navy">다중지능 이론</span></h3>
<h4 id="인간에게는-분명히-구분되는-span-stylebackground-90d5eb9가지-능력span이-있고-사람은-각기-타고나-재능이-다르며-어떤분야세든-강점을-보이는-분야는-반드시-있음">인간에게는 분명히 구분되는 <span style="background: #90d5eb">9가지 능력</span>이 있고, 사람은 각기 타고나 재능이 다르며 어떤분야세든 강점을 보이는 분야는 반드시 있음</h4>
<p><strong>Howard Gardner</strong>는 지능은 한가지 분야에만 국한 된것이 아니라 다양한 지능이 존재하고, IQ만으로 지능을 판단하는 것에 대하여 비판하였다. 사람은 각자가 타고난 재능이 있으며, 자기 스스로의 강점을 파악하고 개발해야 한다고 주장하였다. </p>
<p><strong>&lt;Howard Gardner의 다중지능 이론&gt;</strong>
<img src="https://velog.velcdn.com/cloudflare/juwan-25/88d02424-589d-4caa-afb0-c84e9425ae4a/%EB%8B%A4%EC%A4%91%EC%A7%80%EB%8A%A5%EC%9D%B4%EB%A1%A0.png" alt="">
9가지의 능력 중 인공지능으로 만들어지는 대상은 <strong>논리 및 수학 지능, 언어적 지능, 공간적 지능</strong>이고, 이 능력들은 인간의 뇌에 가장 핵심 역할을 하며, 우리 몸의 움직임과 행동을 관![]
장, 신체의 향상성 유지, 인지, 감정 ,기억 학습 기능을 담당한다. 능력들은 본능적으로 아는 것이 아니라 학습을 통해 추론을 하며 그 추론이 틀리기도 하며 반복하여 만들어 나간다.
<br>
<br></p>
<h3 id="👤-span-stylecolor-navy인공지능의-의미span">👤 <span style="color: navy">인공지능의 의미</span></h3>
<p><img src="https://velog.velcdn.com/cloudflare/juwan-25/91ad946f-2ae2-4438-9f48-cb6e02207180/image.png" alt=""></p>
<h4 id="인공적으로-만들어진-지능을-가진-실체-그것을-만들고자-함으로써-지능-자체를-연구하는-분야로-학습-추론-언어-이해-등의-원리를-찾아-컴퓨터에서-구현해내는-것을-의미">인공적으로 만들어진 지능을 가진 실체, 그것을 만들고자 함으로써 지능 자체를 연구하는 분야로 학습, 추론, 언어 이해 등의 원리를 찾아 컴퓨터에서 구현해내는 것을 의미</h4>
<p>인간의 뇌의 학습과 추론을 모방해 만들어졌으며 요즘날 기술 및 비즈니스 분야에서 굉장히 인기 있는 주제이다. IT와 기술 산업에만 국한되지 않고 <strong>의료, 비즈니스, 교육, 법률, 제조, 농업</strong> 등 다양한 영역에서 사용하고 있으며, 기술의 발전으로 이미 다양한 방식과 형태로 일상생활이 AI와 연결되어있다.
ex) 음성인식 기능 Think Q, 자율주행 테슬라, 콘텐츠 추천 넷플릭스
<br>
<br></p>
<h3 id="📕-span-stylecolor-navy-컴퓨터의-학습span">📕 <span style="color: navy"> 컴퓨터의 학습</span></h3>
<h4 id="span-stylebackground-90d5eb인간의-지능의-일부span를-구현한-것으로-다수의-규칙으로-이루어진-까다로운-프로그래밍을-통해-작업을-완료하도록-학습"><span style="background: #90d5eb">인간의 지능의 일부</span>를 구현한 것으로 다수의 규칙으로 이루어진 까다로운 프로그래밍을 통해 작업을 완료하도록 학습</h4>
<p>전문가 시스템의 구축을 통해 달성하였으며 많은 엔지니어가 투입된 매우 복잡한 시스템이다. 주제별 전문가를 모방하였기 때문에 규칙을 인간이 이해, 정의, 프로그래밍 해야해서 시스템의 한계가 있다. 엔지니어가 코드로 변환해 인간의 능력 이상을 넘어서기 어렵고, 제대로 정의된 작업은 문제가 없으나 일부 작업에서는 규칙 구성하기 어렵다.
<br>
<br></p>
<h3 id="📘-span-stylecolor-navy인공지능의-학습span">📘 <span style="color: navy">인공지능의 학습</span></h3>
<h4 id="인간과-매우-흡사한-방식을-가지고-있음">인간과 매우 흡사한 방식을 가지고 있음</h4>
<p>**<span style="background: #ffc0cb">1. 학습
2. 학습과정으로 생겨난 지능을 통한 추론</sapn>
**
모델(model)이란 학습을 통해 지능을 만들고 추론을 통한 결과, 추론이 맞거나 틀리거나를 반복하며 지능이 발달하고 성장하는 것을 의미하며 이때, 판단을 정확하고 오차없이 해내는 인공지능 모델이 우수한 모델이다.</p>
<p>기존 알고리즘은 어떤한 원인과 결과에 대한 규칙을 인간이 직접 정해주지만 인공지능은 <span style="background: #90d5eb">원인과 결과의 원리를 파악</span>하고 <span style="background: #90d5eb">학습과 추론의 결과</span>를 통해서 모델을 정확히 만들어간다. 이를 통해 기존의 알고리즘과 인공지능을 구분할 수 있다.
<br>
<br></p>
<h3 id="🔍-인공지능에-관하여">🔍 인공지능에 관하여...</h3>
<h4 id="인공지능이-일상에-녹아들-수-있었던-이유">인공지능이 일상에 녹아들 수 있었던 이유</h4>
<p>인공지능도 방대한 양의 데이텅와 컴퓨터 성능이 뒷받침 되어야 하는데 많은 연산속도를 버틸 수 있는 컴퓨터의 발전이 잇었기 떄문에 인공지능이 일상에 녹아들 수 있었다.</p>
<p><strong><span style="background: #ffc0cb">머신러닝(ML)</span> : 기계학습
<span style="background: #ffc0cb">딥러닝(DL)</span> : 심층학습 - 인공지능에서 가장 성능이 뛰어남</strong></p>
<blockquote>
</blockquote>
<p>알고리즘 : 인간의 지능을 기반으로 자동화<br>인공지능 : 알고리즘에 대한 원리, 규칙을 스스로 찾아냄</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1주차 문제풀이]]></title>
            <link>https://velog.io/@juwan-25/1%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4</link>
            <guid>https://velog.io/@juwan-25/1%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4</guid>
            <pubDate>Sat, 02 Apr 2022 08:17:16 GMT</pubDate>
            <description><![CDATA[<h6 id="20220328">2022.03.28</h6>
<h2 id="1-짝수와-홀수">1. 짝수와 홀수</h2>
<h3 id="문제">문제</h3>
<p>정수 num이 짝수일 경우 &quot;Even&quot;을 반환하고 홀수인 경우 &quot;Odd&quot;를 반환하는 함수, solution을 완성해주세요.</p>
<h5 id="🔎-기본제공">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public String solution(int num) {
        String answer = &quot;&quot;;
        return answer;
    }
}</code></pre>
<h3 id="풀이">풀이</h3>
<h4 id="📃-제출코드">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public String solution(int num) {
        if(num%2==0) return &quot;Even&quot;;
        else return &quot;Odd&quot;;
    }
}</code></pre>
<h4 id="💡-전체코드">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    static String solution(int num) {
        if(num%2==0) return &quot;Even&quot;;
        else return &quot;Odd&quot;;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        System.out.println(solution(num));

    }
}</code></pre>
<h4 id="📌-풀이설명">📌 풀이설명</h4>
<p>짝수와 홀수를 구분하기 위해 <strong>if else 조건문</strong>과 <strong>나머지 연산자(%)</strong>를 사용하여 나머지가 0일 경우 짝수로 Even을 return 시키고, 0이 아닌 경우에는 Odd를 return 시켰다. 
<strong>삼항연산자(조건 ? ture값 : flase값)</strong>를 활용하여 풀 수도 있다.</p>
<pre><code class="language-java">class Solution {
    public String solution(int num) {
         return (num % 2 == 0)?&quot;Even&quot;:&quot;Odd&quot;;
    }
}</code></pre>
<h6 id="20220329">2022.03.29</h6>
<h2 id="2-x만큼-간격이-있는-n개의-숫자">2. x만큼 간격이 있는 n개의 숫자</h2>
<h3 id="문제-1">문제</h3>
<p>함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.</p>
<h5 id="🔎-기본제공-1">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public long[] solution(int x, int n) {
        long[] answer = {};
        return answer;
    }
}</code></pre>
<h3 id="풀이-1">풀이</h3>
<h4 id="📃-제출코드-1">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        long num = x;
        for(int i=0; i&lt;answer.length; i++){
            answer[i]=num;
            num+=x;
        }
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-1">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    static long[] solution(int x, int n) {
        long[] answer = new long[n];
        long num = x;
        for(int i=0; i&lt;answer.length; i++){
            answer[i]=num;
            num+=x;
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int n = sc.nextInt();
        long[] arr = solution(x,n);
        for(int i=0; i&lt;arr.length; i++)
            System.out.print(arr[i]+&quot; &quot;);

    }
}
</code></pre>
<h4 id="📌-풀이설명-1">📌 풀이설명</h4>
<p>배열을 선언하여 x만큼 차이나는 값을 저장할 수 있는 방을 만들었다. for문을 활용하여 각 방에 x부터 x*n까지 값을 넣었다. 배열을 return하므로 메인에 배열을 생성하여 answer값을 대입해주고 출력하였다.</p>
<h6 id="20220330">2022.03.30</h6>
<h2 id="3-평균-구하기">3. 평균 구하기</h2>
<h3 id="문제-2">문제</h3>
<p>정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.</p>
<h5 id="🔎-기본제공-2">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public double solution(int[] arr) {
        double answer = 0;
        return answer;
    }
}</code></pre>
<h3 id="풀이-2">풀이</h3>
<h4 id="📃-제출코드-2">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public double solution(int[] arr) {
        double answer = 0;
        int sum = 0;
        for(int i=0; i&lt;arr.length; i++)
            sum += arr[i];
        answer = (double) sum/ arr.length;
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-2">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    static double solution(int[] arr) {
        double answer = 0;
        int sum = 0;
        for(int i=0; i&lt;arr.length; i++)
            sum += arr[i];
        answer = (double) sum/ arr.length;
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println(&quot;입력 개수&quot;);
        int[] arr = new int[sc.nextInt()];
        for(int i=0; i&lt; arr.length; i++)
            arr[i] = sc.nextInt();
        System.out.println(solution(arr));
    }
}
</code></pre>
<h4 id="📌-풀이설명-2">📌 풀이설명</h4>
<p>메인에서 배열의 길이를 입력 받아 생성하고, <strong>for문</strong>을 돌려 값을 입력한다. 함수에서 배열을 넘겨 <strong>for문</strong>을 통해 합계를 구하고, 합계를 통해 평균을 구했다.</p>
<h6 id="20220331">2022.03.31</h6>
<h2 id="4-핸드폰-번호-가리기">4. 핸드폰 번호 가리기</h2>
<h3 id="문제-3">문제</h3>
<p>프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.</p>
<h5 id="🔎-기본제공-3">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public String solution(String phone_number) {
        String answer = &quot;&quot;;
        return answer;
    }
}</code></pre>
<h3 id="풀이-3">풀이</h3>
<h4 id="📃-제출코드-3">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public String solution(String phone_number) {
        String answer =&quot;&quot;;
        String[] arr= phone_number.split(&quot;&quot;);
        for(int i=0; i&lt;phone_number.length()-4; i++)
            arr[i] = &quot;*&quot;;
        answer = String.join(&quot;&quot;,arr);
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-3">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution_0331 {
    public static String solution(String phone_number) {
        String answer =&quot;&quot;;
        String[] arr= phone_number.split(&quot;&quot;);
        for(int i=0; i&lt;phone_number.length()-4; i++)
            arr[i] = &quot;*&quot;;
        answer = String.join(&quot;&quot;,arr);
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String phone_num = sc.next();
        System.out.println(solution(phone_num));
    }
}</code></pre>
<h4 id="📌-풀이설명-3">📌 풀이설명</h4>
<p>문자열을 배열에 넣기 위해서 <strong>split()</strong>를 이용해 문자열을 하나씩 분리하여 넣어주었다. 그리고 for문을 사용해 뒤에 4자리를 제외한 앞 자리 숫자를 <em>로 바꾸어 배열에 넣어주었다. 그 후 문자열로 return 해주기 위해서 *</em>String.join()**을 사용해 문자열 배열을 하나의 문자열로 합쳤다. </p>
<h5 id="split-함수--정규표현식-특정-문자를-기준으로-문자열을-나누어-배열에-넣음--ex-쉼표-문자-하나씩--띄어쓰기-등">split 함수 : 정규표현식, 특정 문자를 기준으로 문자열을 나누어 배열에 넣음 | ex) &quot;,&quot;(쉼표) &quot;&quot;(문자 하나씩) &quot; &quot;(띄어쓰기) 등</h5>
<pre><code class="language-java">String str = &quot;부산,제주도,가평,홍천&quot;;
String[] arr = str.split(&quot;,&quot;);</code></pre>
<h5 id="결과--arr1--부산-arr2--제주도-">결과 : arr[1] = &quot;부산&quot;, arr[2] = &quot;제주도&quot; ...</h5>
<h5 id="stringjoin-함수">String.join 함수</h5>
<pre><code class="language-java">String str = {&quot;부산&quot;, &quot;제주도&quot;, &quot;가평&quot;,&quot;홍천&quot;};
string str = String.Join(separator, value); </code></pre>
<h6 id="20220401">2022.04.01</h6>
<h2 id="5-정수-제곱근-판별">5. 정수 제곱근 판별</h2>
<h3 id="문제-4">문제</h3>
<p>임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.</p>
<h5 id="🔎-기본제공-4">🔎 기본제공</h5>
<pre><code class="language-java">class Solution {
    public long solution(long n) {
        long answer = 0;
        return answer;
    }
}</code></pre>
<h3 id="풀이-4">풀이</h3>
<h4 id="📃-제출코드-4">📃 제출코드</h4>
<pre><code class="language-java">class Solution {
    public long solution(long n) {
        long answer = 0;
        long num = (long) Math.sqrt(n);
        if(n%Math.sqrt(n)==0) answer = (num+1)*(num+1);
        else answer = -1;
        return answer;
    }
}</code></pre>
<h4 id="💡-전체코드-4">💡 전체코드</h4>
<pre><code class="language-java">import java.util.Scanner;

public class Solution {
    public static long solution(long n) {
        long answer = 0;
        long num = (long) Math.sqrt(n);
        if(n%Math.sqrt(n)==0) answer = (num+1)*(num+1);
        else answer = -1;
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        System.out.println(solution(n));
    }
}</code></pre>
<h4 id="📌-풀이설명-4">📌 풀이설명</h4>
<p><strong>Math.sqrt()</strong>를 활용해 입력받은 수를 넘겨 받아 제곱근을 구했고, 제곱근+1의 제곱을 구하기 위해 num 변수에 저장하였다. 입력받은 수의 제곱근이 정수인지 아닌지를 알기 위해서 <strong>입력받은 수와 제곱근의 나머지</strong>를 구해서 <strong>if 조건문</strong>을 이용해 return값을 결정할 수 있도록 하였다.</p>
]]></description>
        </item>
    </channel>
</rss>