일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- wagon-ssh
- jvm
- 코딩테스트
- jetbrain
- 동작방식
- zipWith
- webflux
- 날짜쿼리
- try-catch
- intelij
- Kotlin
- Runtime data area
- springboot
- try-with-resources
- GC
- resilience4j
- closeable
- circuitbreaker
- 람다표현식
- 4-way-handshake
- try-catch-finally
- AutoCloseable
- execution engine
- Class Loader
- Hotspot VM
- optional
- feign
- n+1
- tcp
- java
- Today
- Total
JuBin's personal study blog
[코테준비] 어떻게 코딩테스트를 준비할것인가 본문
코딩테스트 언어에 대한 숙달
먼저 자바로 4년을 개발해 왔으니 나에게 가장 익숙한 언어인 JAVA로 준비할 것이다.
코딩테스트는 일반적인(?) 코딩과 다르게 객체 지향적으로 짤 필요도 없고, 직접 자료구조를 구현할 필요도 없다. 주어진 시간 내 간결함과 정확함이 생명이다. 요즘은 메모리 성능이 점점 좋아져 공간복잡도는 시간복잡도에 비해 고려도가 낮다.
뼈대문제로 알고리즘 익히기
강의를 통해서 알고리즘 기본 연습을 하기 전에 기억 저 넘어에 있는 알고리즘 지식을 불러와야 한다.
알고리즘 바탕으로 특정 문제에 적용하는 연습을 해야한다. 그 전에 1, 2년전 수강했던 알고리즘이 기억이 안 나면 시작도 못 할 것입니다. 과거 기억을 불러오기 위해서 엔지니어 대한민국 채널을 추천.
특정 알고리즘을 적용하면 바로 풀리는 쉽고 풀기의 기본이 되는 문제를 뼈대 문제라고 부른다. 저학년 알고리즘 지도를 하면 Stack 문제에서 손수 List를 직접 만들고 포인터로 연결해서 알고리즘 문제를 해결하는 것을 본다.
뼈대 문제에서 너무 많이 고민하는 것은 느린 길이 될 수 있다. 자신의 풀이, 타인의 풀이를 보면서 깔끔한 코드를 연습해보자!!!!
Youtube 엔지니어 대한민국 알고리즘 강의 시청하기
합격하기 전까지 연습, 연습
코딩테스트를 보고 나면 어떤 문제가 나왔는지 복기해보자. 그리고 그 문제를 해결하기 위해서 백준의 어떤 문제와 유사한지, 같은 아이디어를 사용한 문제가 무엇인지 찾아보자. 아래 참고 블로그를 활용하자.
JAVA로 코테 준비하기
1. 자료구조에 대한 이해하기
2. 간단한 String 가지고 놀기 (뒤집기 등)
3. 알고리즘(LRU-Cache 도 가끔나옴(개같은..) )
4. 정렬계의 명예의 전당 파악하기(퀵소트, 머지소트, 버블소트, 인서션소트)
** 하지만, 자바개발자늩 팀소트도 알아야함. JDK 안에 있는 소팅 알고리즘은 팀소트임
5. 자바나 Spring에서 자주 쓰일법한 문법 스스로 정리하기
- 백준 온라인 저지 알고리즘 공부.
- 그리디 알고리즘
- 탐색 알고리즘 (완전탐색 / BFS /DFS)
- 기본 동적 프로그래밍
- 그래프 이론
- 중급 / 고급 동적 프로그래밍
- 문자열
- 고급 알고리즘은 대기업 코테용으로 공부할 필요가 없다.
- 코드포스 블루 레벨, 프로그래머스 3레벨까진 풀어야 대기업을 뚫을수 있다고 한다.
- 그리디 / 동적 프로그래밍 / 탐색 정도면 블루 레벨 가능
- 삼성 역량 테스트 B형 정도면 국내 대기업 IT 직군에 취업할 수 있다.
- 연구직이나 대학원 진학을 꿈군다면 고급 알고리즘 공부는 필요하다.
- 대기업 공체는 문제 수와 관계 없이 절반 이상 맞추면 대기업에 합격하는 추세다. 완벽할 정도로 공부할 필요 없다.
여기까지는 입력하고 문제를 풀어야 한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.util.StringTokenizer;
public class Solution {
static int a, b, c;
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int tc = 1; tc <= T; tc++){
st = new StringTokenizer(br.readLine());
int N = Integer.praseInt(st.nextToken());
}
}
}
1. 기본 알고리즘 개념 공부
2. 코드업 기초 100제
3. 백준, 절대 1번문제 부터 풀지말고 그리디 알고리즘부터 풀어라
4. 탐색(완전탐색, BFS, DFS) 풀어라
5. 기본 동적 프로그래밍 풀어라
6. 그래프이론, 문자열, 중급 알고리즘
기본 충실히, 코드포스 블루레벨 정도면 국내 뭐든 합격
그리디, 동적 , 탐색 알고리즘만 풀어서 블루레발 가능
카카오 코테는 프로그래머스에 다 올라가있다.
그리디 동적 탐색문제 각각 50문제씩 총 150문제 풀어보자.
동빈나 채널 알고리즘강의 참고
자료구조 중 선형구조(순차리스트, 연결리스트, 스택, 큐, 덱), 비선형구조(트리,그래프)가 알고리즘 문제에 출제된다.
* 선형 자료구조 : 한 종류의 데이터가 선처럼 길게 나열된 자료구조
* 비선형 자료구조 : 선형 자료구조가 아닌건 모두 비선형 자료구조
알고리즘을 풀다가 한 문제씩 튀어나올 때에 ‘이런 풀이법으로 풀면 되는구나’ 하고 자연스럽게 패턴으로 익히는 것이 좋아보인다.
기초적인 원리를 이해했다면, 코드로 어떻게 풀어 나가는지 예제 알고리즘을 공부한다. (정형화된 풀이 공식)
만약 자료구조 중 배열에 대해 공부했다면 List와 Array가 어떻게 다른지, 코드로 어떻게 작성하고 어떤 클래스와 함수를 쓸 수 있는지 파악한다. 여기서 헷갈린다면 언어에 대한 문법을 다시 복습할 필요가 있다.
이후 직접 작성해보기, IDE 자동완성에 의존하지 말자.
- 내가 선택한 언어의 문법과 클래스를 잘 파악하자
- 먼저 풀어본 뒤 다른사람 풀이를 참고해보자.
- 경험이 곧 실력, 조급해하지 말자
참고 : https://covenant.tistory.com/224 백준문제 추천
: https://www.geeksforgeeks.org/depth-first-search-or-dfs-for-a-graph/ 코드작성 예시
: https://covenant.tistory.com/145 코테 고득점 Kit
: https://www.inflearn.com/course/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B0%95%EC%A2%8C/#curriculum