<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dev_kiiim.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 05 Jan 2023 15:39:48 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. dev_kiiim.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev_kiiim" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[미해결][백준:1904] 01타일 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%AF%B8%ED%95%B4%EA%B2%B0%EB%B0%B1%EC%A4%801904-01%ED%83%80%EC%9D%BC-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%AF%B8%ED%95%B4%EA%B2%B0%EB%B0%B1%EC%A4%801904-01%ED%83%80%EC%9D%BC-JAVA</guid>
            <pubDate>Thu, 05 Jan 2023 15:39:48 GMT</pubDate>
            <description><![CDATA[<p>오늘은 어제와 같은 DP 관련 문제를 풀어보았다.</p>
<p>주어진 정수의 길이만큼의 이진수의 경우의 수를 출력하는 문제인데,
0은 00으로 붙여서 사용해야 했다.
그래서 1인 경우부터 직접 구해서 규칙을 찾아냈다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        System.out.println(dp(N));
    }</p>
</blockquote>
<pre><code>public static int dp(int N){
    int[] dp = new int[N + 1];
    dp[1] = 1;
    dp[2] = 2;
    for(int i=3; i&lt;=N; i++){
        dp[i] = 2*(dp[i-1]-1) + 1;
    }
    return dp[N];
}</code></pre><p> N이 5인 경우까지 나열해보니 위와 같이 풀으면 될 것 같아서 코딩하고 제출했더니 틀렸다고 나오는 것이었다,,🤔
 무엇이 잘못됐는지 다시 나열해보고, 검색도 해보니 N=5인 경우 00000까지 포함시켜서 규칙을 잘못 체크하고 있었었다,,,ㅎ
 아주 간단한 피보나치 수열이었는데,,,ㅎ,,,,,,,,😅</p>
<p>그래서 다시 푼 풀이는 아래와 같았다.</p>
<blockquote>
<p>   public static int dp(int N){
        int[] dp = new int[N+1];
        dp[1] = 1;
        dp[2] = 2;
        for(int i=3; i&lt;=N; i++){
            dp[i] = (dp[i-1] + dp[i-2]) % 15746;
        }
        return dp[N];
    }</p>
</blockquote>
<p>  피보나치 수열인데 문제에서 15746으로 나눈 나머지 값을 출력하라고 표시되어 있어서 %15746 까지 추가해서 제출을 했는데,
  <img src="https://velog.velcdn.com/images/dev_kiiim/post/dfea08d7-e634-4104-af34-7b33daa549c3/image.PNG" alt="">
왜,,,어째서,,,,,?
검색해서 다른 분들의 풀이를 봐도 내 풀이가 맞는 것 같은데,,,,왜,,,,?😞
왜 런타임 에러인지는 다음에 알아보도록 하자,,</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:2839] 설탕 배달 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%802839-%EC%84%A4%ED%83%95-%EB%B0%B0%EB%8B%AC-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%802839-%EC%84%A4%ED%83%95-%EB%B0%B0%EB%8B%AC-JAVA</guid>
            <pubDate>Wed, 04 Jan 2023 17:40:39 GMT</pubDate>
            <description><![CDATA[<p>2023년 첫 게시물이자,, 첫 알고리즘 문제를 풀어보았다.
퇴사준비와 연말행사가 겹치는 바람에 거의 1~2주를 공부에 집중하지 못하고 보냈다,,😢
이제 퇴사도 했겠다. 정신차리고 다시 달려보자!! 라는 다짐을 하며 오늘 풀어 본 문제를 포스팅 해보도록 하겠다.</p>
<p>DP 유형의 문제를 풀어보려고 제일 쉬운 난이도의 문제를 골랐는데,,
그냥 수학적인 접근 방법으로 풀어버렸다,,ㅎ,,,,</p>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        System.out.println(dp(N));
    }</p>
</blockquote>
<pre><code>public static int dp(int N){
    int answer = 0;
    while(true) {
        if (N % 5 == 0) {
            answer += N / 5;
            break;
        } else if (N &lt; 0) {
            answer = -1;
            break;
        }
        N -= 3;
        answer++;
    }
    return answer;
}</code></pre><p>  아무래도 아직 DP로 접근하는 방법이 익숙하지 않아서라고 생각하고,
  DP풀이를 검색해가며 다시 풀어보았다.</p>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        System.out.println(dp(N));
    }</p>
</blockquote>
<pre><code>public static int dp(int N){
    int[] dp = new int[N+1];</code></pre><blockquote>
</blockquote>
<pre><code>    if(N&gt;=3){
        dp[3] = 1;
    }
    if(N&gt;=5){
        dp[5] = 1;
    }</code></pre><blockquote>
</blockquote>
<pre><code>    for(int i=6; i&lt;=N; i++){
        if(i%5 == 0){
            dp[i] = dp[i-5]+1;
        }else if(i%3 == 0){
            dp[i] = dp[i-3]+1;
        }else{
            if(dp[i-3] != 0 &amp;&amp; dp[i-5] != 0){
                dp[i] = Math.min(dp[i-3], dp[i-5]) +1;
            }
        }
    }</code></pre><blockquote>
</blockquote>
<pre><code>    if(dp[N] == 0){
        dp[N] = -1;
    }
    return dp[N];
}</code></pre><p> 아직 익숙한 풀이 방법이 아니라서 솔직히 100퍼센트 이해하지는 못했다.
 하지만 반복이 답이다!
 계속 비슷한 유형의 문제를 풀다보면 익숙해져서 이해도 완벽히 하게되는 날이 올 것이라 확신한다!😤</p>
<hr>
<p> 그런데 이 문제는 어렵지 않은 문제라서 그런지,,
 수학적으로 접근해서 풀어도 복잡도가 높지 않아서 그런지 두 풀이의 차이가 거의 없었다.
 <img src="https://velog.velcdn.com/images/dev_kiiim/post/dc87cdf6-7509-4bc1-b2b9-6f779f1ed6b7/image.PNG" alt=""></p>
<p>위에가 DP로 푼 결과이고, 아래가 수학적으로 푼 결과이다.</p>
<p>DP 알고리즘의 다른 문제들도 수학적으로 풀 수 있을 것 같으면 두가지 경우 모두 풀어보고 비교해봐야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[미해결][백준:2512] 예산 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%AF%B8%ED%95%B4%EA%B2%B0%EB%B0%B1%EC%A4%802512-%EC%98%88%EC%82%B0-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%AF%B8%ED%95%B4%EA%B2%B0%EB%B0%B1%EC%A4%802512-%EC%98%88%EC%82%B0-JAVA</guid>
            <pubDate>Thu, 22 Dec 2022 21:27:58 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[[백준:10815] 숫자 카드 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8010815-%EC%88%AB%EC%9E%90-%EC%B9%B4%EB%93%9C-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8010815-%EC%88%AB%EC%9E%90-%EC%B9%B4%EB%93%9C-JAVA</guid>
            <pubDate>Wed, 21 Dec 2022 18:06:45 GMT</pubDate>
            <description><![CDATA[<p>오늘도 어김없이 이분 탐색에 대한 문제를 풀어봤다.
어제 풀었던 숫자카드2와 비슷한 문제인데, 동일한 숫자가 있을때는 1을 없을때는 0을 출력하도록 하는 문제였다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) {
        int N;
        int M;
        StringBuilder sb = new StringBuilder();
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        int[] nArr = new int[N];
        for (int i = 0; i &lt; N; i++) {
            nArr[i] = sc.nextInt();
        }
        Arrays.sort(nArr);
        M = sc.nextInt();</p>
<pre><code>    for (int i = 0; i &lt; M; i++) {
        int m = sc.nextInt();
        int left = 0;
        int right = N - 1;
        while (left &lt;= right) {
            int mid = (left + right) / 2;
            if (nArr[mid] == m) {
                sb.append(1 + &quot; &quot;);
                break;
            }
            if (nArr[mid] &gt; m) { 
                right = mid - 1;
            } else {
                left = mid + 1;
            }
            if (left &gt; right) {
                sb.append(0 + &quot; &quot;);
                break;
            }
        }
    }
    System.out.println(sb.toString());
}</code></pre></blockquote>
<p>  어제 풀어 본 문제를 해결하지는 못했지만 같은 유형의 문제이기도 하고
  이분탐색으로 풀 수 있을 것 같은 마음에 금방 풀겠지,, 했지만,,,
  생각보다 너무 오랫동안 풀게 되었다.</p>
<p>  일단 위의 코드는 다른 분이 올려두신 코드를 참고하여 제출한 코드이다.
  내가 푼 코드는 왜인지 모르겠는데 1을 체크하지 않고 다 0으로만 출력이 되어서 다른 분들 코드를 검색하다가 내 코드와 제일 비슷한 코드를 참고하였다.</p>
<h4 id="미해결-코드">미해결 코드</h4>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
        int[] n = new int[N];
        StringTokenizer st = new StringTokenizer(bf.readLine(), &quot; &quot;);
        for (int i = 0; i &lt; N; i++) {
            n[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(n);
        int M = Integer.parseInt(bf.readLine());
        int[] m = new int[M];
        st = new StringTokenizer(bf.readLine(), &quot; &quot;);
        for (int i = 0; i &lt; M; i++) {
            m[i] = Integer.parseInt(st.nextToken());
        }</p>
<pre><code>    StringBuilder sb = new StringBuilder();</code></pre></blockquote>
<pre><code>    for(int i=0; i&lt;M; i++){
        int start = 0;
        int end = N-1;
        while(start &lt;= end){
            int mid = (start+end)/2;
            if(m[i] == n[mid]){
                sb.append(1 + &quot; &quot;);
                break;
            }
            if(m[i] &gt;= n[mid]){
                end = mid-1;
            }else{
                start = mid+1;
            }
            if (start &gt; end) {
                sb.append(0 + &quot; &quot;);
                break;
            }
        }
    }
    System.out.println(sb);
}</code></pre><p> 이 코드가 미해결 코드이다.
 어제 풀지못한 문제와 함께 이 문제도 다시 봐야할 것 같다,,😞</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[미해결][백준:10816] 숫자 카드 2 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%AF%B8%ED%95%B4%EA%B2%B0%EB%B0%B1%EC%A4%8010816-%EC%88%AB%EC%9E%90-%EC%B9%B4%EB%93%9C-2-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%AF%B8%ED%95%B4%EA%B2%B0%EB%B0%B1%EC%A4%8010816-%EC%88%AB%EC%9E%90-%EC%B9%B4%EB%93%9C-2-JAVA</guid>
            <pubDate>Tue, 20 Dec 2022 17:03:00 GMT</pubDate>
            <description><![CDATA[<p>어제 퇴근하고 깜빡 잠이 들었는데 아침까지 자버려서 어제는 공부를 안하게 돼버렸다,,
오늘은 이분탐색 두번째 문제를 풀어보았다.</p>
<p>N개의 정수 중에서 M개의 정수와 일치하는 정수가 몇개인지 확인하는 문제였다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
        int[] n = new int[N];
        StringTokenizer st = new StringTokenizer(bf.readLine(), &quot; &quot;);
        for(int i=0; i&lt;N; i++) {
            n[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(n);
        int M = Integer.parseInt(bf.readLine());
        int[] m = new int[M];
        st = new StringTokenizer(bf.readLine(), &quot; &quot;);
        for(int i=0; i&lt;M; i++){
            m[i] = Integer.parseInt(st.nextToken());
        }</p>
</blockquote>
<pre><code>    int[] out = new int[M];
    for(int i=0; i&lt;M; i++){
        int cnt = 0;
        for(int j=0; j&lt;N; j++){
            if(m[i] == n[j]){
                cnt++;
            }
        }
        out[i] = cnt;
    }</code></pre><blockquote>
</blockquote>
<pre><code>    for(int i=0; i&lt;M; i++){
        System.out.print(out[i] + &quot; &quot;);
    }
}</code></pre><p> 일단 생각나는 대로 푼 코드이다.
 이분탐색 알고리즘 문제를 찾아서 풀기 시작했는데,, 이분탐색을 쓰지 않는,,,,😂
 결국 시간초과로 틀렸는데 아무리 생각해도 이분탐색으로 어떻게 풀어야 할 지 감이 안와서
 결국 검색찬스를 사용했다.</p>
<p> 하지만 접근 방법조차 생각나지 않아서인지,,, 아직 이분탐색과 많이 낯설은 것인지,,
 다른 분들의 코드와 설명을 봐도 전혀,,,모르겠,,는,,,,,,🙁
 이분탐색,,, 너무 어렵다,, 아직 실버4일 뿐인데 너무 어려운 이분탐색.
 좀 더 공부해보고 다시 풀어보기로 하자
 꼭.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:1920] 수 찾기 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%801920-%EC%88%98-%EC%B0%BE%EA%B8%B0-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%801920-%EC%88%98-%EC%B0%BE%EA%B8%B0-JAVA</guid>
            <pubDate>Thu, 15 Dec 2022 19:36:20 GMT</pubDate>
            <description><![CDATA[<p>오늘 시험을 보고나니 이분탐색과 너무 서먹서먹한 것 같아서,,
이럼 안된다!!! 라는 생각에 문제를 풀어보았다😂</p>
<p>이분탐색 알고리즘에 해당하는 문제 중에서 나름 쉬운 난이도로 골라서 풀었는데,,
너무 서먹하다,,,,,,
N개의 정수중에서 정수X가 포함되어 있는지 확인하는 간단한 문제였다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
        int[] A = new int[N];
        StringTokenizer st = new StringTokenizer(bf.readLine(), &quot; &quot;);
        for(int i=0; i&lt;N; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(A);</p>
</blockquote>
<pre><code>    int M = Integer.parseInt(bf.readLine());
    int[] arr = new int[M];
    StringTokenizer st1 = new StringTokenizer(bf.readLine(), &quot; &quot;);
    for(int i=0; i&lt;M; i++) {
        arr[i] = Integer.parseInt(st1.nextToken());
    }</code></pre><blockquote>
</blockquote>
<pre><code>    for(int i=0; i&lt;M; i++){
        int answer = 0;
        int start = 0;
        int end = N-1;
        while (start &lt;= end){
            int mid = (start+end)/2;
            if(A[mid] == arr[i]){
                answer = 1;
            }
            if(A[mid]&gt;arr[i]){
                end = mid-1;
            }else{
                start = mid+1;
            }
        }
        System.out.println(answer);
    }
}</code></pre><p>  요즘 프로그래머스로 문제를 풀었더니
  백준에서 입력 값을 적어주는 부분마저 헷갈려서 구글선생님께 물어물어 풀어보았다,,
  코드 중에 반절이 입력에 대한 내용인데,, 좀 더 간단하고 좋은 코드로 바꿀 수 없을까하는 생각이 든다😅</p>
<p>  일단 이분탐색에 맞게 처음과 끝을 변수로 선언해주고, 가운데 값부터 비교하는 방법으로 구현해보았다.
  입력 값을 적어주고 정렬을 해두었기 때문에 중간 값과 비교하여 앞부분인지 뒷부분인지 판단하여 탐색 속도를 높이는,,, 느낌이다.</p>
<p>  이분탐색,, 문제를 풀어보며 좀 친해지도록 노력해야겠다😤</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 다리를 지나는 트럭 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%A4%EB%A6%AC%EB%A5%BC-%EC%A7%80%EB%82%98%EB%8A%94-%ED%8A%B8%EB%9F%AD-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%A4%EB%A6%AC%EB%A5%BC-%EC%A7%80%EB%82%98%EB%8A%94-%ED%8A%B8%EB%9F%AD-JAVA</guid>
            <pubDate>Thu, 15 Dec 2022 15:38:38 GMT</pubDate>
            <description><![CDATA[<p>오늘 풀어본 문제는 페어코딩을 하기위한 문제였지만,,
야근을 하는 바람에 혼자 풀어본 문제가 되었다,,😂</p>
<p>알고리즘 분류는 스택/큐 이며,
다리의 길이(bridge_length), 다리가 견딜 수 있는 무게(weight), 트럭의 무게(truck_weights)를 가지고 모든 트럭이 다리를 건너기까지 걸린 시간을 출력하는 문제였다.</p>
<p>내가 풀면서 살짝 설명이 부족하다고 생각했던 부분은 bridge_length의 1만큼 지날 때 시간이 1만큼 걸린다는 점이었다.
이 부분까지 확인하고 문제를 풀어보았다.</p>
<hr>
<blockquote>
<p>   public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        Queue<Integer> queue = new LinkedList&lt;&gt;();
        int sum = 0;</p>
</blockquote>
<pre><code>    for(int i=0; i&lt;truck_weights.length; i++) {
        while (true) {
            if(queue.isEmpty()){
                queue.offer(truck_weights[i]);
                answer++;
                sum += truck_weights[i];
                break;
            }else if(queue.size() == bridge_length){
                sum -= queue.poll();
            }else{
                if(sum + truck_weights[i] &gt; weight){
                    queue.offer(0);
                    answer++;
                }else{
                    queue.offer(truck_weights[i]);
                    answer++;
                    sum += truck_weights[i];
                    break;
                }
            }
        }
    }</code></pre><blockquote>
</blockquote>
<pre><code>    return answer + bridge_length;
}</code></pre><p>  처음에 생각했던 방법은 queue의 크기를 bridge_length로 지정해두고 구현하는 방법을 생각했었는데,,
  검색해보니 CircularQueue, EvictingQueue 를 이용해서 풀 수 있다고 하던데,, Apache Commons, Google Guava 와 같은 라이브러리? 를 사용해야 하는 방법이라 포기하고,
  큐의 크기를 지정해주는 클래스를 별도로 만들어서 사용하려 하였으나 생각대로 구현이 안돼서 포기하였다😂</p>
<p>  결국은 조건문을 이용해서 풀었는데
  큐를 다리라고 생각하고 큐가 비어있을 때 트럭을 넣고, 큐에 올라간 트럭의 무게를 int형 변수 sum으로 계산해서
  sum이 주어진 weight보다 큰 경우에는 0을 넣어서 다음 트럭이 올라가지 않도록 구현해주었다.
  추가로 큐의 크기가 bridge_length와 같을 땐, poll을 해주면서 그 값만큼 sum에서 빠질 수 있도록 구현해주었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 기능개발 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B8%B0%EB%8A%A5%EA%B0%9C%EB%B0%9C-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B8%B0%EB%8A%A5%EA%B0%9C%EB%B0%9C-JAVA</guid>
            <pubDate>Tue, 13 Dec 2022 15:21:22 GMT</pubDate>
            <description><![CDATA[<p>오늘 정리할 문제는 어제부터 풀다가 오늘 완료한 프로그래머스의 기능개발 문제이다.
알고리즘 분류는 스택/큐 문제이고 문제 자체를 이해하기에는 어려움은 없었다.</p>
<p>작업의 순서가 중요하기 때문에 큐를 이용하여 접근하였다.</p>
<hr>
<blockquote>
<p>   public static ArrayList<Integer> solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> answer = new ArrayList&lt;&gt;();
        Queue<Integer> queue = new LinkedList&lt;&gt;();
        int index = 0;</p>
</blockquote>
<pre><code>    for (int i = 0; i &lt; progresses.length; i++) {
        queue.offer(progresses[i]);
    }</code></pre><blockquote>
</blockquote>
<pre><code>    while(!queue.isEmpty()){
        int cnt = 0;
        for (int i = index; i &lt; speeds.length; i++) {
            queue.offer(queue.poll() + speeds[i]);
        }
        while (!queue.isEmpty() &amp;&amp; queue.peek() &gt;= 100) {
                if(queue.peek() &gt;= 100){
                    cnt++;
                    index++;
                    queue.poll();
                }
        }
        if(cnt != 0){
            answer.add(cnt);
        }
    }
    return answer;
}</code></pre><p>  일단 입력된 progresses를 큐에 넣어주고,
  배열의 길이만큼 반복해서 모든 progresses에 해당 인덱스의 speeds를 더할 수 있도록 해주었다.
  다음으로 첫번째 progresses가 100이 되었을 때 배포가 가능하므로 해당 부분을 구현해주었는데, 그 다음 progresses도 100이라면 같이 배포되어야 하고 배포되는 progresses의 갯수를 cnt로 카운트하여 출력할 수 있도록 구현하였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:16926] 배열 돌리기1 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8016926-%EB%B0%B0%EC%97%B4-%EB%8F%8C%EB%A6%AC%EA%B8%B01-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8016926-%EB%B0%B0%EC%97%B4-%EB%8F%8C%EB%A6%AC%EA%B8%B01-JAVA</guid>
            <pubDate>Tue, 13 Dec 2022 08:20:16 GMT</pubDate>
            <description><![CDATA[<p>지난 주에 풀어본 문제를 정리해보려고 한다.
페어코딩 스터디에서 풀어본 문제로 주어진 배열을 반시계방향으로 한칸씩 이동하는 문제였다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String[] input = bf.readLine().split(&quot; &quot;);
        int N = Integer.parseInt(input[0]);
        int M = Integer.parseInt(input[1]);
        int R = Integer.parseInt(input[2]);
        int[][] board = new int[N][M];
        for (int i = 0; i &lt; N; i++) {
            String[] st = bf.readLine().split(&quot; &quot;);
            for (int j = 0; j &lt; M; j++) {
                board[i][j] = Integer.parseInt(st[j]);
            }
        }</p>
</blockquote>
<pre><code>    int part = Math.min(N,M) / 2;
    for (int i = 0; i &lt; R; i++) {
        int[][] out = new int[N][M];
        for (int j = 0; j &lt; part; j++) {
            for (int k = j+1; k &lt; M-j; k++) {
                out[j][k-1] = board[j][k];
            }
            for (int l = j; l &lt; M-1-j ; l++) {
                out[N-1-j][l+1] = board[N-1-j][l];
            }
            for (int h = N-1-j; h &gt; j; h--) {
                out[h][j] = board[h-1][j];
            }
            for (int g = N-1-j; g &gt; j; g--) {
                out[g-1][M-1-j] = board[g][M-1-j];
            }
        }
        board = out.clone();
    }</code></pre><blockquote>
</blockquote>
<pre><code>    for (int i = 0; i &lt; N; i++) {
        for (int j = 0; j &lt; M; j++) {
            System.out.print(board[i][j] + &quot; &quot;);
        }
        System.out.println();
    }
}</code></pre><p> 풀이를 말로 설명하기 어렵지만, 설명을 적어보자면
 회전하는 구역(part)를 우선적으로 알아야하는데 주어진 이차원 배열을 표로 만들었을 때 가장 바깥에서 회전하는 구역부터 가장 안쪽의 구역까지 회전을 시켜야 하기 때문이다.
 그 다음으로 그 구역에서 상하좌우가 움직이는 방향이 모두 다르므로 각각의 방향마다 for문으로 구현을 해주었다.
 이 부분에서 for문의 조건부분과 실행부분에 맞는 값을 생각하는 것이 가장 어려웠다.</p>
<p> 과연 시간제한이 있다면 시간안에 풀어낼 수 있을지,, 걱정이다😅</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:1436] 영화감독 숌 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%801436-%EC%98%81%ED%99%94%EA%B0%90%EB%8F%85-%EC%88%8C-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%801436-%EC%98%81%ED%99%94%EA%B0%90%EB%8F%85-%EC%88%8C-JAVA</guid>
            <pubDate>Tue, 06 Dec 2022 15:48:55 GMT</pubDate>
            <description><![CDATA[<p>오늘의 문제는 브루트 포스 알고리즘의 영화감독 숌 문제이다.
영화 시리즈의 번호를 매기는 문제인데, 
1, 2, 3 ... 순서가 아닌 &#39;666&#39;을 포함해서 666, 1666, 2666 ... 순서로 정해진다.
여기서 주의깊게 봐야하는 부분은 5666의 다음이다.
666이 포함되지만 값이 작은 순서대로 정해지기 때문에 5666, 6660, 6661 ... 6669, 7666 ... 순서가 되어야 한다.</p>
<p>위의 내용을 체크하고 처음 생각했던 로직은
666을 하나의 문자(예를 들면 &#39;A&#39;)로 만들어서 1A, 2A, 3A ... 로 나열되도록 구현하려고 하였으나,,
자리 이동이 어려울 듯 하여 다른 방법을 생각해냈다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
        int version = 0;
        int n = 0;</p>
</blockquote>
<pre><code>    while(n != N){
        version++;
        if(String.valueOf(version).contains(&quot;666&quot;)){
            n++;
        }
    }
    System.out.println(version);
}</code></pre><p>영화 시리즈의 번호(version)를 1씩 증가시키면서
그 수에 &#39;666&#39;이 포함되어 있을 때, 입력값 N 과 비교할 변수 n을 1씩 증가시켜서
n이 N과 같아지는 순간의 version을 출력하는 방법으로 구현했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:7568] 덩치 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%807568-%EB%8D%A9%EC%B9%98-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%807568-%EB%8D%A9%EC%B9%98-JAVA</guid>
            <pubDate>Mon, 05 Dec 2022 15:20:08 GMT</pubDate>
            <description><![CDATA[<p>오늘 풀어 본 문제는 브루트 포스 알고리즘의 문제이다.
입력받는 사람(N명)의 몸무게와 키로 덩치의 등수를 출력하는 문제였고,
로직짜는 건 어렵지 않았다.</p>
<hr>
<blockquote>
<p>   BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
        int[][] list = new int[N][2];
        for(int i=0; i&lt;N; i++){
            String[] st = bf.readLine().split(&quot; &quot;);
            list[i][0] = Integer.parseInt(st[0]);
            list[i][1] = Integer.parseInt(st[1]);
        }</p>
</blockquote>
<pre><code>    int[] rank = new int[N];</code></pre><blockquote>
<pre><code>    for(int i=0; i&lt;N; i++){
        rank[i] = 1;
    }</code></pre></blockquote>
<pre><code>    for(int i=0; i&lt;N-1; i++){
        for(int j=i+1; j&lt;N; j++) {
            if (list[i][0] &gt; list[j][0] &amp;&amp; list[i][1] &gt; list[j][1]){
                rank[j]++;
            }else if(list[i][0] &lt; list[j][0] &amp;&amp; list[i][1] &lt; list[j][1]){
                rank[i]++;
            }
        }
    }
//        System.out.println(Arrays.toString(rank));
    for(int i=0; i&lt;N; i++){
        System.out.print(rank[i] + &quot; &quot;);
    }</code></pre><p>   2차원 배열로 N의 갯수만큼 몸무게와 키를 입력하고,
자신보다 덩치가 큰 경우를 카운트해서 등수를 나타내는 배열(rank)에 값을 저장하여 출력하도록 구현해보았다.</p>
<p>   백준을 풀다보면 입력값과 출력값을 예제와 동일하게 맞춰주어야 하는데,,
   이 부분을 자꾸 놓치는 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:2164] 카드2 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%802164-%EC%B9%B4%EB%93%9C2-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%802164-%EC%B9%B4%EB%93%9C2-JAVA</guid>
            <pubDate>Wed, 30 Nov 2022 13:34:49 GMT</pubDate>
            <description><![CDATA[<p>오늘 풀어본 문제는 이번주에 풀었던 다른 문제들보다 수월하게 풀렸다.</p>
<p>입력된 정수만큼의 수를 나열해서 맨 처음 수를 지우고, 두번째수는 맨 뒤로 보내는 것을 반복하여 마지막에 남는 최후의 숫자를 출력하는 문제였다.
나열된 수에서 가장 앞에 있는 정수에 대해 처리를 하는 문제이기 때문에 큐를 이용해서 구현하였다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int N = input.nextInt();
        Queue<Integer> queue = new LinkedList();</p>
</blockquote>
<pre><code>    for(int i=0; i&lt;N; i++){
        queue.add(i+1);
    }
    while(queue.size() != 1){
        queue.remove();
        queue.add(queue.peek());
        queue.remove();
    }
    System.out.println(queue.peek());
}</code></pre><p>}</p>
<p>1부터 입력된 정수(N)까지의 수를 queue에 넣어주고,
queue에 들어있는 값이 하나가 될 때까지 값을 삭제하고, 맨 뒤로 보내는 것을 반복하도록 구현하였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:2309] 일곱 난쟁이 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%802309-%EC%9D%BC%EA%B3%B1-%EB%82%9C%EC%9F%81%EC%9D%B4-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%802309-%EC%9D%BC%EA%B3%B1-%EB%82%9C%EC%9F%81%EC%9D%B4-JAVA</guid>
            <pubDate>Tue, 29 Nov 2022 18:59:16 GMT</pubDate>
            <description><![CDATA[<p>이 문제는 사실 어제(28일) 풀다가 자꾸 틀려서 오늘 다시 풀어보는 것이다,,😅</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] arr = new int[9];
        int[] out = new int[7];
        for(int i=0; i&lt;9; i++){
            arr[i] = input.nextInt();
        }</p>
</blockquote>
<pre><code>    for(int i=0; i&lt;3; i++){
        for(int j=1; j&lt;4; j++){
            for(int k=2; k&lt;5; k++){
                for(int l=3; l&lt;6; l++){
                    for(int m=4; m&lt;7; m++){
                        for(int n=5; n&lt;8; n++){
                            for(int o=6; o&lt;9; o++){
                                if(arr[i]+arr[j]+arr[k]+arr[l]+arr[m]+arr[n]+arr[o] == 100){
                                    out = new int[]{arr[i], arr[j], arr[k], arr[l], arr[m], arr[n], arr[o]};
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    Arrays.sort(out);
    System.out.println(Arrays.toString(out));
}</code></pre><p> 일단 어제 풀다 만 코드는 이렇다,,ㅎ
 브루트 포스로 분류되어 있어서 그냥 for문을 일곱번 돌리면서 풀어놨는데
 오늘 다시 생각해보니 for문을 이렇게 돌리면 중복되는 인덱스가 나오기때문에 틀렸던 것이었다.</p>
<hr>
<h4 id="20221129">#2022.11.29#</h4>
<blockquote>
<p>   public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] arr = new int[9];
        int[] out = new int[7];
        for(int i=0; i&lt;9; i++){
            arr[i] = input.nextInt();
        }</p>
<pre><code>    for(int i=0; i&lt;3; i++){
        for(int j=i+1; j&lt;4; j++){
            for(int k=j+1; k&lt;5; k++){
                for(int l=k+1; l&lt;6; l++){
                    for(int m=l+1; m&lt;7; m++){
                        for(int n=m+1; n&lt;8; n++){
                            for(int o=n+1; o&lt;9; o++){
                                if(arr[i]+arr[j]+arr[k]+arr[l]+arr[m]+arr[n]+arr[o] == 100){
                                    out = new int[]{arr[i], arr[j], arr[k], arr[l], arr[m], arr[n], arr[o]};
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    Arrays.sort(out);
    for(int i=0; i&lt;7; i++){
        System.out.println(out[i]);
    }
}</code></pre></blockquote>
<p> for문의 조건을 이전 for문의 초기값에서 +1한 값을 초기값으로 주었다.
 이렇게 하면 중복되는 인덱스없이 동작이 가능하다.</p>
<p> 사실 이렇게 풀기 전에 ArrayList로 푸는 방법도 생각했는데
 뭔가 될듯하면서 자꾸 안되는것이,,, 아주 서터레스다,,😞
 주말이나 시간날 때 더 풀어보고 추가로 기록할 수 있도록 해야겠다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[미해결][백준:24060] 알고리즘 수업 - 병합 정렬 1 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8024060-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%88%98%EC%97%85-%EB%B3%91%ED%95%A9-%EC%A0%95%EB%A0%AC-1-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8024060-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%88%98%EC%97%85-%EB%B3%91%ED%95%A9-%EC%A0%95%EB%A0%AC-1-JAVA</guid>
            <pubDate>Tue, 29 Nov 2022 17:53:39 GMT</pubDate>
            <description><![CDATA[<p>#2022.11.28#
재귀에 대한 문제로 어떤 걸 풀어볼까 하다가 시작하게 된 문제인데,
생각보다 잘 안풀려서 나중에 다시 도전해보기로 하고 기록해둔다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:11899] 괄호 끼워넣기 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8011899-%EA%B4%84%ED%98%B8-%EB%81%BC%EC%9B%8C%EB%84%A3%EA%B8%B0-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8011899-%EA%B4%84%ED%98%B8-%EB%81%BC%EC%9B%8C%EB%84%A3%EA%B8%B0-JAVA</guid>
            <pubDate>Tue, 29 Nov 2022 17:41:33 GMT</pubDate>
            <description><![CDATA[<p>오늘의 1일1코테는,
스터디에서 다른 분이 풀어오신 문제를 다시 풀어보았다.
문제 자체는 그렇게 어렵진 않은 것 같다.</p>
<p>입력값에서 반쪽짜리 괄호들을 하나의 괄호로 만들기 위해 필요한 괄호의 수(cnt)를 구하는 문제였다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Stack stack = new Stack();
        int cnt = 0;
        String input = br.readLine();</p>
</blockquote>
<pre><code>    for(int i=0; i&lt;input.length(); i++){
        if(input.charAt(i) == &#39;)&#39; &amp;&amp; stack.isEmpty()){
            cnt++;
            continue;
        }
        if(input.charAt(i) == &#39;(&#39;){
            stack.add(input.charAt(i));
        }else if(input.charAt(i) == &#39;)&#39; &amp;&amp; !stack.isEmpty()){
            stack.pop();
        }
    }
    if(!stack.isEmpty()){
        cnt += stack.size();
    }
    System.out.println(cnt);
}</code></pre><p> 입력받은 문자열이 처음부터 닫힌 괄호로 시작하는 경우는 무조건 열린 괄호를 추가해야 하기때문에 cnt를 증가시킨다.</p>
<p> 열린 괄호로 시작하는 경우에는 일단 스택에 저장해두고,
 이후에 닫힌 괄호가 나올 때 스택에서 삭제를 하기 위해 닫힌 괄호일때 AND로 스택이 비어있지 않은 경우까지 추가하여 구현하였다.
 이 부분을 구현하면서 처음부터 닫힌 괄호로 시작하는 경우에도 AND로 스택이 비어있는 경우를 추가해주었다.</p>
<p> 입력 문자열을 다 확인했으면 그 때 스택에 남아있는 값들은 닫힌 괄호를 못 만난 반쪽짜리 열린 괄호이므로 cnt에 추가해준다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:10799] 쇠막대기 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8010799-%EC%87%A0%EB%A7%89%EB%8C%80%EA%B8%B0-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8010799-%EC%87%A0%EB%A7%89%EB%8C%80%EA%B8%B0-JAVA</guid>
            <pubDate>Tue, 29 Nov 2022 17:23:36 GMT</pubDate>
            <description><![CDATA[<p>오늘 스터디에서 풀었던 문제는 알고리즘 스택에 대한 문제였다.
문제를 이해하는 것부터 시간이 꽤나 걸렸다,,😩</p>
<p>막대가 생기는 조건? 에 대해 이해하는게 굉장히 어려웠다.
처음에는 괄호 두개가 연속으로 있을때(&quot;((&quot; 혹은 &quot;))&quot;) 막대가 생기는 건가,, 싶었는데
그렇게 했을 때 예시로 보여주는 것과 다른 결과가 나왔다</p>
<p>회사에서 일을 하면서 계속 생각하고 생각한 결과,
그냥 앞에서부터 한자리씩 옮겨가며 확인하면서 괄호가 열린 부분이 막대의 시작부분이고, 
닫힌 괄호가 막대의 끝 부분이라고 생각하고 적용해보니 예시와 같은 결과가 나왔다!!
(단, 열린 괄호와 닫힌 괄호가 연속으로 나온 경우(&quot;()&quot;)는 레이저의 경우이므로 제외)</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String input = scan.next();
        int start = 0;
        int out = 0;</p>
</blockquote>
<pre><code>    for(int i=0; i&lt;input.length(); i++){
        if(input.charAt(i) == &#39;(&#39;){
            start++;
        }else {
            start--;
            if(input.charAt(i-1) == &#39;(&#39;){
                out += start;
            }else{
                out++;
            }
        }
    }
    System.out.println(out);
}</code></pre><p> 변수를 선언할 때 단순히 막대의 시작 부분이라고 생각해서 변수명을 start로 잡아두긴 했지만,,
 막대의 갯수? 라고 생각하면 편할 것 같다.</p>
<p> 입력된 문자열에서 자리를 하나씩 옮겨가며 괄호가 열려 있을때는 막대의 갯수(start)를 1씩 증가시켜주고,
 괄호가 닫혀 있을때는 막대의 갯수(start)를 1씩 감소시켜줬다.
 이렇게 구현하면 레이저의 경우에는 막대의 갯수(start)가 결국 0이 되므로 막대의 갯수를 체크할 수 있다.</p>
<p> 그리고 레이저가 생성되는 부분(&quot;()&quot;)에서는 잘라진 막대(out)이 생기므로 그 때의 막대의 갯수(start)를 더해주고,
 막대의 끝 부분에서는 잘라진 막대 하나가 생기는 것과 같으므로 out에 1씩 더해주면 완성이다,,!</p>
<hr>
<p> 그런데,, 여기에는 함정카드가 숨어있다.
 알고리즘 분류는 스택이었으나,, 스택없이 풀어버렸다,,,,,,,,,,ㅎ,,,,</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:25501] 재귀의 귀재 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8025501-%EC%9E%AC%EA%B7%80%EC%9D%98-%EA%B7%80%EC%9E%AC-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8025501-%EC%9E%AC%EA%B7%80%EC%9D%98-%EA%B7%80%EC%9E%AC-JAVA</guid>
            <pubDate>Sun, 27 Nov 2022 18:01:26 GMT</pubDate>
            <description><![CDATA[<p>오늘도 역시나 재귀함수에 대해 풀어보았다.
이제껏 풀었던 문제들과는 다르게 힌트가 있어서 비교적 쉽게 접근할 수 있었으나,,
쉽지는 않았다,,,,,</p>
<hr>
<blockquote>
<p>   static int cnt = 0;
    public static int recursion(String s, int l, int r){
        cnt++;
        if(l &gt;= r){
            return 1;
        }
        else if(s.charAt(l) != s.charAt(r)) return 0;
        else return recursion(s, l+1, r-1);
    }</p>
<pre><code>public static int isPalindrome(String s){
    return recursion(s, 0, s.length()-1);
}</code></pre></blockquote>
<pre><code>public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    int T = input.nextInt();
    for(int i=0; i&lt;T; i++) {
        cnt = 0;
        String S = input.next();
        System.out.println(isPalindrome(S) + &quot; &quot; + cnt);
    }
}</code></pre><p> 다른 부분은 힌트에서 다 구현되어 있었고,
 재귀함수가 몇 번 호출하는지만 추가 구현하면 되는 문제였다.
 그래서 recursion함수 안에서 카운트되도록 하면 되는데,
 main에서도 쓰여야하는 변수이기때문에 전역변수로 cnt를 선언해주고,
 recursion 함수에 cnt++를 추가하여 실행될때마다 카운트될 수 있도록 구현해주었다.
 ✌</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:10870] 피보나치 수 5 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8010870-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%88%98-5-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8010870-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%88%98-5-JAVA</guid>
            <pubDate>Sat, 26 Nov 2022 10:20:46 GMT</pubDate>
            <description><![CDATA[<p>오늘도 어제에 이어서 재귀함수 부분의 문제로 골라 풀어보았다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) {
        Scanner num = new Scanner(System.in);
        int input = num.nextInt();</p>
</blockquote>
<pre><code>    System.out.println(recursive(input));
}</code></pre><blockquote>
</blockquote>
<pre><code>public static int recursive(int input){
    int result = 0;
    int num1 = 0;
    int num2 = 1;</code></pre><blockquote>
</blockquote>
<pre><code>    if(input == 0){
        result = 0;
    }else if(input == 1){
        result = 1;
    }else{
        for(int i=2; i&lt;=input; i++){
            result = num1 + num2;
            num1 = num2;
            num2 = result;
        }
    }
    return result;
}</code></pre><p> 피보나치 수열은 처음 시작하는 두 수의 예외처리만 고려하면, 어렵지 않다고 생각한다.
 생각보다 쉽게 풀어서 한 문제를 더 풀어봐야하나 고민이 되지만,,,
 진도를 따라가기 위해서 여기까지 마무리하고 강의를 들으러 가본다,,😅</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:10872] 팩토리얼 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8010872-%ED%8C%A9%ED%86%A0%EB%A6%AC%EC%96%BC-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%8010872-%ED%8C%A9%ED%86%A0%EB%A6%AC%EC%96%BC-JAVA</guid>
            <pubDate>Fri, 25 Nov 2022 15:26:20 GMT</pubDate>
            <description><![CDATA[<p>어제 본 테스트의 피드백에 대한 스터디를 진행하다가 내가 재귀함수에 대한 숙련도가 너무 부족하다는 생각이 들어서 오늘은 재귀함수 부분에서 한문제 풀어보았다.</p>
<p>for문으로 간단하게 해결할 수도 있지만 재귀함수의 숙련도를 높이기 위해 
팩토리얼을 재귀함수로 풀어보았다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) {
        Scanner num = new Scanner(System.in);
        int input = num.nextInt();</p>
</blockquote>
<pre><code>    System.out.println(Factorial(input));
}</code></pre><blockquote>
</blockquote>
<pre><code>public static int Factorial(int input){
    if(input &lt;= 1){
        return 1;
    }else {
        return Factorial(input - 1) * input;
    }
}</code></pre><p> 티어가 낮은만큼 간단한 문제였지만,,
 재귀,,, 아직 너무 헷갈린다,,
 주말에 더 여러 유형의 재귀함수 문제를 풀어봐야겠다,,😤</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준:2231] 분해합 (JAVA)]]></title>
            <link>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%802231%EB%B2%88-%EB%B6%84%ED%95%B4%ED%95%A9-JAVA</link>
            <guid>https://velog.io/@dev_kiiim/%EB%B0%B1%EC%A4%802231%EB%B2%88-%EB%B6%84%ED%95%B4%ED%95%A9-JAVA</guid>
            <pubDate>Thu, 24 Nov 2022 20:21:16 GMT</pubDate>
            <description><![CDATA[<p>오늘은 시험이 있어서 시험 다 보고 문제를 풀었다.</p>
<p>오늘 풀어본 문제는 어제와 같은 브루트 포스에 있는 2231번 분해합이라는 문제이다.
문제를 본 직후에는 좀 어렵나,, 생각했는데
조금만 생각을 해보니 어떻게 풀어야할지 감이 왔다.</p>
<p>생성자를 구하는 문제였고, 반복문으로 0에서부터 돌려보면서 조건에 맞는 생성자를 찾으면 될 것 같다고 생각이 들었지만
역시나 한번에 통과하지는 못했다,,🤣</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) {
        Scanner num = new Scanner(System.in);
        int input = num.nextInt();
        int M = 0;
        int mM = 0;
        int sum = 0;</p>
</blockquote>
<pre><code>    for(int i=0; i&lt;input; i++) {
        while (mM != 0) {
            sum += mM % 10;
            mM /= 10;
        }</code></pre><blockquote>
</blockquote>
<pre><code>        if(sum + M == input){
            break;
        }
    }
    System.out.println(M);
}</code></pre><p> 처음 제출한 코드이다.
 사용되는 변수가 많다보니까 변수에 대한 역할이 100% 정리되지 않은 상태였고,
 그 상태로 &#39;이거겠지~&#39;하는 생각으로 코드를 짜다보니 실수가 나왔다.</p>
<hr>
<blockquote>
<p>   public static void main(String[] args) {
        Scanner num = new Scanner(System.in);
        int input = num.nextInt();
        int M = 0;
        int sum = 0;</p>
</blockquote>
<pre><code>    for(int i=0; i&lt;input; i++) {
        int number = i;
        sum = 0;</code></pre><blockquote>
</blockquote>
<pre><code>        while (number!= 0) {
            sum += number % 10;
            number /= 10;
        }</code></pre><blockquote>
</blockquote>
<pre><code>        if(sum + i == input){
            M = i;
            break;
        }
    }
    System.out.println(M);
}</code></pre><p> 사실 지금도 집중하지 않으면 왜 이렇게 했지,,? 하는 생각이 들기도 한다,,,ㅎ
 조건에 맞는 수를 찾기위해 0에서부터 세어나갈때 그 수(i)를 나머지를 구하거나, 나누기를 한다던가 하면서 계산에 들어갈 변수를 하나 지정해서 넣어두고, i는 고정되어 있도록 해야하는 점.
 내가 코드를 짜면서 안일하게 생각했던 부분이다.</p>
<p> 이런 사소한 실수를 줄일 수 있도록 더 집중해서 풀어야겠다!!!!</p>
]]></description>
        </item>
    </channel>
</rss>