<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>stone_51.log</title>
        <link>https://velog.io/</link>
        <description>I'm always be here. Because I'm stone</description>
        <lastBuildDate>Tue, 21 Nov 2023 09:53:15 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>stone_51.log</title>
            <url>https://velog.velcdn.com/images/stone_51/profile/a4f13844-a870-43b8-87e0-be0333268f6a/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. stone_51.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/stone_51" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[백준 2903] 중앙 이동 알고리즘]]></title>
            <link>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-2903-%EC%A4%91%EC%95%99-%EC%9D%B4%EB%8F%99-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-2903-%EC%A4%91%EC%95%99-%EC%9D%B4%EB%8F%99-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Tue, 21 Nov 2023 09:53:15 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다.</p>
<p>외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다.</p>
<p>알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.</p>
<p>정사각형의 각 변의 중앙에 점을 하나 추가한다.
정사각형의 중심에 점을 하나 추가한다.
초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다.</p>
<p>아래 그림은 과정을 총 2번 거쳤을 때까지의 모습이다.
<img src="https://velog.velcdn.com/images/stone_51/post/123f5324-7a29-4965-aae1-a4536eaf0bad/image.JPG" alt=""></p>
<p>초기 상태 - 점 4개    1번 - 점 9개    2번 - 25개
상근이는 어떤 점은 한 개 보다 많은 정사각형에 포함될 수 있다는 사실을 알았다. 메모리 소모량을 줄이기 위해서 중복하는 점을 한 번만 저장하려고 한다. 과정을 N번 거친 후 점 몇 개를 저장해야 하는지 구하는 프로그램을 작성하시오.</p>
<h3 id="입력">입력</h3>
<p>첫째 줄에 N이 주어진다. (1 ≤ N ≤ 15)</p>
<h3 id="출력">출력</h3>
<p>첫째 줄에 과정을 N번 거친 후 점의 수를 출력한다.</p>
<h3 id="예제">예제</h3>
<p>입력: 1 출력: 9
입력: 2 출력: 25
입력: 5 출력: 1089</p>
<h2 id="tip">Tip</h2>
<ol>
<li>1089는 33의 제곱이다. </li>
<li>입력이 1일 때 3의 제곱, 2일 때 5의 제곱, 5일 때 33의 제곱이다. </li>
<li>pow함수는 double형태로 출력된다. </li>
</ol>
<h1 id="풀이">풀이</h1>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;math.h&gt;//수학 라이브러리

int main() {
    int n;
    scanf_s(&quot;%d&quot;, &amp;n);
    double temp = 1 + pow(2, n);//1+(2^n)
    /*2일 때 4+1의 제곱, 5일 때 32+1의 제곱이므로*/
    double ans = round(pow(temp, 2));
    printf(&quot;%1.lf&quot;, ans);
    return 0;
}</code></pre><p>귀납적 사고를 요구하는 문제
구현은 어렵지 않지만 규칙성을 찾는 것이 주요하다.</p>
<h2 id="one-more-thing">One More Thing</h2>
<ol>
<li>IDE를 VS2022가 아니라 Replit을 썼는데 링커 오류가 났다. 뭐가 뭔 말인지는 잘 모르겠으나.... VS를 벗어나려는 나의 노력은 또 이렇게 물거품이 되었다. </li>
<li>귀납적으로 노트에다가 직접 해봤다. 머리로만 한다면 아마 천재가 아닐까 싶기도 하고... 물론 마구잡이로 해본 건 아니다. 문제를 보자마자 예제 입력 5의 출력인 1089에 루트를 씌어봤다. 출력이 제곱인 걸 알고나서 귀납적으로 해봤으니 나름 체계적이었다고 해야할까?</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 2720]거스름돈 기계]]></title>
            <link>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-2720%EA%B1%B0%EC%8A%A4%EB%A6%84%EB%8F%88-%EA%B8%B0%EA%B3%84</link>
            <guid>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-2720%EA%B1%B0%EC%8A%A4%EB%A6%84%EB%8F%88-%EA%B8%B0%EA%B3%84</guid>
            <pubDate>Tue, 21 Nov 2023 06:28:16 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다.
동혁이는 리암에게 실망했다.(<del>중대장은 실망했다</del>)
리암은 거스름돈을 주는 것을 자꾸 실수한다.
심지어 $0.5달러를 줘야하는 경우에 거스름돈으로 $5달러를 주는것이다!
어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다.</p>
<p>거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter, $0.25)의 개수, 다임(Dime, $0.10)의 개수, 니켈(Nickel, $0.05)의 개수, 페니(Penny, $0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상 $5.00 이하이고, 손님이 받는 동전의 개수를 최소로 하려고 한다. 예를 들어, $1.24를 거슬러 주어야 한다면, 손님은 4쿼터, 2다임, 0니켈, 4페니를 받게 된다.</p>
<h3 id="입력">입력</h3>
<p>첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 거스름돈 C를 나타내는 정수 하나로 이루어져 있다. C의 단위는 센트이다. (1달러 = 100센트) (1&lt;=C&lt;=500)
ex)
3
124
25
194</p>
<h3 id="출력">출력</h3>
<p>각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다.
ex)
4 2 0 4
1 0 0 0
7 1 1 4</p>
<h3 id="tip">Tip</h3>
<p>1달러=100센트
1쿼터 = 0.25달러 = 25센트
1다임 = 0.10달러 = 10센트
1니켈 = 0.05달러 = 5센트
1페니 = 0.01달러 = 1센트</p>
<pre><code>#include&lt;stdio.h&gt;
int main(void){
  int T=0;
  int C=0;
  int Q,D,N,P;
  scanf(&quot;%d&quot;,&amp;T);//테스트 횟수 입력
    for(int i=0;i&lt;T;i++){
      scanf(&quot;%d&quot;,&amp;C);
      Q=C/25;//거스름돈은 500센트를 넘지 않는다. 센트를 기준으로 계산.   
      C=C%25;
      D=C/10;
      C=C%10;
      N=C/5;
      C=C%5;
      P=C;
    }
    printf(&quot;%d %d %d %d &quot;,Q,D,N,P);
  }
return 0;
}</code></pre><h3 id="one-more-thing">one more thing</h3>
<ol>
<li>지난 문제보다 훨씬 쉬운 문제다. 센트와 달러의 관계만 알면 모든 단위를 센트를 기준으로 해야한다는 걸 알 수 있다. </li>
<li>반복문을 사용하므로 굳이 여러개의 print문을 사용할 필요가 없다. </li>
<li>HTML 공부도 할 겸 코드 정리 글을 적을 때 HTML을 활용하려고 했는데 적다보니 코드 적는 창이 나오지 않는다. 아무래도 아직은 무리인 듯 하다. VSC로 따로 정리를 하고 나만의 웹사이트나 티스토리를 꾸미는 걸 목표로 삼아야겠다. </li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준11005] 진법전환 2]]></title>
            <link>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%8011005-%EC%A7%84%EB%B2%95%EC%A0%84%ED%99%98-2</link>
            <guid>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%8011005-%EC%A7%84%EB%B2%95%EC%A0%84%ED%99%98-2</guid>
            <pubDate>Tue, 21 Nov 2023 02:08:17 GMT</pubDate>
            <description><![CDATA[<div>
<h1>문제</h1>
  <p><strong>10진법 수 N이 주어진다.</strong> 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

<p>10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.</p>
<p>A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35 </p></p>
<h2>입력</h2>
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다
ex) 60466175 36

<h2>출력</h2>
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
ex)ZZZZZ
</div>
<div>
<h1>풀이과정</h1>
<h3>tip</h3>
1. 저번 문제의 역으로 하면 된다. 즉, 10진수 N을 주어진 B로 나누고 그 나머지가 배열 ans에 출력되어야 한다. 
</br>2. 반복문 안에서 N이 0보다 작아질 때까지 1의 과정이 반복되어야 하며, 반복문의 끝에 N을 B로 나눈 몫으로 새롭게 정의를 해주어야 한다. 
</br>3.배열 ans로 받는 것이기에 ASCII코드를 사용하여 10이상의 수는 알파벳 문자로, 그 미만의 수는 숫자로 받아야 한다. 
</div>

<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

int main(void) {
    int n, B;
    char ans[101];
    scanf(&quot;%d %d&quot;, &amp;n, &amp;B);
    int i = 0;

    while (n &gt; 0) {
        int cal = n % B;
        if (cal &gt;= 10) {
            ans[i] = cal + 55;
        } else {
            ans[i] = cal + &#39;0&#39;;
        }
        i++;
        n /= B;
        /*n=n/B, 이렇게 해야 n이 몫으로 새로 정의되면서
        반복문에서 제대로 계산을 함.*/
    }

    for (int j = i - 1; j &gt;= 0; j--) {
        printf(&quot;%c&quot;, ans[j]);
    } 
    /*int i가 배열 ans의 길이가 되므로*/
    return 0;
    }</code></pre><div>
<h1>one more thing</h1>
1. 기본적인 알고리즘 구조는 잘 만들었음
</br> 2. 그러나 for문에 비해 <i>While문은 아직 연습이 더 필요한 것 같다.</i></br> int i를 while문 안에 정의해서 무한루프가 돌게 한다든지, n을 새롭게 정의해주지 않아서 값이 출력이 안되는 등 실수가 많았다. <del>chat GPT가 그게 문제라고 가르쳐주긴 했지만</del> 앞으로 While문을 쓸 때 같은 실수를 반복하지 않도록 해야 한다. 
</br>3.평소에는 Obsidian으로 익힌 마크다운을 통해 글을 적었지만 이제 HTML을 배우는 만큼 HTML을 통해 작성을 해봤다. 마크다운에 비해 불편한 점이 있지만 <ins>HTML이 웹 개발의 시작인 만큼 앞으로 익숙해지는 것이 필요할 것 같다.</ins> </div>


]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 2745] 진법 변환]]></title>
            <link>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-2745-%EC%A7%84%EB%B2%95-%EB%B3%80%ED%99%98</link>
            <guid>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-2745-%EC%A7%84%EB%B2%95-%EB%B3%80%ED%99%98</guid>
            <pubDate>Sun, 19 Nov 2023 14:50:42 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.</p>
<p>10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.</p>
<p>A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35</p>
<h2 id="입력">입력</h2>
<p>첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)</p>
<p>B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.</p>
<h2 id="출력">출력</h2>
<p>첫째 줄에 B진법 수 N을 10진법으로 출력한다. </p>
<h1 id="풀이">풀이</h1>
<ol>
<li>진법=&gt; 예를 들면 31이라면
11111(2)= (2^4)<em>1+(2^3)</em>1+(2^2)<em>1+(2^1)</em>1+(2^0)<em>1
37(8)= (8^1)</em>3+(8^0)*7</li>
<li>즉 배열의 길이에서 1을 뺀 값이 처음 지수, 그 후 0까지 1씩 감소</li>
</ol>
<pre><code>#include&lt;stdio.h&gt;
#include&lt;math.h&gt;
#include&lt;string.h&gt;
int main() {
    char n[101] = { 0 };
    int b = 0;
    scanf(&quot;%s %d&quot;, n, &amp;b);//b진법으로 표현된 수 n을 입력받는다. 
    int len = strlen(n);
    int result = 0;
    for (int i = 0; i &lt; len; i++) {
        int digit = 0;
        if (n[i] &gt;= &#39;A&#39; &amp;&amp; n[i] &lt;= &#39;Z&#39;) {//알파벳으로 표현된 수는 10이상인 수, A의 ASCII코드는 65,따라서 55를 빼는 것
            digit = n[i] - 55;
        }
        else if (n[i] &gt;= &#39;0&#39; &amp;&amp; n[i] &lt;= &#39;9&#39;) {
            digit = n[i] - &#39;0&#39;;//int가 아니라 char로 받았기에 ASCII코드를 이용
        }
        result += digit * pow(b, len - 1 - i);//POW는 b^len-1-i를 만드는 함수
    }
    printf(&quot;%d&quot;, result);
}</code></pre><h1 id="one-more-thing">One More Thing</h1>
<ol>
<li>진수에 대한 개념이 너무 오랜만이라 진수를 알아가는 데 시간이 조금 걸렸다. </li>
<li>숫자도 배열에서 표현되는 건 문자란 걸 깜빡함 </li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 10798]]]></title>
            <link>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-10798</link>
            <guid>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-10798</guid>
            <pubDate>Thu, 16 Nov 2023 05:18:37 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>5줄의 문장을 받고 이를 세로로 출력하시오. </p>
<h2 id="입력">입력</h2>
<p>EX) 
A A B C D D
a f z z 
0 9 1 2 1
a 8 E W g 6
P 5 h 3 k x</p>
<h2 id="출력">출력</h2>
<p>Aa0aPAf985Bz1EhCz2W3D1gkD6x</p>
<h1 id="풀이">풀이</h1>
<p>일단 알고리즘을 생각해봤다. 
입력을 받을 때는 반복문을 사용해 가로를 정의하고 (총 5줄) 각 줄의 요소는 이중 반복문으로 받는다. 
그리고 출력할 때는 반대로 세로를 먼저 정의하고 가로는 이중 반복문으로 표현하면 된다. 여기서 걸림돌이 되는 것은 각 문장의 길이가 다르게 되면 빈칸이 생길 수 있다는 것인데 이건 if문과 continue을 사용해서 해결하면 된다. 
그리고 시행착오를 거치다가 다음과 같은 코드를 완성했다. </p>
<pre><code>#include&lt;stdio.h&gt;
#define MAX 15//최대 15자의 문장이다. 
int main(void) {
    char input[5][MAX];//char input[5][MAX]={0};로 초기화 해줘야 함
    for (int i = 0; i &lt; 5; i++)
    {
        scanf(&quot;%s&quot;, input[i]);//문장을 입력받으므로 이중 반복문일 필요가 없음
    }
    for (int j = 0; j &lt; MAX; j++) {
        for (int i = 0; i &lt; 5; i++) {
            if (input[i][j] == NULL) {//만약 빈칸이라면 출력하지 않고 지나간다. 
                continue;
            }
            else {
                printf(&quot;%c&quot;, input[i][j]);
            }
        }
    }
    return 0;
}</code></pre><p>그런데 이게 오답처리가 되었다. 
다시 replit으로 돌려보니까 배열을 초기화해주지 않아서 쓰레기값 몇개가 묻어나왔다. 초기화하니  정답 처리가 되었다. 기본이 중요하다는 걸 새삼 깨닫는다. </p>
<h1 id="one-more-thing">One More Thing</h1>
<p>일단 초반에 알고리즘 구조는 잘 만든 것 같다. 그러나 배열 초기화라는 기본적인 걸 기억하지 못한 것은 조금 아쉬운 부분이다. 점점 지식을 쌓을수록 기본에 충실해야 하는데 이번에는 아쉽게도 그렇게 하지 못했다. 일단 2차원 배열까지만 문제를 풀고 다시 처음 문제를 돌아보면서 복습하는 시간이 필요할 것 같다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 2738] 2차원 배열의 덧셈]]></title>
            <link>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-2738-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4%EC%9D%98-%EB%8D%A7%EC%85%88</link>
            <guid>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-2738-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4%EC%9D%98-%EB%8D%A7%EC%85%88</guid>
            <pubDate>Wed, 15 Nov 2023 13:51:07 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<p>n * m 크기의 행렬이 주어졌을 때 두 행렬의 합을 구하시오. </p>
<h2 id="입력">입력</h2>
<p>첫째줄에는 n과 m이 주어진다. 
행렬 a 그 다음에는 행렬 b가 주어진다. </p>
<h2 id="출력">출력</h2>
<p>두 행렬의 합을 출력하다. </p>
<h1 id="풀이">풀이</h1>
<p>처음에는 행렬이 3개가 필요하다고 판단했다. 
행렬 a, 행렬 b, 그리고 두 행렬의 합을 받을 행렬 sum
그래서 다음과 같은 코드를 만들었으나.....</p>
<pre><code>#include&lt;stdio.h&gt;
int main() {
    int a[101][101];
    int b[101][101];
    int sum[101][101];//합을 받을 행렬
    int n, m;
    scanf(&quot;%d %d&quot;, &amp;n, &amp;m);
    for (int i = 0; i &lt; n; i++) {
        for (int j = 0; i &lt; m; j++) {//여기가 문제여.
            scanf(&quot;%d&quot;, &amp;a[i][j]);
        }
    }
    for (int i = 0; i &lt; n; i++) {
        for (int j = 0; i &lt; m; j++) {//여기가 문제다. 
            scanf(&quot;%d&quot;, &amp;b[i][j]);
        }
    }

    for (int i = 0; i &lt; n; i++) {
        for (int j = 0; i &lt; m; j++) {
            sum[i][j] = a[i][j] + b[i][j];
        }
    }//a와 b의 합을 만듦

    for (int i = 0; i &lt; n; i++) {
        for (int j = 0; j &lt; m; j++) {
            printf(&quot;%d&quot;, sum[i][j]);
        }
    }
    return 0;
}</code></pre><p>결과는 시간초과...
바보같이 j가 아니라 i를 넣었다. </p>
<p>그리고 너무 반복문이 많은 것 같아서 조금 더 구글링 해보니 굳이 합을 담는 행렬을 만들 필요는 없을 것 같았다. 
합을 만드는 반복문 안에 출력까지 하면 될 듯 했다. 그래서 최종적인 답은</p>
<pre><code>#include &lt;stdio.h&gt;

int main(void){
    int N, M;
    scanf(&quot;%d %d&quot;, &amp;N, &amp;M);

    int A[N][M];
    int B[N][M];

    for(int i=0; i&lt;N; i++){
        for(int j=0; j&lt;M; j++){
            scanf(&quot;%d&quot;, &amp;A[i][j]);//A입력
        }
    }

    for(int i=0; i&lt;N; i++){
        for(int j=0; j&lt;M; j++){
            scanf(&quot;%d&quot;, &amp;B[i][j]);//B입력
        }
    }

    for(int i=0; i&lt;N; i++){
        for(int j=0; j&lt;M; j++){
            int sum = A[i][j] + B[i][j];//합 만들기
            printf(&quot;%d &quot;, sum);//합 출력 
        }
        printf(&quot;\n&quot;);
    }return 0;
}</code></pre><h3 id="one-more-thing">One More Thing</h3>
<p>그런데 정답을 만든 이후에도 코드를 이러저리 흩어서 제출을 해봤는데 
sum행렬을 따로 만들어서 출력을 하면 계속 오답으로 처리가 된다. 
이유가 있는 건지.... 내가 분석을 조금 더 해봐야 할 부분이다. 
일단 처음에 접근하는 방향이 적중했다는 것에 조금 만족감을 가지지만 아직 코딩초보 이다 보니 가용할 수 있는 범위가 그리 크지 않아서 답답하다. 
다른 사람들의 답안을 보면 포인터를 사용한 경우도 있는데 포인터를 왜 사용한건지 아직 잘 모르겠다. 조금 더 공부가 필요한 부분이다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 1316] 알고리즘을 만들기까지....]]></title>
            <link>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-1316-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84-%EB%A7%8C%EB%93%A4%EA%B8%B0%EA%B9%8C%EC%A7%80</link>
            <guid>https://velog.io/@stone_51/%EB%B0%B1%EC%A4%80-1316-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84-%EB%A7%8C%EB%93%A4%EA%B8%B0%EA%B9%8C%EC%A7%80</guid>
            <pubDate>Tue, 14 Nov 2023 05:23:24 GMT</pubDate>
            <description><![CDATA[<h1 id="문제">문제</h1>
<h2 id="연속된-알파벳-카운터-만들기">연속된 알파벳 카운터 만들기.</h2>
<p>문제에서 말하는 연속된 알파벳 배열은 다음과 같다.</p>
<ol>
<li>abc 한번에 나오는 것</li>
<li>aaabbcc 여러번 나오더라도 마지막 알파벳이 앞의 것과 같고 뒤에는 같은 것이 나오지 않는 것.</li>
</ol>
<p>즉, aabbccsa는 연속된 알파벳 배열이 아니다. </p>
<h3 id="문제에서-요구하는-조건">문제에서 요구하는 조건</h3>
<p>1.입력
문장의 개수 n을 입력받는다. (0&lt;n&lt;=100)
2.출력
연속된 배열로 이뤄진 문장의 수를 출력한다. </p>
<h1 id="풀이">풀이</h1>
<h3 id="초반">초반</h3>
<p>처음에는 문장을 입력받으면 이중배열을 이용해 하나씩 비교하려고 했다. 
생각해보니 그 방향이 아니었다. 배열 내에서 카운트를 하는 게 아니기 때문이다. 
그렇다면 배열에서 기준점을 잡아서 앞뒤로 분석을 해야하나 싶어서 만약 input[i]가 주어진다면 input[i-1]과 input[i+1]을 비교하려고 했다. 그런데 그렇게 한다면 일단 input[0]과 input[strlen(input)]에서 좀 애매해진다. 그리고 반복되지 않는 abc같은 배열도 연속된 알파벳의 배열인데 이런 배열은 셀 수가 없다. 
어쩔 수 없이 오늘도 구 선생님의 도움을 받았다. </p>
<h3 id="구선생님의-피드백">구선생님의 피드백</h3>
<ul>
<li>연속된 알파벳의 종류에는 abc같은 배열과 aabbcc같은 배열이 있다. </li>
<li>여러 알파벳 중에서도 문제는 알파벳 소문자만을 대상으로 하고 있고 abc나 abbccc나 결국 같은 배열이라고 취급되기에 알파벳을 세는 것이 필요하다. </li>
<li>입력되는 배열 이외에 알파벳의 개수를 세는 배열을 만들어서 배열의 요소가 2이상이 된다면 연속된 배열이 아닌 것이다. </li>
</ul>
<pre><code>#include&lt;stdio.h&gt;
#include&lt;string.h&gt;
int main() {
    int n;
    char input[101];

    scanf(&quot;%d&quot;, &amp;n);//입력받는 배열의 개수
    int count = n;
    for (int i = 0; i &lt; n; i++) {
        scanf(&quot;%s&quot;, input);
        int len = strlen(input);
        char first = 0;
        int cnt[26] = { 0 };
        /*n번 동안 문장을 입력받고 비교를 위해 사용하는 배열과 변수를 초기화*/
        for (int j = 0; j &lt; len; j++) {
            if (first != input[j]) { //만약 앞의 알파벳과 다르다면 
                first = input[j];//그 알파벳을 새로운 기준으로 잡고 
                cnt[input[j] - &#39;a&#39;] += 1;//그 알파벳의 수를 센다.
            }
            if (cnt[input[j] - &#39;a&#39;] == 2) {
                count -= 1;
                break;
                /*만약 한 문자가 문장에 두개 이상 카운트된다면 연속된 문장이 아니므로 총 문장개수에서 하나를 빼고 반복문을 종료한다.*/ 
            }
        }
    }
    printf(&quot;%d&quot;, count);
    return 0;
}</code></pre><h2 id="반성할--점">반성할  점</h2>
<p>일단 문제에서 요구하는 것이 무엇인지 파악하는 것이 필요하다. 문제를 읽고나서 빠르게 답을 내어야 하는 대한민국식 입시교육과 공무원 시험에 특화된 문과식 교육이 아직 몸에 배여 있어서 문장을 제대로 이해하기도 전에 코드를 입력하고 있다. 일단 문제에서 원하는 입력과 출력을 보고 이걸 해결하기 위해서 어떤 알고리즘을 구현해야 하는지 진득하게 고민해야 한다.  </p>
]]></description>
        </item>
    </channel>
</rss>