기타/회고

[회고] 알고리즘 공부 방법 (프론트엔드와 파이썬)

알고리즘 스터디를 병행하며 백준 플래티넘을 찍게 되었습니다. 

이를 계기로 알고리즘 공부 방법, 느낀 점, 후회한 점 등에 대해 정리하고자 합니다.

그리고 프론트엔드가 파이썬으로 코테를 보는 것에 대한 제 생각을 작게나마 남깁니다.

(개인적인 생각이기 때문에 충분히 의견이 다를 수 있음을 이해해주셨으면 합니다.)

 

21.09.16 플래티넘5 달성

 

 


알고리즘 사이트

알고리즘 사이트는 백준, SWEA, 프로그래머스, 코드포스 등 많은 선택지가 존재합니다.

저희 알고리즘 스터디는 초반엔 백준(solved.ac), 이후엔 프로그래머스를 병행했습니다.

 

 

💡 백준 (solved.ac)

백준은 입문 단계, 특정 유형 연습 단계에 적합합니다.

특히 solved.ac는 백준의 문제가 단계별, 유형별로 잘 정리되어 있어 스터디에 활용하기 좋습니다.

  • 많은 문제를 가지고 있습니다.
  • 유형별 문제가 잘 정리되어 있습니다.
  • 그룹 기능을 통해 스터디를 관리하기 편합니다.
  • 구글에 문제 풀이가 많습니다.

 

💡 프로그래머스

프로그래머스는 심화 단계, 실전 연습 단계에 적합합니다.

  • 많은 IT 기업에서 프로그래머스 웹 IDE를 통해 코테를 봅니다.
  • 양질의 구현 문제가 많습니다. (카카오, 데브매칭..)

 

🔎 알고리즘 관련 유튜브 영상 추천

두 영상이 알고리즘을 입문하는 데에 많은 도움을 주었습니다.

 

 


티어 시스템의 장단점

백준과 Solved.ac에서 제공하는 티어 시스템은 게이미피케이션을 활용하고 있습니다.

특히 게임을 좋아하는 저에겐 이 티어 시스템이 제법 동기부여가 됐습니다.

하지만 자칫 티어 시스템에 주객전도될 수 있어서 가볍게 활용하는 것이 좋다고 생각합니다.

 

 

💡 티어보다 중요한 것은 코테!

티어 시스템은 스터디원의 실력 파악, 문제 수준 파악에도 도움이 됩니다.

하지만 티어를 목적으로 알고리즘 공부를 하면 안 됩니다. (제가 그랬습니다..)

코테에 나오는 문제들은 주로 실버 ~ 골드 난이도의 구현 문제들이기 때문입니다.

 

물론 알고리즘에 흥미가 있거나, 전공생이라면 심화 개념도 중요합니다.

자료구조와 컴퓨팅 사고에 큰 도움이 되기 때문입니다.

 

하지만 취준생이라면 유형에 익숙해진 뒤 구현 문제를 많이 푸는 것을 추천합니다.

작성할 코드량이 길고, 여러 개념들이 섞여있는 그러한 문제들 말입니다.

주로 프로그래머스에 이런 유형의 문제들이 많습니다.

문제를 푸는 데에 오래 걸리지만 가장 실력이 늘 수 있는 학습 방법이라 생각합니다.

 

 


프론트엔드인데 파이썬으로 코테를 볼까요?

이에 대한 제 답변은 상황에 따라 다르다입니다.

다만 장기적으로는 자바스크립트로 코딩 테스트를 치르는 것이 맞다고 생각합니다.

 

 

💡 이런 분들은 파이썬을

만약 본인이 코테 경험이 없고 자바스크립트에 익숙하지 않다면 파이썬을 추천합니다.

  • 파이썬은 문법은 쉽고 간결합니다.
  • 짧은 시간으로 코테에 아웃풋을 내기 좋습니다.
  • 구글에 파이썬 풀이가 많기 때문입니다.
  • 자바스크립트는 코테에 특화된 언어가 아닙니다. (제약이 많습니다.)

 

💡 이런 분들은 자바스크립트를

프론트엔드로 목표가 확고하면서도 여유가 있다면 자바스크립트를 추천합니다.

  • 자바스크립트의 문법에 익숙해질 수 있습니다.
  • 프론트엔드 개발에 간접적으로 도움이 됩니다.
  • 파이썬과 개념이 혼동될 여지가 줄어들게 됩니다.
  • 일부 기업의 프론트 직군 코테는 자바스크립트로 언어를 한정합니다.

 


막힐 때 풀이를 보는 것이 좋을까요?

문제를 풀다가 막혔을 때 너무 오랜 시간 고민하지 않는 것이 좋습니다.

다만 머리로는 로직을 알겠지만 코드로 표현이 어려운 상황이라면 조금 더 고민해봅시다!

이 상황을 극복했을 때 실력이 가장 많이 는다고 생각합니다.

 

저는 쉽게 맞힌 문제들도 구글에 있는 다른 많은 풀이들을 참고합니다.

한 문제에 대한 다양한 풀이를 보면서 코드 리뷰의 경험을 쌓을 수 있기 때문입니다.

스터디의 장점 중 하나도 여러 풀이들을 볼 수 있다는 점이기도 합니다. 😊

 

물론 초반엔 직접 풀지 못한 아쉬움과 좌절감 때문에 풀이를 보는 것이 힘들 수 있습니다.

하지만 그 개념의 비슷한 문제들은 충분히 많이 존재하니까 걱정할 필요 없습니다.

 

그렇게 일정량의 문제를 풀게 됐을 때 문제들이 비슷하다는 느낌을 받을 수 있습니다.

그러니 그전까지는 많은 풀이들을 참고하며 다양한 풀이 방법에 익숙해지는 것을 추천합니다.

 

 


알고리즘은 좋은 연습공간

저는 알고리즘이 다양한 개발 방법론을 연습하기 좋은 환경이라 생각합니다.

문제 풀이에 신선함을 느낄 수 있고 어려운 개념을 조금씩 연습하기에도 좋습니다.

 

💡 이런 것들을 연습할 수 있습니다.

특히 스터디원과 서로 개발 방법론들을 연습하면 더욱 효과적입니다.

  • 클린 코드 (좋은 변수명, 적절한 함수 분리, 효율적인 로직, 코드 컨벤션..)
  • Git (커밋, 컨벤션, 브랜치, 워크플로우..)
  • 함수형 프로그래밍 (함수형 사고, 순수 함수..)
  • 객체지향 프로그래밍 (객체지향적 사고, 객체 설계, SOLID..)
  • TDD (예제로 제공되는 TC 활용, 직접 히든 TC 찾는 연습)

이 외에도 수많은 개념을 연습하기 좋습니다.

 


현재의 저는 오랫동안 알고리즘을 쉬고 프론트엔드 공부에 집중하고 있습니다.

그러다 보니 그때 자신 있게 풀었던 문제들이 지금은 어려울 때가 많습니다. 😕

하지만 이 당시 열심히 공부했던 자료구조나 알고리즘은 지금도 웹 개발에서 큰 도움을 주고 있습니다.

 

이 글을 보는 분들도 시행착오를 최대한 줄여서 짧은 기간에 최고의 아웃풋을 냈으면 좋겠습니다.