Today
-
Yesterday
-
Total
-
  • 💡코딩테스트 준비를 위한 효과적인 알고리즘 공부 방법
    | 자료구조 & 알고리즘/알고리즘 2023. 10. 21. 10:44

    알고리즘 프로그래밍

    코딩 테스트는 개발자 진로를 희망하는 학생, 취준생, 직장인들이 부딪히는 난관입니다.

    저 또한 비전공자로 취준을 시작해서, 수많은 코딩테스트를 치러 왔고, 마침내 최종합격하여 개발자로서 일하고 있습니다. 제 경험을 바탕으로 "코딩테스트 준비를 위한 효과적인 알고리즘 공부 방법"을 정리해볼까 합니다.

     

    언어 선택

    프로그래밍 언어는 아주 다양합니다. C, C++, Java, Python, JavaScript, Kotlin, Go, C#, Rust, Dart, Swift, Objective-C, 엄랭(ㅋㅋ), 등등...코딩테스트를 학습하려면 먼저 어떤 언어로 코딩할건지 정해야겠죠.

     

    저는 취준할 때 조금 미련하게 했습니다. C, Python, Kotlin, Go, Java 다섯 가지 언어로 코딩테스트를 대비했습니다.그냥 빨리 푸는게 목적이면 Python, Runtime 제약이 중요할 것 같으면 C, 각 직무별로 내 노력을 보여주려면 그때그때 Kotlin, Go, Java를 맞춰서 써야지~ 하는 생각으로요.

     

    결론부터 말씀드리면 코딩테스트 언어는 하나, 정말 많아야 둘 정도로 대비하시면 충분합니다.

    엄랭 이런건 안되고...

    추천 1순위는 C++, Python

    추천 2순위는 C, Java

    나머지는 3순위입니다.

     

    C, C++, Java, Python은 코딩테스트 언어로서 범용성이 강하므로 추천드립니다.

    요즘 대부분의 기업은 엄랭을 제외하고 상기한 모든 언어로 코딩테스트를 지원합니다.

    "대부분"이라는 말인즉슨 지원하지 않는 기업도 있습니다.

    대표적으로 삼성이 있죠.. 삼성은 C, C++, Java, Python으로만 코딩테스트 응시가 가능합니다.

     

    코딩테스트 C++, Python을 지원하지 않는 개발회사는 본 적이 없습니다.

    실제로 C++, Python이 코딩테스트 응시자 수 1, 2위를 다투며, 그만큼 레퍼런스 코드도 많으니 참고하여 학습하시기 용이하다는 장점이 있습니다.

     

    본인이 희망하는 직무가 C나 Java를 사용하고, C++이나 Python을 따로 학습할 여유가 없으시면 C나 Java로도 충분합니다.

    다만, C는 위의 두 언어에 비해 기본 지원되는 라이브러리도 적고, 아무리 숙련되어도 요상한 컴파일 에러에 자주 부딪히게 됩니다. 코드 길이도 길어지게 됩니다.

    Java는 코드 길이가 너무 길어집니다. public static void main(string args[])............으음

     

    else

    만약 C, C++, Java, Python이 다 맘에 안들고, 나만의 독특한 면모를 보여주고 싶다. 꼭 가고싶은 기업과 특정 직무가 정해져 있고 그 직무에서는 이 언어를 쓰더라 하시면 그 언어로 하셔도 말리진 않겠습니다.. ㅎㅎ

     

    아, 참고로 언어별로 기준 runtime이 달라서, 저처럼 런타임때문에 C, Python을 동시에 공부하는건 바보입니다. 다만 컴퓨터 구동원리에 대해 Deep Dive할 목적으로 C를 공부하시는건 추천합니다.

     

    결론

    코딩테스트는 문제 해결력을 보기 위한 시험으로, 문제를 푸는게 1순위입니다.

    런타임, 원하는 직무의 언어 등은 고려 대상이 아닙니다.

    문제를 잘 풀기 위한 프로그래밍 언어로는 C++, Python을 추천드립니다. 개인적으로는 Python을 추천합니다.

    C++은 "왜 안 돼?"가 많은 반면, Python은 "왜 돼?"가 많기 때문입니다.

    현업에서는 후자가 훨씬 더 무섭지만... 코딩 테스트는 일단 되고 봐야 하기 때문이죠.

    Learning Curve도 파이썬이 훨씬 학습이 용이하구요.

     

    알고리즘 학습

    알고리즘을 공부하는 방법은 다양하며, 효과적인 학습을 위해 알고리즘 개념을 이해하고 예제를 풀어보는 것이 중요합니다. 이를 통해 실제 문제 해결 능력을 키우며, 문제 해결 과정에서 발생할 수 있는 오류와 어려움을 극복하는 방법을 배울 수 있습니다.

     

    알고리즘 도서

    각자의 수준에 맞게 도서를 활용해 알고리즘 유형을 먼저 익히는 방법이 있습니다.

    (추천 도서) Do it! 자료구조와 함께 배우는 알고리즘 입문

    초보자용 입문서로 추천합니다. 이외에도 Doit! 시리즈는 정말 다양한 개발 분야에 대해 다루고 있는데요. 어떤 개발 분야든 Doit! 시리즈는 입문서로 추천드릴만 하다고 생각합니다.

    (추천도서) 알고리즘 문제해결전략

    중급자용 도서로 추천합니다. 컴공 친구들 집에 가면 이 책이 항상 책장에 있더라구요?

    읽어봤는데 정말 좋은 책입니다. 수능 공부할때, 수학 문제 풀 때 보면 나는 공식대로 풀어서 한참 걸렸는데, 특이한 방식으로(본질에 접근해서) 암산으로 몇 초만에 문제 푸는 애들 있죠?

    이 책이 딱 그런 애들 사고방식을 다루고 있습니다.

    다만 BFS, DFS, DP, 그래프 등 기본 개념은 다 안다는 전제 하에 설명하는 느낌입니다. 기본 개념에 대한 설명이 불친절해서, 초보자용으로는 비추천합니다.

     

    온라인 강의

    온라인 강의를 활용하여 학습할 수도 있습니다. 도서를 통해 구체적인 알고리즘 개념을 체계적으로 습득하고, 강의를 통해 전문가의 지도를 받아 실습 과정에서 생기는 질문과 의문을 해결할 수 있습니다. 요즘에는 다양한 온라인 학습 자료가 많이 제공되고 있으므로, 관심 있는 주제에 대해 검색해보세요.

     

    실제로 풀어보기

    실제 문제를 해결해보는 게 가장 중요합니다. 알고리즘 문제 풀이 사이트나 대회에 참여하여 다양한 문제를 풀면 실력을 향상시킬 수 있습니다.

    문제 풀이 사이트
    • 백준 (https://www.acmicpc.net/) : 문제 수가 아주 많고, 국내에서 가장 유명한 알고리즘 문제 사이트입니다. solved.ac 연동을 통해 각 문제의 난이도 티어, 내 티어를 높여가는 재미가 있습니다.
    • 프로그래머스 (https://programmers.co.kr/) : 실제 코딩테스트 환경을 경험해보기 좋습니다. 1년에 네댓번정도 취업연계 코딩테스트도 자체적으로 열리니, 프로그래머스에서 문제를 꾸준히 푼다면 그런 취업연계에서 포트폴리오로써 활용도 가능합니다. SQL 문제들도 있어서 은행권 대비하시는 분들의 북마크에는 필수로 들어가는 사이트입니다. 문제 수가 많지는 않고, 테스트 케이스가 엉망인 경우가 가끔 있다는 게 단점입니다.
    • 알고스팟 (https://algospot.com/) : 위에서 추천한 중급자용 도서인 알고리즘 문해전의 저자가 운영하는 알고리즘 문제 사이트입니다. 책처럼 문제들도 난이도가 꽤 있는 편입니다.

    이 밖에도 많은데, 개인적으로 백준 + 프로그래머스로 충분하다고 생각합니다. 코테가 쉬운 회사는 백준 실버 3~4 정도 레벨로, 코테가 어려운 회사는 백준 플레 4 ~ 실버 1 정도 레벨로 출제됩니다. 프로그래머스는 같은 티어 대비 백준보다 문제가 어려운 편입니다.

     

    커뮤니티

    어려운 부분이나 잘못된 접근 방식에 대해 다른 사람들과 토론하고 의견을 교환하는 것도 도움이 될 수 있습니다. OKKY 등의 온라인 커뮤니티나 스터디 그룹에 참여하여 다른 사람들과 함께 문제를 푸는 것도 좋은 방법입니다.

     

    알고리즘 유형

    위의 도서나 알고리즘 사이트, 온라인 강의들을 봤다면 알겠지만, 알고리즘 문제도 수능 수학의 미분, 적분, 통계, 기하, ...처럼 정해진 유형들이 있습니다. 알고리즘 유형은 정말 엄청나게 많지만 코딩테스트에서 출제될 정도의 레벨은 한정적입니다.

    • 기본 입/출력
    • 자료구조 (스택, 큐, 그래프, 트리 등)
    • DFS, BFS
    • 다이나믹 프로그래밍
    • 수학
    • 정렬
    • 탐색 (이진 탐색, 완전 탐색 등)
    • 그리디 알고리즘
    • 분할 정복
    • 구간합
    • 최소 비용
    • 문자열 처리
    • 비트마스킹

    대충 생각나는건 이정도...인데, 이정도 할 줄 알면 대부분의 코딩테스트에는 모두 적용할 수 있습니다.

    이런 유형들에 대해 풀이 공식을 정리해두면 유용합니다.

     

    목표 설정

    알고리즘을 공부할 때 단기적인 목표와 장기적인 목표를 설정하는 것도 중요합니다. 단기적인 목표는 특정 알고리즘을 학습하고 예제를 풀어보는 것일 수 있으며, 장기적인 목표는 다양한 알고리즘을 종합적으로 이해하고 다양한 문제에 적용할 수 있는 능력을 키우는 것일 수 있습니다. 목표를 설정하고 학습 계획을 세우는 것은 학습 동기를 유지하고 체계적인 학습을 할 수 있도록 도와줍니다.

     

    마지막으로, 알고리즘을 공부하는 것은 단순히 단기적인 목표를 달성하는 것뿐만이 아닙니다. 알고리즘은 계속해서 발전하고 새로운 기법이 나오기 때문에, 최신 트렌드를 따라가고 새로운 알고리즘을 학습하는 것도 중요합니다. 지속적인 학습과 개발을 통해 알고리즘에 대한 이해와 실력을 향상시킬 수 있습니다.

     

    알고리즘을 공부하는 방법은 다양하며, 어떤 방법이 가장 효과적인지는 개인에 따라 다를 수 있습니다. 따라서 여러 가지 방법을 시도해보고 자신에게 가장 적합한 방법을 찾아서 공부해보세요. 학습에 있어 중요한 것은 꾸준한 노력과 열정입니다. 어려움을 겪더라도 포기하지 말고 계속 도전하는 마인드를 갖고 화이팅하세요!

     

    상기 추천 도서 링크는 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

    링크를 타고 들어가셔도 도서 가격은 동일하며, 정말 좋은 도서로만 추천하였습니다.

sangilyoon.dev@gmail.com