본문 바로가기
Study in Bootcamp/회고

Day 21 TIL(Daily Coding, 재귀함수)

by Bhinney 2022. 7. 21.

2022. 07.21


1. 오늘의 학습

• Daily Coding

• 재귀함수

• 재귀함수 문제풀이 (페어)


2. 학습 목표

• 재귀적으로 사고하는 법을 터득합니다.

        ☝🏻 문제를 잘게 쪼개어 사고하는 법을 활용할 수 있다. ⭕️

             : 이론에서는 대충 느낌을 알았다면, 문제를 풀면서 익숙해졌다. 

               문제를 풀면서 하나씩 예시를 넣어서 써보고, 그것을 나눠보면서 식을 찾아갔다.

package Recursion;

import java.util.*;

public class Example {
    public static void main(String[] args) {
        int[] arr = {5,6,7,8,9,10};
        System.out.println("배열의 길이는 : " + arrLength(arr));
    }
    public static int arrLength(int[] arr){
    /*
    배열의 길이 리턴
    {1,2,3,4,5} >> 5
    arrLength == arr[5]
              == 1 + (4개의 길이의 배열)
              == 1 + 1 + (3개의 길이의 배열)
              == 1 + 1 + 1 + (2개의 길이의 배열)
              == 1 + 1 + 1 + 1 + (1개의 길이의 배열)
              == 1 + 1 + 1 + 1 + 1 + (0개의 길이의 배열)
              == 1 + 1 + 1 + 1 + 1 + 0
      arr.length = 1 + (길이 - 1 개의 배열)
    */

        //Base Case
        if(arr.length == 0) return 0;

        // 새 배열 복사
        int[] num = Arrays.copyOfRange(arr,1,arr.length);

        return 1 + arrLength(num);
    }
}

/* 출력
배열의 길이는 : 6
*/

        ✌🏻 메서드 자신의 재귀적 호출을 설명할 수 있다. 🔺

            : 왜 재귀 함수를 쓰는지, 재귀 함수의 장점은 무엇인지까지는 설명할 수 있다.

              그 이상은 아직 조금 더 공부해야할 것 같다.

 

        🤟🏻 탈출 조건을 설정할 수 있다.⭕️

             : 직접 예제를 만드는 것은 모르겠지만,     

              주어진 문제에 조건이 존재한다면 Base Case를 만드는 것은 알 수 있다. 


3. 돌아보기

1️⃣ Daily Coding

: 첫 데일리 코딩이라 엄청 긴장했는데, 저번 주에 배웠던 HashMap에 관련한 문제였다. 그래서 다행히도 그렇게 어렵지는 않게 풀었던 것 같다. 아무래도 처음이라 그런 것 같다. 데일리 코딩에 목표가 있다면, 수도코드를 좀 잘 작성해 보는 것이라고 할 수 있겠다. 왜냐하면, 수도코드를 잘 적어놔야 나중에 복습하기에 편하기 때문이다.  

 

2️⃣ 재귀 함수

:  어제 미리 다음날 캘린더를 보고 미리 조금 찾아봤던 내용이었다. 그래서 처음 개념은 어렵지 않게 읽어갈 수 있었다. 하지만 예제 코드를 intelliJ로 돌려보면서 계속 에러가 나서 당황스러웠다. 정말 한 삼십분은 그러고 있었던 것 같다.  

'finished with non-zero exit value 1'

이 에러에 관련한 정보를 엄청 찾아보고, 빌드를 intelliJ로 바꿔서 돌려봐도 에러는 사라지지 않았고,  아래의 사진처럼 오류가 반복이 되었다. 다행히 예제의 오류였고, Gugudan count++이 아닌 ++count로 바꾸니 정상적으로 작동이 되었다. 빌드를 Gradle로 다시 바꿨을 때에도 잘 돌아갔다.

다른 예제들도 따라하면서 직접 돌려보니, 이해가 되었다.

  

3️⃣ 재귀함수 문제풀이 (페어)

: 생각보다 문제가 굉장히 어려웠다. 특히 9번과 12번 문제가 어려웠던 것 같다. 재귀 함수로 배열을 복사해서 리턴시키는 문제였다. 차분히 수도 코드를 하나씩 적어가면서 풀었다. 어찌저찌 풀긴 했는데, 중간에 배열 복사하는 부분이 재귀함수로 돌아가는게 이해가 안되어 임의의 배열을 대입해서 노트로 하나씩 풀었다. (차마 휘갈기며 쓴거라 올릴 수는 없는...) 다행히도 이해가 되었던 부분. 처음에 어려웠던 9번과 12번, 그리고 10번 문제를 intelliJ로 돌려보면서 다시 살펴보았다. 복습할 때에도 차분히 하나씩 써봐야겠다. 아직도 intelliJ와 친해지는 중..(intelliJ 너란 녀석... 미안하다 아직 낯가려서..) 그리고 Stream으로 풀어볼 수 있는 것들은 다시 풀어보자.

 

🔥 오늘의 마무리

: 사실 새로운 섹션에 들어가다보니 또 긴장을 엄청 했다. 왜냐하면, 이번주 내내 정말 머리를 깼기 때문이다. 다행히도 아직은 초반이라 따라가기 엄청 버겁지 않았다. 그래도 이해하는 데에는 시간이 걸리다보니, 미리 보거나 일찍 일어나서 로그인을 하는 게 좋을 것 같다. 미리 캘린더를 보고 정보도 찾아보고! 

새로운 섹션에 오면서 블로그를 돌아보니, 굉장히 정신이 없다. 아무래도 개념 정리를 하는 파트와 하루를 돌아보는 파트를 나눠야 할 것 같다. (블로그 대공사 시작...😂) 아무래도 처음쓰다보니 아직 정리하는 것과 어떻게 하면 내가 효율적으로 블로그를 보면서 복습하고 찾아가고 할지 알아가는 단계인 것 같다.(시작한지 한달이나 되었는데....에효) 깃헙도 다시 정리해야지. 내 속도대로 너무 서두르지 말고 걸어가보자. 아자아자💪🏻

 

이건 뭔가 재귀함수이미지를 보다보니 생각나는 짤이라 가져와봄

댓글