1 분 소요

Section2 시작

Section2를 시작하면서 본격적으로 알고리즘에 대해 공부를 시작했다. 나는 웹 개발 중심으로 해봤어서 알고리즘에 대해서는 아직 익숙하지 않다. 작년 2학기 때 알고리즘 수업을 듣긴 했지만, c언어로 배웠고 나한텐 어려운 수업이었다. 차라리 네트워크 수업이 조금 더 나에겐 쉬웠다. 하지만 익숙하지 않아서 어렵게 느꼈다고 생각한다. 익숙해지면 잘할 수 있다고 믿는다!

재귀 함수를 공부를 하면서

재귀함수를 공부를 하면서 자기 자신을 호출하여 반복적으로 함수를 실행 시키는 로직인 것은 알고 있었다. 다른 코드와는 달리 이상하게 눈에 안띄어서 감이 잡히질 않는다. 알고리즘 수업을 들을때도 그랬다. 반복적으로 호출을 하면서 콜스택에 쌓이게 되는데, 어떤 것이 먼저 실행이 되는가가 잘 감이 안잡힌다. 그림을 그려가며 이해를 하면 잘 이해가 가지만, 언제까지 그림을 그려가며 이해를 할 수 없는 노릇이라, 생각 한 것이 디버깅을 이용하자였다. 평소에는 디버깅을 잘 사용하질 않는데, 디버깅을 사용하니 직관적으로 볼 수 있어서 이해를 하는데 도움이 되었다.

본격적인 알고리즘 공부

재귀함수에서 많이 나오는 알고리즘 문제를 찾아보니, 팩토리얼, 피보나치 수열, 하노이 탑과 같은 문제들이 있었다. 팩토리얼과 피보나치 수열은 구하는 방식을 알고 있지만, 이를 재귀함수로 풀게 된다면 인풋 값이 조금만 높아져도 시간 복잡도가 급격하게 증가하여 시간이 초과하여 풀 수 없게된다. 그래서 효율적으로 구할 수 있는 방법을 또한 찾아보았다. 알고리즘 시간에 시간 복잡도에 대해서 수업을 듣긴 들었었는데, for문과 재귀함수의 시간 복잡도의 차이가 문뜩 생각이 났다. 하노이 탑은 생소한 문제여서 검색을 해보았는데, 우리가 어렸을 때 했었던 기둥에서 크기별로 옮기는 게임과 비슷하여 이해하는데는 쉬웠다. 하지만 알고리즘을 어떻게 코드로 구현하는가 이 부분은 아직까진 힘들다. 시간이 될 때마다 이번주에 배운 재귀함수와 관련된 알고리즘을 조금씩 풀며 익숙하게 해야하고, 디버깅을 하면서 재귀함수와 친해질 수 있도록 해야겠다.

댓글남기기