본문 바로가기

알고리즘24

[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.
[코딩테스트 대비] 동적 계획법 (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.
[Java]백준 11722번 :: 가장 긴 감소하는 부분 수열 백준 11722번 :: 가장 긴 감소하는 부분 수열 백준 온라인 저지 11722번 - 가장 긴 감소하는 부분 수열 Java 알고리즘 문제풀이 풀이 DP(다이나믹 프로그래밍) 문제입니다. 큰 문제를 작은 단위의 문제로 생각해서 푸는 알고리즘인데, 코딩테스트에 자주 출제되는 문항입니다. 문제를 해석해보면 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구한는 문제 수열 A = 일때 가장 긴 증가하는 수열 DP(다이나믹 프로그래밍)에서 중요한 것은 규칙을 찾거나, 어떤 일반식을 찾는 것이 키 포인트이다. 이제 문제를 작게 쪼개서 생각해보자 먼저 A수열의 A[1], A[2], A[3]를 먼저 보자. A[2]보다 A[3]가 작기때문에 D[2]값에 +1을 해준다. 두 번째로 A[4]를 진행한다. 이때 A[4.. 2019. 3. 15.
[Java]백준 16194번 :: 카드 구매하기 2 백준 온라인 저지 16194번 - 카드 구매하기2 Java 알고리즘 문제풀이 풀이 DP(다이나믹 프로그래밍) 문제입니다. 큰 문제를 작은 단위의 문제로 생각해서 푸는 알고리즘인데, 코딩테스트에 자주 출제되는 문항이다. 문제를 해석해보면 카드 N개를 구매해야한다. 카드팩에 들어있는 카드가 적은 것부터 산다. 카드 N개를 구매하는데 드는 비용의 최소를 구하는 문제이다. DP를 풀때 일반항 형태로 정의하는 것이 중요하다. 일단, 케이스 단위로 생각해보자. 카드 i개를 구매하는 방법은? 카드 1개가 들어있는 카드팩을 구매하고, 카드 i-1개를 구입한다. 카드 2개가 들어있는 카드팩을 구매하고, 카드 i-2개를 구입한다. 카드 3개가 들어있는 카드팩을 구매하고, 카드 i-3개를 구입한다. ... 일반화 시키면 D.. 2019. 3. 13.
[Java]백준 11052번 :: 카드 구매하기 백준 온라인 저지 11052번 - 카드 구매하기 Java 알고리즘 문제풀이 풀이 DP(다이나믹 프로그래밍) 문제입니다. 큰 문제를 작은 단위의 문제로 생각해서 푸는 알고리즘인데, 코딩테스트에 자주 출제되는 문항이다. 문제를 해석해보면 카드 N개를 구매해야한다. 카드팩에 들어있는 카드가 적은 것부터 산다. 카드 N개를 구매하는데 드는 비용의 최대를 구하는 문제이다. DP를 풀때 일반항 형태로 정의하는 것이 중요하다. 일단, 케이스 단위로 생각해보자. 카드 i개를 구매하는 방법은? 카드 1개가 들어있는 카드팩을 구매하고, 카드 i-1개를 구입한다. 카드 2개가 들어있는 카드팩을 구매하고, 카드 i-2개를 구입한다. 카드 3개가 들어있는 카드팩을 구매하고, 카드 i-3개를 구입한다. ... 일반화 시키면 D[.. 2019. 3. 13.