알고리즘 초보가 알고리즘 공부하는 방법 with 백준

알고리즘 공부를 시작한지도 4개월 정도가 지난 것 같다.
처음에 백준 사이트를 어떻게 이용하는지 solved.ac가 뭔지..
leetcode는 뭐고 프로그래머스는 뭔지 정말 혼란스러웠다.

공부방법만 계속 구글에서 검색하다가 도저히 모르겠어서 그냥 부딪혀보자 하고 백준 브론즈 5부터 시작했다.
처음에 모든 문제를 다 풀면 다음 단계로 넘어가야지! 라고 생각하고 브론즈 5 의 모든 문제를 풀었는데, 다국어 문제도 많고 몇 명 풀지 않은 문제들도 많고.. 제일 문제는 문제가 너무 많아서 다음 단계를 올라가는 게 시간이 너무 오래 걸렸다는 점이다.
그래서 과감히 계획을 포기하고 푼 사람 수로 정렬해서 10,000명 이상이 푼 문제들만 풀어보기 시작했다. 그리고 지금까지 하루에 1~2문제는 꾸준히 풀려고 노력했고, 현재는 브론즈 1문제를 10,000명 넘게 푼 문제들까지 다 풀었다.

여기까지 하고나니까 대충 어떤 식으로 알고리즘을 공부해야하는지 가닥이 보이는 것 같다. 그래도 실버1로 올라가야할지 말지, 프로그래머스로 넘어가야할지 .. 이런 고민이 계속 따라왔다.
여러 오픈카톡방에서 눈팅도 하고, 국비 학원 동기들과 고민도 공유했는데도 뚜렷한 고민 해결이 되지 않았었는데 오늘 알고리즘 오픈카톡방에서 우연히 어떤 분께서 고민에 대한 명쾌한 해답을 주셔서 그 기회에 지금까지 깨달은 것들을 정리하려고 한다.

일단 아래 글을 읽는 알고리즘 중수 이상분은 패스해주시길…

만약 내 블로그를 어떻게 우연히 검색해서 (서치도 잘 안걸리는 블로그인데 신기하게) 들어오는 알고리즘을 공부하고 싶은데 막막했던 비전공자 분들이 계시다면 도움이 되었으면 좋겠다!

1. 백준, 리트코드, 프로그래머스 어떤걸 사용해야 할까?

이건 정답이 따로 없는 것 같다. 프로그래머스는 처음에 시도해봤는데 문제가 너무 어려워서 포기했다. 지금 풀면 풀 수 있을 것 같긴 한데 아직 시도는 못해봤다.
백준은 입출력까지 코드로 구현? 해야해서 조금 더 귀찮은 편이고, 백준 사이트로 코딩 테스트를 보는 곳도 없다는 단점이 있지만 문제 수가 많고 많은 사람들이 풀어서 코드를 검색해서 보기 좋다는 장점이 있다. 그리고 워낙 대중적이여서 나는 우선 시작이나 하자 라는 마음으로 시작했다.
어쨌든 결론은 프로그래머스로 IDE를 사용하지 않는 코딩테스트 환경을 경험해보고 백준으로 많은 문제를 풀어보는 것이 좋다는 것이다.
나같은 경우도 현재는 백준에서 시작했지만, 어느정도 풀고나면 프로그래머스도 병행하여 문제를 풀 예정이다.

2. 어떤 코드가 효율적인지 모르겠어요.

지금도 고민하고 있는 문제 중 하나인데, 결론은 이걸 고민하면서 시간을 쓰는 것 보다 그냥 더 어려운 문제를 풀면서 알고리즘 문제 실력을 키우면 나중에 알고리즘 문제가 경험으로 분류되면서 시간복잡도도 외워진다고 한다. (들었다)
그래서 지금은 반복문 개수 정도나 보면서 시간초과 안되게 노력만 하는 중이다.

3. 백준에서 어떤 문제를 풀어야 될지 모르겠어요.

백준에서 solved.ac로 넘어가면 문제 > CLASS 가 있는데 여기에 들어가면 CLASS가 1부터 8까지 있고 에센셜문제와 일반 문제로 나뉘어져 있다.
여기서 에센셜 문제를 다 풀고 일반 문제를 다 풀고 다음 단계로 넘어가면 된다. (고 들었다)
나도 삽질을 많이해서 단계별 문제를 풀고있었는데, 아무리 검색해도 CLASS 문제를 풀라는 사람은 못봤던 것 같다..
정말 좋은 정보를 공유받았다.
이제부터 CLASS 문제로 공부를 다시 시작해야겠다!

4. 한 문제를 풀릴때까지 붙잡고 있기?

개인적으로 문제가 안풀려서 답을 보면 문제한테 졌다는 생각에 굉장히 우울하고 짜증나고 공부하기 싫었다.
그러나 알고리즘 공부는 절대적으로 시간안에 안풀리면 답지를 무조건 보자.
30분~ 1시간 정도로 시간제한을 두고 그 안에 못풀면 그냥 못푼거라고 생각하고 답을 본다. 그리고 정답코드에서 몰랐던 부분을 공부한다.
이렇게 반복하다보면 결국 경험이 쌓여서 문제를 보면 아 이거 내가 풀었던 문제랑 비슷한거 같은데 하면서 비슷하게 풀면서 실력이 오른다.

5. 완전 초보인데 시작을 어떻게 해야하지?

내 경우가 진짜 알고리즘 1도 몰랐던 경우인데, 지금 생각해보니깐 알고리즘 공부 아무것도 아니다.
그냥 문제 풀고 맞았다? 다른 사람 코드 보고 비슷하면 패스 더 잘푼거같으면 그 코드 공부한다.
틀렸다? 그러면 다른 사람 코드보고 공부한다.
이게 끝이다 ㅋㅋㅋ
너무 겁먹지말고 우선 시작하면 답이 보일 것이다!!

주변에 개발자 친구가 없는 비전공자들은 정보와의 싸움에서 밀릴 수 밖에 없는데 다들 열심히해서 좋은 개발자가 되기를!!!

댓글남기기