포테이토 주식회사_IT 개발블로그
알고리즘 대기업 코딩 테스트 공부방법 본문
삼성, 카카오, 네이버 등의 IT기업에 개발 분야로 취직을 하려면 알고리즘 공부는 필수인데요.
학부생 과정에서 여러 개발 프로젝트나 과제를 통해 나름대로 코딩 공부를 하였다고 해도, 알고리즘 문제를 푸는 것과 실제 개발은 다를 수가 있어요. 즉 하고 있는 프로젝트가 있고 꾸준히 개발공부를 하고 있더라도 코딩테스트를 보려면 따로 알고리즘 공부를 해야한다는 말이 되겠죠..
코딩 테스트에 빈번히 등장하는 그리디 알고리즘의 경우도 실무에서는 잘 쓰이지 않는 알고리즘이라고 합니다. 그만큼 알고리즘과 실제 개발에는 약간의 괴리가 있지만 그래도 개발자라면, 알고리즘 공부를 통해 코딩테스트도 준비하고 논리적인 사고를 키우는 것도 좋은 방법인 것 같습니다.
코딩테스트 준비 알고리즘 공부 방법
1. Python, Java, C/C++ 등의 자신이 자신 있는 언어의 기본문법 공부
2. 기초 알고리즘 문제 100제 풀기
코드업 문제 -> 코드포스, 백준 문제 순서로 풀기
3. 그리디 알고리즘 먼저 공부하고 관련된 문제 풀기
4. 탐색(BFS, DFS) 공부하고 관련 문제 풀기
5. 기본 동적 프로그래밍 공부하고 관련 문제 풀기
이후 시간이 있다면 그래프 이론, 중급이나 고급 동적프로그래밍, 문자열 풀기.
알고리즘 문제를 풀 수 있는 사이트
1.
2.
3.
4.
코드포스의 블루레벨 정도의 실력이라면 삼성SW역량 테스트 B형정도 취득가능하다고 합니다.
삼성은 백준 사이트에 기출문제가 있고,
카카오 기출문제는 프로그래머스에 있다고 합니다.
코딩 테스트, 코딩 인터뷰 스트레스 받죠. 공부를 하면 되지만 아무래도 효율적으로 하고 싶으니 검색부터 합니다. '코딩 테스트 공부 방법'ㅎㅎ 이제는 안하지만 저도 참 열심히 검색을 했었죠. 저는 문제풀이도 재밌지만 프로젝트하는 것을 더 좋아하는데 그래도 저 높으신 분들께 '제가 이러이런걸 했어요오!!'라고 신나게 보여주기 전에 일단 이 장벽을 넘어야죠. 이제는 대충 코테가 무엇을 원하는지, 어느정도를 요하는지 감은 오는 것 같습니다. 스마트하신 분들께서 이미 정리해주신 다양한 자료들을 정리해보도록 하겠습니다.
안경잡이 개발자 (Youtube)
공부 사이트
- 기초 : 코드업(알고리즘을 처음 접하는 학생이 쉽게 시작할 수 있는 기초 100제)
- 그 이후: 백준, 코드포스 등의 사이트에서 문제를 풀어보는 것이 좋음
- 삼성전자 역량 테스트 기출은 백준에서 전부 확인 가능
- 카카오 코딩 테스트는 프로그래머스 사이트에 게시되어 있음
유형 공부/풀이 순서
그리디 알고리즘 → 탐색(삼성전자의 경우 탐색 문제 빈출) → 기본 동적 프로그래밍 →그래프 이론 →중/고급 동적 프로그래밍 & 문자열
(연구직/대학원이 목표라면 고급 다이나믹 프로그래밍까지 공부해야함)
어느 정도 실력이 필요한걸까?
- 코드포스의 블루 레벨 정도 (그리디, 동적 프로그래밍, 탐색만 잘해도 블루 달성 가능)
- 삼성 역량 테스트 B형
- 일반적인 대기업 공채는 문제 수와 관계없이, 절반 정도를 맞추면 합격하는 추세
뒤에 언어 추천 등 더 많이 얘기 하시는데 저는 일단 C++로 밀어붙일거라서 궁금하시거나 직접 보고 싶으신 분들은 여기로 가셔서 보시면 좋을 것 같습니다. 안경잡이 개발자님은 블로그도 운영하시니 여기로 가보시면 티스토리 확인하실 수 있습니다.
박트리 (Tistory)
출처 : 박트리님 티스토리
일단 채워야 할 기초
- 배경지식 : 코딩 문법, 시/공간 복잡도 분석
- 자료구조 : 배열, 트리, 그래프, 힙, BST, 스택, 큐
- 알고리즘 : DFS, BFS, 정렬, 백트래킹, DP, 분할정복, 최단거리
문제풀이
- 시간 측정하기 : 이해하는데 걸린 시간, 풀이 생각해내는데 걸린 시간, 코딩 시간, 디버깅 시간 기록해서 부족한 부분을 중점적으로 노력
- 카카오의 경우 비교적 높은 배경지식을 요하는 경우가 있고, 문자열 파싱 문제가 꽤 많이 나온다.
- BOJ(백준)보다 SWEA에서 난이도 3~5 문제를 많이 풀자
- 구현/디버깅 시간이 너무 오래걸린다면 : 자주 한 구현 실수 정리하고 대략적인 순서도를 그려보자. 자주 사용하는 부분을 함수로 템플릿화 하는 연습하기
공부를 해도 안된다면?
- 배경지식이 있는데도 문제 접근 조차 못한다면 컴퓨팅적 사고력이 부족한 상황
- 이해 예시1 : 컴퓨터가 1초에 1억번의 연산을 할 수 있으므로 어떤 시간 복잡도 까지는 가능하겠다
- 이해 예시2 : 메모리 제한이 몇이므로 배열을 어느정도까지는 할당 할 수 있겠다
- 이해 예시3 : 재귀함수를 트리형태로 어떻게 진입하고 무엇을 하고 무엇을 리턴하고 종료되는지 그려짐
- 이해 예시4 : 완전탐색시 상태공간을 정의할 수 있고, 현재 상태에서 다음 상태로 갈 수 있는 방법이 몇 개인지 이해하고 최종 종료 상태와 최초 진입 상태가 무엇인지 이해하고 그림으로 표현
바보팀1 (Tistory)
출처 : qkqhxla1님 티스토리
일단, 준비물 : 긴 시간 공부할 끈기와 시간
1. 기초적인 프로그래밍 공부
- 대상 : 공부도 안하고 성적도 그저그런 전공 학부생 || 이제 흥미를 가지는 비전공자
- 언어데 대한 기본서 한 권 정도 사서 읽고 기본적인 프로그래밍 틀을 잡는다
- 기본적인 문제 많이 풀기 (기초적인 프로그래밍 100제 등의 문제지)
- 생각을 프로그래밍으로 옮기는 아주 기초적인 단계
2. 기본적인 프로그래밍, 자료구조, 기초 알고리즘 공부.
- 대상 : 1번은 완료. 기본적인 프로그래밍 베이스를 쌓고 싶은 && 전공자인데 학부생 (2학년) 수준의 문제 복습하고 싶은
- 적당한 자료구조 책 한 권 사서 정독하고 본인의 언어로 개념 알 때까지 구현
- 알고리즘 책 한 권 사서 정독(대회 준비용 아님)
- 가장 인기 있는 부분 : 정렬
- 정리 해두고 시간복잡도 같은 것들은 면접 전에 한 번 보기 / 코테에는 요즘 잘 안나옴
- 백준 입성 단계 축하 : 이곳에 있는 기본적인 문제들을 풀며 백준 사용법 익히기
- 어려운 문제 말고(동적 계획법, 백트래킹, 네트워크 플로우 등) 쉬운 것 풀기(큐 사용, 문자열 등)
3. 기본기 응용, 알고리즘 공부 시작.
- 대상 : 열심히 학교수업따라와서 기본 탄탄한 학부 3,4학년생 || 학부생 수준보다 더 높은 수준의 공부를 시작하려는 사람
- 기본적인 자료구조, 알고리즘 구현이 가능하고 필요 따라 바꿔 쓸 수 있는 능력이 되어 있음
- 대부분 2,3단계 : 면접에서 손코딩으로 구현 해야 하는 정도의 난이도
- 3단계 정도부터 : 코딩 테스트에 나오는 난이도
- 백준에서 문제집 카테고리 → 공개 카테고리 → 끝 페이지 : 쉬워 보이는 카테고리 골라 풀기 (어려운건 여전히 노터치)
- 2단계와 비슷하지만 단순 구현 이상으로 생각을 더 해야 함 : 예시
- 생각을 시작 : ex) set자료구조가 빠르다는것을 알고 활용하기 시작하는 정도, 피보나치 수열을 반복문으로 구현하는 정도.)
- 프로그램을 효율적으로 돌게 하기위한 로직을 조금씩 생각하는 진정한 알고리즘 공부 입문
4. 취업대비 알고리즘 공부 시작
- 대상 : 자료구조 적당히 구현 다 할줄 알고, 기본적인 함수들과 다른 자료구조 지식들을 섞어서 프로그램을 자유롭게 만들수 있는 정도 || 어떤 경우에 어떤 자료구조가 효과적인지 아는 정도 || 대기업 코딩테스트 노리고 공부 시작하는 사람.
- 이제 난이도 대폭 상승. 중견 기업 이상 준비한다면 여기 까지 와야 하고, 이 단계도 빡세게 할 만하다 싶으면 높은 IT 기업(네이버, 카카오 등)도 가능
- 취업용 알고리즘 책 구입 : 종만북
- 종만북을 읽으면서 챕터 1 읽고, 가볍게 구현
- ex. 챕터 7이 [분할 정복]이라면 읽고, 방법론 등을 이해하고 구현 후 백준 카테고리에서 분할 정복 카테고리 풀 수 있는 만큼 풀기. 못 풀겠으면 구글/네이버 검색해서 답 찾고 이해
- 오랫동안 생각 해보는 것도 중요하지만 처음에는 어떻게 짜야 할지 모를 때가 많음. 문제와 답을 보고 이해하며 생각하는 것도 중요
- 하지만 결국은 스스로 코드를 짤 줄 알아야 함
- 종만북에 없는 알고리즘은 네이버나 구글에서 이론을 찾아서 한 번씩 읽어보고 풀어 보는 것 추천
- 문제를 풀다 보면 주류 , 비주류 구분이 가능
- 주류 : 트리, 구현, 기본적인 다이나믹 프로그래밍, bfs dfs와 같은 탐색 등
- 비주류 : suffix automaton, 아호코라식같은 이름부터가 요상한 알고리즘, 수학과 관련 된 것들 등
- 취업용이기 때문에 대부분 문제가 많은 주류 알고리즘을 많이 풀어보는게 좋음
- 개인적으로 구현 종류 및 DP(다이나믹 프로그래밍)을 많이 풀어보는 게 좋은 듯
- 코테에서 주로 나오는 알고리즘들 대부분은 몇 문제만 풀면 개념적으로 이해하기 쉬운데, dp의 경우 종류가 너무 많아서 많이 풀어보는게 좋다고 생각
- 구현은 백준만 보시면 난이도가 낮다고 생각 하기도 하는데 어느정도 어렵게 나오는 구현 문제가 정말 종합적인 코딩 능력을 길러준다. (개인적 생각)
- 취업에 대비해서는 개인적으로 푼 문제의 질이 괜찮고, 잘 이해했으면 백준 400문제 정도만 풀어도 괜찮다고 생각
- 그리고 이거 중요한건데...
- 3단계까지의 알고리즘은 풀이법을 알면 다음부터 혼자서 짤수 있는데 4단계의 일부 알고리즘부터는 이론도 복잡해서 혼자서 짜기가 힘든 경우 이미 있는 코드를 가져와서 변형하는 방식으로 문제를 푸는게 좋음 (그냥 복붙이 아닌 나중에 자세히 서명할 줄 알아야 함)
- dp정도는 유형이 워낙 다양해서 혼자서 짤줄 알아야하고 공부하다 보면 복잡한 것들이 나오는데 스스로 판별해서 일정 수준 이상이면 이미 있는거 쓰기
- 코테가 집에서 보는 온라인 코딩이라면 아무리 어려워도 이미 풀어 봤으면 그거 가져다 쓰면 됨
- 오프라인의 경우에는 그렇게 복잡한 문제를 손코딩하거나 인터넷 없이 풀어보라고 잘 요구하지 않음
- 면접 가서 보는 손코딩은 제가 위에 적은 난이도중 ~3단계 또는 ~4단계의 극초반 정도
- 그러니까 굳이 많이 어려운거 이해 잘 안가는데 꼭 혼자서 해보겠다고 계속 시간 낭비할 필요가 없이 어려운것들은 유형만 파악해놓으면 된다는 것
5. 취업대비 알고리즘 익숙해지기, 취업에 나오는 문제 집중 풀기, 한번 푼 문제 바꿔서 풀어보기
- 대상 : 4번 단계 이상자 && 알고리즘 공부를 따로 시간내서 몇달/년 이상 해 본 경험이 있는 사람
- 3, 4 단계까지 혼자서 한 경험이 있으면 이 글은 그냥 재미로 읽고 있을 것
- 이제 새 문제를 보면 어떤 종류의 알고리즘을 써야 하는지는 대충 감이 오고, 잘 몰라도 어떻게 이전 코드들을 조합해서 스스로 답을 얻어낼 수 있을 정도의 실력자라고 봄
- 3단계정도에서 시작해서 5단계까지 넉넉하게 준비가 되었다라고 느낄정도로 공부하는데 5개월이 걸렸음
sowon-dev.github.io/2020/09/28/200929codingTest/
자바 코딩테스트 공부방법 및 추천사이트
코딩테스트 사이트
최근 코딩테스트를 할 수 있는 많은 사이트가 생겼다.
차근차근 단계를 올려가며 코딩테스트를 준비하고자한다.
- 코드업 기초 100제 https://codeup.kr/problemsetsol.php?psid=23
- 구름레벨 https://level.goorm.io/
- leetcode https://leetcode.com/problemset/top-100-liked-questions/
- 코딜리티 https://app.codility.com/programmers/
- 해커링크 https://www.hackerrank.com/
- 백준온라인저지 https://www.acmicpc.net/workbook/view/1152
- 프로그래머스 https://www.welcomekakao.com/learn/challenges?tab=all_challenges
코딩테스트를 위한 알고리즘 공부순서
알고리즘 공부로 끝나는 것이 아니라 기록을 위해 레포지토리를 생성하였다.
- 코드업 기초 100제 https://codeup.kr/problemsetsol.php?psid=23
- 백준온라인저지 그리디 https://www.acmicpc.net/problemset?search=greedy
- 탐색 알고리즘 (완전탐색 / BFS /DFS)
- 기본 동적 프로그래밍
레벨별 코딩테스트 준비방법
만약 기존 프로그래밍을 해왔던 분 이거나 위 페이지에서의 3단계 문제가 쉬운 분 에겐 백준 알고리즘의 2~3단계 이후 난이도를 추천합니다.
또한 최종적으로 대기업 코딩테스트를 목표로 하신다면 프로그래머스의 2단계 정도는 쉽게 푸실수 있다면(웬만하면 문제당 30분 이내로 정답을 띄우면) 도전할 만 하다고 생각합니다.
참고로 중소기업 코딩테스트와 대기업 코딩테스트는 중소기업 코딩테스트가 근소하게 어려운 느낌입니다. 아무래도 실무적인 부분이 많이 들어갔기 때문인듯 합니다. 대기업은 코테 이후, 기술면접이 어려우므로 대기업 레벨 이라 하여 어렵다고 지례 짐작하시면 안됩니다. (삼성전자 기준이며 카카오는 조금 더 어렵습니다, 카카오는 통과해본적이 없어서 이후는 모르겠네요)
진행하시다 막힐경우 프로그래머스 기준 3~4단계 까지의 문제는 본 카페에 글을 올려주시면 도와드릴 수 있습니다. (정답을 100% 알려드리는게 아니라 같이 고민할 수 있다는 것 입니다…) 언어는 c/c++, java, python 으로 제한하려 합니다.
출처 : http://cafe.daum.net/cjgreen2006/AZdl/3?svc=cafeapi
대기업 IT직군 코딩테스트 합격을 위한 현실적이고 직관적인 공부 순서
코드포스 블루 레벨 정도면 국내 코테에서 떨어질 일은 없다.
영상 간단 정리.
- 프로그래밍 언어 때기. (C# / 파이썬 / 자바 등)
- 동빈나(본인)은 C++ / 파이썬을 추천. 파이썬으로 시작해도 불이익이 크지 않다. 미래를 위해 C++도 좋다.
- 코드업 기초 100제 공부.
- 백준 온라인 저지 알고리즘 공부.
- 그리디 알고리즘
- 탐색 알고리즘 (완전탐색 / BFS /DFS)
- 기본 동적 프로그래밍
- 그래프 이론
- 중급 / 고급 동적 프로그래밍
- 문자열
- 고급 알고리즘은 대기업 코테용으로 공부할 필요가 없다.
- 코드포스 블루 레벨 정도면 국내 코테에서 떨어질 일은 없다.
- 그리디 / 동적 프로그래밍 / 탐색 정도면 블루 레벨 가능
- 삼성 역량 테스트 B형 정도면 국내 대기업 IT 직군에 취업할 수 있다.
- 연구직이나 대학원 진학을 꿈군다면 고급 알고리즘 공부는 필요하다.
- 대기업 공체는 문제 수와 관계 없이 절반 이상 맞추면 대기업에 합격하는 추세다. 완벽할 정도로 공부할 필요 없다.
- 공부 루트를 알면 굳이 학원을 다닐 필요가 없다.
- 삼성전자 역량 테스트는 백준 사이트에서 확인 가능. 카카오 테스트는 프로그래머스에서 확인 가능.
- 유튜브에서 동빈나(본인) 알고리즘 강의 절반을 듣고 백준 알고리즘 풀고 삼성 문제 풀면 충분하다.
출처 : https://youtu.be/ukkLCl9yBvE
Scanner보다는 BufferedReader, StringTokenizer를 쓰는 이유
'Programming' 카테고리의 다른 글
저작권없는 이미지 site 25개 (0) | 2021.05.11 |
---|---|
웹 포토샵 사이트 7개 (0) | 2021.05.11 |
알고리즘 코테 공부펌 (0) | 2021.05.11 |
ps 공부법 코드포스 뿌숨1 (0) | 2021.05.11 |
알고리즘 공부 방법/순서 (0) | 2021.05.11 |