본문 바로가기

코딩테스트12

[Java]백준 11053번 :: 가장 긴 증가하는 부분 수열 백준 온라인 저지 11053번 - 가장 긴 증가하는 부분 수열 Java 알고리즘 문제풀이 풀이 DP(다이나믹 프로그래밍) 문제입니다. 큰 문제를 작은 단위의 문제로 생각해서 푸는 알고리즘인데, 코딩테스트에 자주 출제되는 문항입니다. 문제를 해석해보면 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구한는 문제 수열 A = {10, 20, 10, 30, 20, 50}일때 가장 긴 증가하는 수열 {10, 20, 10, 30, 20, 50} DP(다이나믹 프로그래밍)에서 중요한 것은 규칙을 찾거나, 어떤 일반식을 찾는 것이 키 포인트입니다. 먼저 A수열의 A[1], A[2]를 먼저 보면, A[1] < A[2]이므로 D[2] = D[1] + 1을 넣습니다. 이때 A[3]의 값은 A[2]보다 작고 A[1].. 2020. 4. 4.
[코딩테스트 대비]알고리즘 기본문제 (덧셈, 나머지연산, 유클리드) Fundamental 코딩테스트를 처음 준비하거나 알고리즘 문제를 풀기 전에 간단히 풀어보면 좋은 유형들을 모아보았다. 처음에는 간단한 입 출력부터 연습을 하고 사칙연산을 통해 기본을 마무리 한 후에 나중에 나올 유형들을 풀 때 유용하게 쓰이는 것들을 연습해 볼 수 있도록 모아두었다. 입 출력 2557번 Hello World 11718번 그대로 출력하기 덧셈 연산 1000번 A+B 2558번 A+B -2 10950번 A+B -3 10951번 A+B -4 10952번 A+B -5 10953번 A+B -6 11021번 A+B -7 11022번 A+B -8 15552번 빠른 A+B 나머지 연산 참고 : A+B % N = (A % N) + (B % N), (A-B) % N = ((A % N) - (B % N) .. 2019. 3. 30.
[코딩테스트 대비] 깊이 우선 탐색 (DFS) 정리 DFS (깊이 우선 탐색) 소개 Root Node 혹은 다른 임의의 노드에서 시작해서 다음 분기(Branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법이다. Stack과 재귀함수(Recursion)으로 구현한다. 경로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게되면 다른 방향으로 다시 탐색을 진행 모든 노드를 방문하는 경우에 이 방법을 사용한다. 사용용도 경로찾기 u, v가 주어졌을 때 u -> v로 가는 경로를 찾을 때 그래프의 사이클을 찾을 때 back edge 즉, 순환을 만들어 주는 마지막 edge를 찾는다. 시간복잡도 두 가지의 자료구조(인접 리스트, 인접 행렬)로 구현할 수 있다. 인접 리스트 : O(V + E) 인접 행렬 : O(V^2) 접점(V).. 2019. 3. 30.
[코딩테스트 대비] 너비 우선 탐색 (BFS) 정리 BFS (너비 우선 검색) 정리 소개 Root Node 혹은 다른 임의의 노드에서 인접한 노드를 먼저 탐색하는 방법이다. Queue를 사용해서 구현한다. 시간 복잡도 인접 리스트 : O(V + E) 인접 행렬 : O(V^2) 접점(V), 간선(E) class Graph { private int V; private LinkedList adj[]; Graph(int v) { V = v; adj = new LinkedList[v]; for (int i=0; i 2019. 3. 30.
[코딩테스트 대비] 동적 계획법 (DP) 정리 동적 계획법(Dynamic Programming) 정리 큰 문제를 작은 문제로 나눠서 푸는 알고리즘인데, 코딩테스트에서 자주 출제되는 알고리즘 기법입니다. DP 속성 Overlapping Subproblem (부분 문제가 겹친다.) Optimal Substructure (최적 부분 구조) Overlapping Subproblem 대표적인 예로 피보나치 수를 들 수 있다. Fn = Fn-1 + Fn-2 여기서 Fn을 큰 문제로 생각하고, 우측 항에 있는 Fn-1, Fn-2를 작은 문제로 나눈다고 생각하면 된다. Optimal Substructure 문제의 정답을 작은 문제의 정답을 합하는 것으로 구할 수 있다. 위의 예에서 작은 문제로 쪼갠 우측항의 Fn-1 + Fn-2로 큰 문제인 Fn의 값을 구할 수 .. 2019. 3. 30.
SW 마에스트로 10기 코딩테스트 후기 온라인으로 진행되는 AI 인적성을 마치고 인적성 합격 통지서가 온 후 코딩테스트에 대한 안내를 받았습니다. 1차 서류전형, 2차 (온라인)인적성, 3차 (오프라인)코딩 테스트, 4차 (오프라인) 심층면접 4차까지 거친 전형인데 왜이렇게 까다로워 졌는지 모르겠다. 채용처럼 1차 서류에서 참여자격만 체크 후 바로 온라인으로 코딩 테스트를 본 후 인적성을 거쳤다면 이라는 생각이 들었다. 일단 3월 23일 토요일에 코딩 테스트를 다녀왔는데 오전 10시, 오후 1시 30분, 오후 4시 30분 이렇게 3타임으로 있는 것 같았다. (추정) 그리고 고사장은 총 3개가 있다. 3곳 전부 강남 지역에 위치한 학원을 빌려서 그 곳에서 테스트를 본다. SW 마에스트로 코딩테스트에는 총 15문제에 시간은 1시간 30분이 주어졌.. 2019. 3. 24.