inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

인프런 워밍업 클럽 스터디 2기 - CS 2주차 발자국

김주현
1

강의 수강

운영체제

일주일 간의 학습했던 내용

 

자료구조와 알고리즘

일주일 간의 학습했던 내용

회고

이해가 한번에 안 되는 부분은 강의를 여러 번 돌려보고 개인적으로 다른 정보도 찾아보면서 공부했습니다.

개인 공부 시간을 늘렸다는 것에 칭찬하고 싶습니다.

늦게 퇴근하는 날이 있었어서, 2~3일치 강의를 몰아서 수강했습니다 😢

그래서 그런지 조금 급하게 강의를 수강한 것 같아서 아쉽습니다.

스케줄에 밀리지 않고 강의를 수강할 수 있도록 보완하고 싶습니다.

 

미션

 

미션을 해결한 과정

재귀함수를 만드는 문제에서 두 가지 고민을 했습니다.

  1. 어떻게 기저조건을 만들지

     

처음에는 n == 1일 때만 고려해서 기저조건을 만들었습니다.

if (n == 1) { return 1; }

하지만 문제에 0부터 입력 n까지 의 홀수의 합을 구하는 문제였기 때문에 0 이하의 수를 입력 받게 되는 경우도 고려해야 한다고 생각했습니다. 그래서 아래 기저 조건을 추가했습니다.

if (n <= 0) { return 0; }

  1. 어떻게 메모리 사용을 줄일지

처음에는 n이 짝수일 경우에는 바로 sumOdd(n -1) 을 호출해서 홀수의 합만 구할 수 있도록 만들었습니다.

function sumOdd(n) {

// 기저조건 생략

if (n % 2 == 0) { return sumOdd(n - 1); }

return n + sumOdd(n - 1);

}

하지만 n이 짝수일 경우는 계산 결과에 포함되어 있지 않기 때문에 불필요하게 콜스택 메모리를 많이 사용할 수 있다고 생각했습니다.

그래서 최초 호출 시 n이 짝수로 들어왔을 때에만, sumOdd(n - 1)을 호출해서 파라미터를 홀수로 만들고

그 뒤로는 sumOdd(n - 2)를 호출해서 파라미터가 홀수인 경우만 고려할 수 있도록 수정했습니다.

function sumOdd(n) {

// 기저조건 생략

if (n % 2 == 0) { return sumOdd(n - 1); }

return n + sumOdd(n - 2); // 이 부분을 수정

}

그 외의 문제들은 강의 내용을 토대로 해결했습니다!

회고

미션 해결을 하면서 학습했던 내용을 복습하게 되는 것 같아서 좋았습니다.

특히 재귀 함수를 만드는 문제는 고민할 포인트가 다양해서 재밌었습니다 😄

실무에서도 코드를 작성할 때 성능을 고려해서 작성하는 습관을 들여야겠다는 생각을 하게 되었습니다.

다음 미션이 기대가 되는 이번주 미션이었습니다 👍

답변 0