목록전체 글 (153)
Dazzling 개발 노트
[백준] 2559 - 수열 (Java) 문제 https://www.acmicpc.net/problem/2559 풀이/후기 토요일에 예정된 코딩테스트에서 자주 나오는 유형이라길래 풀어보았다. 단순해보이지만 일반적인 반복문으로 풀이하면 런타임에러가 발생한다. 이 문제는 누적합과 두포인터 방법을 사용하여 풀 수 있는데, 나는 누적합을 이용해서 풀었다. **배열에 담을 때 누적합으로 담기 **배열 인덱스 + 1 해주기 코드 package PrefixSum; import java.io.*; import java.util.*; public class Problem2559 { public static void main(String[] args) throws IOException { BufferedReader br =..
[백준] 1912 - 연속합 (Java) 문제 https://www.acmicpc.net/problem/1912 풀이/후기 DP 문제를 계속해서 풀면서 정말 오랜만에 자력으로 점화식을 도출해냈다. 아주 자신감있게 풀어서 주어진 예제가 모두 맞게 나오는 것을 확인하고 제출하니 오답이 나왔다. dp[i] = Math.max(dp[i-1], arr[i-1]) + arr[i]; 이 점화식에선 무조건 두 개 이상의 숫자를 선택한 경우이다. 연속된 몇 개의 수를 선택하는 경우 외에 하나의 수만 선택할 수도 있으므로 arr[i]는 꼭 더해져야 하는 부분이 아니다. dp[i] = Math.max(dp[i-1] + arr[i], arr[i]); 이렇게 수정하니 정답처리가 되었다. 정말 오랜만에 자신있게 풀었는데,, 마무..
[백준] 11053 - 가장 긴 증가하는 부분 수열 (Java) 문제 https://www.acmicpc.net/problem/11053 풀이/후기 처음에는 문제를 잘못읽고 풀어서 오답이 나왔다. 그리고 dp에 수열 중 선택한 값을 저장하는 방식으로 풀었는데 생각해보니까 수열의 크기를 구해야하기 때문에 dp에 부분 수열의 번호를 넣어서 풀어야 했다. 마지막에 dp[N-1]을 출력하면 당연히 답이 나와야한다고 생각했는데 N-1번째 숫자가 부분 수열의 멤버가 아닐 수 있기 때문에 그렇게 하면 안된다. 반복문을 한 번 더 돌려서 dp의 가장 큰 값을 뽑아서 출력한다. 코드 package DynamicProgramming; import java.io.*; import java.util.*; public clas..
[백준] 2579 - 계단 오르기 (Java) 문제 https://www.acmicpc.net/problem/2579 풀이/후기 점화식을 얻어내려고 정말 열심히 찾았는데,, 결국 못찾았다ㅠㅠㅠ 검색해서 점화식 확인해보니 조금만 더 생각했으면 도출할 수 있을 것 같기도 하고,, 살짝 아쉽다 코드 package DynamicProgramming; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Problem2579 { public static void main(String[] args) throws IOException { BufferedReader br = new B..
[백준] 2407 - 조합 (Java) 문제 https://www.acmicpc.net/problem/2407 풀이/후기 BigInteger 연산 주의!! 확률과 통계 이슈로 순열과 조합부터 복습이 필요했다..^^; 여기서 nPr은 반복문을 돌며 N-i을 곱하는 것으로 표현하고 r!은 i+1을 곱하는 것으로 표현 반복문을 마치면 그 결과를 나눠주면 됨 (다이나믹프로그래밍으로 풀기) 파스칼의 삼각형을 이용하여 풀이할 수 있다. 이차원 배열을 이용하여 파스칼 삼각형을 표현한다. 코드 package DynamicProgramming; import java.io.*; import java.util.*; import java.math.BigInteger; public class Problem2407 { stati..
[백준] 9095 - 1,2,3 더하기 (Java) 문제 https://www.acmicpc.net/problem/9095 풀이/후기 이번 문제는 점화식을 쉽게 찾아낼 수 있는 문제였는데 집중력이 부족한건지,, 잘 생각이 안난다 ㅠㅠ 다이나믹프로그래밍은 점화식을 찾아내는게 가장 키 포인트라 그런지 수학 문제가 많이 나온다 나,, 수학 이렇게 재능 없던가? 코드 package DynamicProgramming; import java.io.*; public class Problem9095 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(S..
[백준] 17626 - Four Squares (Java) 문제 https://www.acmicpc.net/problem/17626 풀이/후기 다들 패턴을 찾느라 오래걸렸다고 하는데 난 스스로 찾기는 커녕 이해하는데도 오래 걸렸다,,ㅋㅋ dp[1] = 1 dp[2] = dp[1] + 1 = 2 dp[3] = dp[2] + 1 = 3 dp[4] = 1 dp[5] = dp[2^2] + dp[1] = 2 dp[6] = dp[2^2] + dp[2] = 3 dp[7] = dp[2^2] + dp[3] = 4 dp[8] = dp[2^2] + dp[2^2] = 2 숫자 i는 자신의 제곱수(dp[j*j])들을 기준으로 제곱수를 뺀 나머지 값의 합을 구하면 된다. → 따라서 점화식은 dp[i] = dp[i- j*j] + ..
프레임워크란? 웹 개발에서 프레임워크는 어떠한 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어둔 것을 의미한다. 즉, 특정 종류의 소프트웨어를 개발할 때 사용할 수 있는 재사용 가능한 표준 방법을 제공하는 코드의 집합이다. 개발자가 소프트웨어나 애플리케이션을 더 빠르게, 효율적으로 개발할 수 있도록 기본적인 구조를 제공한다. 스프링(Spring)이란? 스프링은 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이다. 엔터프라이즈 급의 애플리케이션을 쉽게 개발할 수 있도록 다양한 기능을 제공한다. 이는 강력한 의존성 주입(Dependency Injection)을 기반으로 하여, 애플리케이션의 구성 요소들 간의 결합도를 낮추고, 유지보수 및 테스트가 용이한 애플리케이션을 구축할..