오늘의 생각
새로운 섹션이 시작되고 코딩이 더 어려워졌다.
논리 구조가 더 복잡해졌고, 기존의 개념들을 온전히 이해하고 있지 않으면 문제를 푸는데 많은 어려움이 생기게 되었다.
오전에 새롭게 시작된 데일리 코딩부터 순탄치 않았다. 정수를 요소로 갖는 배열을 입력받아 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. 주어진 문제를 비슷한 구조의 더 작은 문제로 나누고 지나치게 중첩된 반복문의 정리를 통해 가독성을 높일 수 있습니다. 또한, 반복문의 중첩 횟수를 예측하기 어려운 경우에 사용할 수 있습니다.
'개발자 일기 > 일일회고 (TIL)' 카테고리의 다른 글
부트캠프 43일차 (UI/UX) (0) | 2022.10.25 |
---|---|
부트캠프 42일차 (JSON.stringify) (0) | 2022.10.21 |
부트캠프 40일차 (Section 2 회고) (0) | 2022.10.19 |
부트캠프 36일차 (Web Server 기초) (0) | 2022.10.13 |
부트캠프 34, 35일차 (클라이언트 Ajax 요청) (2) | 2022.10.13 |
댓글