본문 바로가기
개발자 일기/일일회고 (TIL)

부트캠프 41일차 (재귀)

by MS_developer 2022. 10. 20.

오늘의 생각

새로운 섹션이 시작되고 코딩이 더 어려워졌다.

 

논리 구조가 더 복잡해졌고, 기존의 개념들을 온전히 이해하고 있지 않으면 문제를 푸는데 많은 어려움이 생기게 되었다.

 

오전에 새롭게 시작된 데일리 코딩부터 순탄치 않았다. 정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴하는 기능을 구현해야 했는데, 생각처럼 쉽게 풀리고 있지 않아 골머리를 앓고 있다. 다행히 내일까지 시간이 더 있기 때문에 고민을 해보고 문제를 풀어볼 생각이다. 

 

재귀의 경우 설명이 꽤나 심플했지만 그렇기 때문에 더더욱 두려웠다.

 

다행히 함께한 페어 분이 문제를 잘 정리해주셨고 서로 소통을 원활하게 진행해 문제들을 하나하나 해결해 나갈 수 있었다. 

 

가장 어려웠던 문제 중 하나는 임의의 배열을 입력받아 조건에 맞는 문자열이 있는지 여부를 확인하고 알려주는 기능을 구현하는 것이었다. 임의의 배열 요소 중에는 배열을 요소로 갖는 배열도 있어 각 요소를 깊숙히 탐색해야 했다.

 

function searchStr(arr, str) {
  // 의사 코드 작성
  let head = giftBox[0]
  let tail = giftBox.slice(1)

  // base case: 빈 배열 또는 빈 문자열을 입력받은 경우, false를 리턴
  if (head가 str과 일치하면) { return true }

  // recursive case: head가 배열인 경우도 포함
  if (head가 배열이면) {
    searchStr(tail, str)
  }
}

 

기존에 배웠던 대로 의사코드를 작성해 보았다. 먼저 배열을 앞과 뒤로 분류할 수 있게 배열을 첫 번재 요소를 기준으로 나눈 후, base case와 recursive case에 대해 생각해 보았다.

 

생각보다 코드 구현이 잘 안됐는데, 알고보니 주의 사항을 주의 깊게 읽지 않았기 때문이었다.

 

 

for, while 반복문 사용이 가능했고, 실제로 for 반복문을 활용하니 훨씬 수월하게 문제를 해결할 수 있었다. 코드를  꼼꼼이 잘 읽어봐야 겠다고 다짐했다.

 

 


오늘의 키워드

재귀recursion 함수, base case, recursive case

 


오늘의 학습내용

  • 재귀 함수의 정의와 이해
  • 재귀 함수의 활용
  • 재귀적 사고를 통한 재귀 함수 구성

 


어려웠던 keyword / 활용한 질문

 

Q. 왜 재귀 함수를 써야 하나요?

 

A. 주어진 문제를 비슷한 구조의 더 작은 문제로 나누고 지나치게 중첩된 반복문의 정리를 통해 가독성을 높일 수 있습니다. 또한, 반복문의 중첩 횟수를 예측하기 어려운 경우에 사용할 수 있습니다.

댓글