문제 무한 수열 A는 다음과 같다. A0 = 1 Ai = A⌊i/P⌋ + A⌊i/Q⌋ (i ≥ 1) N, P와 Q가 주어질 때, AN을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 3개의 정수 N, P, Q가 주어진다. 출력 첫째 줄에 AN을 출력한다. 제한 0 ≤ N ≤ 1012 2 ≤ P, Q ≤ 109 문제 풀이 해당 문제는 DP 알고리즘으로 해결 할 수 있는 문제입니다. 초기에는 타뷸레이션으로 접근하였으나, 시간초과 문제로 메모이제이션 방식으로 처리 했습니다. 메모이제이션은 이미 계산된 값을 저장해 두고 필요할 때 재사용하는 방식입니다. 이전에 계산한 값을 메모리에 저장해 두는 캐시(cache)를 이용하여 중복 계산을 피하는 방식입니다. 메모이제이션은 재귀 함수를 사용하여 구현하는 경우가 많으며..
컬렉션 프레임워크(Collection Framework) Java Collections Framework는 Java에서 데이터를 저장, 처리 및 조작하는 데 사용되는 API(응용 프로그램 프로그래밍 인터페이스)의 집합입니다. 이 API를 사용하면 다양한 데이터 구조, 예를 들어 리스트, 집합, 맵 등을 생성하고 조작할 수 있습니다. Java Collections Framework에는 여러 클래스와 인터페이스가 포함되어 있습니다. 예를 들어, List, Set 및 Map과 같은 인터페이스는 데이터를 저장하는 데 사용됩니다. 이러한 인터페이스의 구현체는 ArrayList, HashSet 및 HashMap과 같은 클래스입니다. 이러한 클래스는 데이터를 저장하고 처리하는 다양한 방법을 제공합니다. 핵심 인터페이..
객체지향프로그래밍(OOP) 객체지향프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그램을 객체(Object)라는 개별 단위로 분류하여 여러 객체들 간의 상호작용을 통해 프로그램을 설계하고 구현하는 방법을 말합니다. 객체는 데이터와 해당 데이터를 조작하는 메소드(Method)를 포함하고 있습니다. 객체지향 프로그래밍에서는 이러한 객체들이 간에 상속(Inheritance), 다형성(Polymorphism), 캡슐화(Encapsulation) 등의 개념을 활용하여 프로그래밍을 구현하고고, 이를 통해 모듈화, 재사용성, 유지보수성, 확장성 등의 장점을 제공합니다. 객체지향프로그래밍은 대부분의 현대적인 프로그래밍 언어에서 지원하고 있으며, 소프트..
문제 n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. 각각의 동전은 몇 개라도 사용할 수 있다. 사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다. 입력 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 경우의 수를 출력한다. 경우의 수는 231보다 작다. 문제 풀이 해당 문제는 DP 알고리즘으로 해결 할 수 있는 문제이다. 각 동전마다 각 가격을 만들 수 있는 경우의 수를 더하는 문제로 동전 별로 경우의 수를 더해서..
문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000) 출력 첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 둘째 줄에는 가장 긴 증가하는 부분 수열을 출력한다. 그러한 수열이 여러가지인 경우 아무거나 출력한다. 문제 풀이 해당 문제는 DP 알고리즘으로 풀 수 있는 문제이다. 먼저 배열에 있는 값중에서 가장..
문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다. 마지막 도착 계단은 반드시 밟아야 한다. 따라서 첫 번째 계단을 ..