주간 개발 일지

3월 2주차

noh-yj 2021. 3. 14. 18:42

2주차에 접어들면서 자료구조와 알고리즘을 학습하기 시작했다 아마 3주차까지는 알고리즘 내용을 다룰 것 같으며 이후에도 알고리즘에 대해서 꾸준히 학습할 예정이다.

처음 알고리즘을 공부하기 시작했을때는 솔직히 많이 어색했다. 어떤 상황에서 조건문을 쓸지 반복문을 쓸지 등 감이 안잡혔기 때문이다.

알고리즘은 정답이 없다는 생각을 했고 막연히 생각하는 것 보다 직접 쓰면서 해결방안을 찾아보자고 생각을 했으며 그걸 행동으로 옮겼을때 좋은 결과를 얻을 수 있었다. 나만의 공부방법을 찾은 기분이였다.

나만의 방식으로 일주일간 열심히 학습했으며, 금요일 테스트에서 좋은 결과를 얻었다. 문제는 이분탐색, 큐, 정렬에 대한 문제였는데 3문제 모두 무난하게 풀 수 있었다. 이후 가장 자신있는 문제를 풀이 영상으로 만들어 유튜브 업로드를 했는데 처음 해봤지만 나름 재미가 있었다.

 

백준 2164번

1. 시간복잡도와 공간복잡도

문제를 푸는데 있어서 이 두 부분을 고려할 필요가 있다. 그중 시간복잡도가 중요한데 백준에서는 제한된 시간이 있으며 시간을 초과할 경우 정답처리를 해주지 않는다. 쉽게 말해 반복문을 많이 사용을 한다면 시간을 초과하는 경우가 종종 나오곤 한다. 시간 초과에 대해 이번주에 기억 나는 문제는 백준 2869번 이다. 처음에는 반복문을 돌려 정상에 올라갔을 때를 계산을 했었는데 시간 초과가 나왔다. 입력하는데 있어서는 출력값이 잘 나왔지만 10억이라는 수치를 입력했을 때 시간초과가 났을 꺼라는 생각을 했고 다른 방법이 있을까 고민을 했으며 식을 이용해 해결을 해야겠다고 생각을 했다. 공식을 만들고 코드를 작성했더니 시간초과문제를 해결했으며 더욱 간결한 코드가 나왔다. 물론 아직까진 완벽하게 시간복잡도를 고려할 정도는 아니다. 하지만 위 상황 이후 문제에 접근할때는 제한시간을 확인하고 짧다 생각하면(ex 0.5초, 추가시간 없음) 접근할때 반복문을 사용하지 않고 해결할 수 있을까? 이런 생각을 한다.

 

2. 학습 방법 및 향후 계획

나는 알고리즘 공부할때 노트에 적어가면서 진행을 하며 최대 2시간에서 3시간까지 한문제를 갖고 고민을 한다. 고민 후 풀리지 않으면 구글검색을 통해 코드를 확인하고 풀어보고 다음날 또는 오전에 풀었으면 오후에 다시 풀어보는 방법을 이용하고 있다. 물론 이 방법보다 더 효과적인 방법이 있을 수 있지만. 개인마다 취향이 있을꺼라 생각하며 나는 이 방식이 잘 맞다고 생각한다.

그래도 일주일 동안 학습 변화가 보여 만족한다. 기본적인 문제(쉬운 문제)도 3시간씩 붙잡고 씨름을 했는데 일주일이 지난 지금은 그 시간이 많이 줄어서 속도가 붙은거 같다.

알고리즘은 다양한 문제를 푸는게 중요할꺼 같다는 생각도 든다. 따라서 단순히 2주차, 3주차때 끝나는게 아니라 항해를 마무리하고서도 꾸준히 풀어나갈 예정이다. 이후 잘하게 된다면 따로 알고리즘 카테고리도 추가해서 업로드할까도 생각중이다. (하반기쯤..??)

 

 

알고리즘 학습 방법