21Days) 자료구조/알고리즘(1) - 재귀, 연습문제 풀이

nacSeo (낙서)·2022년 11월 17일
0

◉ 학습목표

1. 재귀 함수에 대해 이해하고 연습문제를 통해 재귀적 사고를 가질 수 있다.
  1. 재귀함수

⦿ 학습내용

☞ 재귀함수

✔︎ 재귀(recursion) : 문제를 동일한 구조의 작은 문제로 나누어, 작은 문제부터 해결함으로써 전체 문제를 해결하는 방법
✔︎ 재귀함수 : 자기 자신을 호출하는 함수

☞ 재귀함수의 장∙단점

✔︎ 장점
✓ 불필요하게 여러 개의 반복문을 사용하지 않기 때문에, 코드가 간결해지고 수정이 용이해짐
✓ 변수를 여러 개 사용할 필요 ❌
✔︎ 단점
✓ 반복문과 달리, 코드의 흐름을 직관적으로 파악하기 어려움
✓ 반복하며 메서드를 호출하면서 지역변수, 매개변수, 반환값 모두 process stack에 저장 → 반복문에 비해 비교적 많은 메모리 소모💥
✓ 메서드를 호출하고 메서드가 종료된 이후, 복귀를 위한 컨텍스트 스위칭 비용 발생💥

☞ 재귀함수 사용 조건

✔︎ 사용 조건
✓ 문제의 크기를 점점 작은 크기로 쪼갤 수 있어야 함
✓ 재귀 호출이 종료되는 시점이 존재해야 함

  1. 재귀 연습문제

☞ 재귀 연습문제 (with Pair)

✔︎ 사용했던 풀이 방법
⭐️ 문제가 주어졌을 때, 모든 문제를 더 이상 쪼갤 수 없는 경우작은 단위로 쪼갤 수 있는 경우를 나누어 생각했다. 더 이상 쪼갤 수 없는 경우일 때는 재귀가 끝까지 돌아 더 이상 돌 곳이 없을 때 리턴으로 빠져나갈 수 있는 식을 만들었고, 작은 단위로 쪼갤 수 있는 경우는 재귀를 계속 돌면서 점점 쪼갤 수 없을 때까지 줄여나가는 과정을 식으로 만들었다.

⭐️ 이후, 배열 관련 문제에서는 앞서 쪼갤 수 있는 것과 없는 것을 나눈 것에 더불어 headtail을 나누어 head는 결국 남아서 빠져나올 리턴 값으로, tail은 계속 쪼개어져 더 이상 쪼갤 수 없는 경우까지 가는 식으로 설정하였다. (말로 풀어내려니 엄청 어려운 😅) Arrays.copyOfRange()이라는 메서드를 통해 배열을 복사하고, System.arraycopy()라는 메서드를 활용하여 새로운 배열을 만든 곳에 넣어주기도 하며 문제들을 풀어나갔다.

◉ 느낀 점

☞ Section2의 처음 맞이하는 파트라 그런지 막 그렇게까진 어렵다는 느낌을 받지 못했다! 물론 문제를 풀 때 기존 생각과 다른 재귀라는 이론을 적용시켜 사용해야 했기 때문에 처음엔 당황하기도 했지만 ^^,, 그래도 좋은 페어분을 만나 같이 으쌰으쌰하며 풀어나가다 보니 어쩔 땐 한 번만에 슉슉 풀리기도 했다! (이 때 기분이 최고 😇)
그래도 나름 오늘 내용들을 잘 소화한 것 같아 뿌듯하다 :) 상으로 오늘 저녁은 피자를 시켜먹겠다 😋 내일은 연습문제보다 무서운 과제가 하루 종일 예정되어 있다 ,, 이미 쫄았지만 쫄지 말고 맞붙어보자!!! (페어도 있고 ☺️)

◉ 내일의 키워드

・ 재귀 JSON 과제
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글