문제수열 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의 가장 긴 증가하는 부분 수열의 길이를 출력한다.예제 입력 1610 20 10 30 20 50예제 출력 14 문제를 처음 봤을 때 이해를 못했다. arr 배열에 2, 7, 5, 8, 6, 2, 4, 7, 12, 3이렇게 있다고 치면 2, 5, 6, 7, 12 -..
이 전에 레거시 프로젝트를 진행할 때, 기본 MVC 패턴을 사용해서 비즈니스 로직을 처리 했었는데, 새로운 기능을 추가하거나 유지보수 하는데 시간이 많이 걸릴 것 같다고 느껴졌어요..그래서 무엇보다 이번 리팩토링 작업을 진행하면서 비즈니스 로직을 최대한 읽기 쉽게 하자는 생각으로 개발을 진행했어요!그저께 패치를 진행했었는데, 해당 프로젝트를 배포하고 2주 뒤에 다시 코드를 읽었었는데..비즈니스 로직의 작업 단위가 깔끔하게 읽혀서, 원하는 데이터를 처리하고 기능도 쉽게 구현할 수 있었다는 것을 느꼈어요! 한 가지 예를 들자면.. @Slf4j@Getter@NoArgsConstructor@ToString@Entitypublic class Nmap { @Id @GeneratedValue(strateg..
문제준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.입력첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)출력첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.예제 입력 1 10 4200151050100500100050001000050000예제 출력 1 6예제 입력 2 10 4790151050100500100050001000050000예..
문제인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다.사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다. ..
문제한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.입력첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같..
문제대열이는 욱제의 친구다.“야 백대열을 약분하면 뭔지 알아?”“??”“십대일이야~ 하하!”n:m이 주어진다. 욱제를 도와주자. (...)입력n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000)출력두 수를 최대한으로 약분하여 출력한다.예제 입력 1 100:10예제 출력 1 10:1예제 입력 2 18:24예제 출력 2 3:4 쉬운 문제!욱제를 도와주자..말 그대로 계속 약분하면 된다.. import java.util.Scanner;public class Ex14490 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String n = sc.next();..