본문 바로가기

알고리즘 스터디

(35)
[JAVA] BOJ 1003번 피보나치 함수 단순 피보나치수열을 구하는 것은 백 트레킹으로 쉽게 구할 수 있지만 동적 계획법 문제는 메모이제이션을 추가로 구현해야 한다. 이 문제는 피보나치수열을 구하는 동적 계획법 문제와 비슷하지만 출력하는 형식이 다르다. 각 테스트케이스에 대해 N이 0이 되는 횟수와 1이 되는 횟수를 구해야 하는데 피보나치수열은 F(N) = F(N-1) + F(N-2) 의 점화식을 따르고, 피보나치수열의 초기값 두 개인 0, 1을 호출하는 횟수 또한 이 점화식을 따라 증가하는 형태를 띤다. 예제에서도 볼 수 있듯 F(2)_zero = F(1)_zero + (F0)_zero, F(2)_one = F(1)_one + F(2)_one을 만족하여 [1 1]을 출력할 것이고 F(3) 또한 이를 만족하여 [1 2]를 출력한다. *F(N)_..
[JAVA] BOJ 9461 파도반 수열 동적 계획법(DP) 문제이다 보니 조금 난이도가 있었다. 파도반 수열을 쭉 써보면 1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37.... 이렇게 이어지는 것을 알 수 있다. 동적 계획법은 수열의 패턴, 즉 점화식을 찾아내는 것이 가장 먼저이기 때문에 패턴을 분석해보니 6번째 숫자부터 f(N) = f(N-1)+ f(N-5)를 따르고 있었다. static long padovan(int N) { if (N_li[N]==0) return N_li[N] = (padovan(N-1) + padovan(N-5)); return N_li[N]; } 이런 식으로 재귀 함수를 구성해주면 되고 N_li라는 배열은 메모 이제이 션(Memoization)을 구현하기 위해 만들어준 배열이다..
생활코딩 - 자바 강의를 듣고 https://opentutorials.org/course/1223/5399 객체 지향 프로그래밍 - 생활코딩 객체 지향 프로그래밍 객체지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것 opentutorials.org 자바를 기본부터 다시 배워보자 하는 마음에 생활코딩 자바 강의를 두 번째 수강하였다. 평소 객체지향에 대한 기본적인 개념이 약했던 터라 객체 지향 강의부터 시작하였는데 내 식대로 이해한 개념을 기록하고자 한다. 객체지향의 핵심 키워드는 객체이다. 객체는 비슷한 기능을 하는 변수 혹은 메서드들을 그룹으로 묶어 관리하고자 할 때의 솔루션이다...