전체 글
-
Java 15988 1, 2, 3 더하기 3카테고리 없음 2023. 8. 31. 10:52
https://www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 다이나믹 프로그래밍 문제이다. 1의 경우 - 1 2의 경우 - 1+1, 2 3의 경우 - 1+1+1, 1+2, 2+1, 3 4의 경우를 만드려면 1의 경우인 1에서 3을 더하고, 2의 경우인 1+1,2에 2를 더하고, 3의 경우인 1+1+1, 1+2, 2+1, 3에 1을 더해주면 4를 만들 수 있는 모든 경우의 수를 구할 수 있다. 따라서 점화식은 dp[n] = (dp[n-1] + dp[n-2] + dp[n-3])%1000000009 으로 정의할 ..
-
Java 1309 동물원카테고리 없음 2023. 8. 31. 10:28
https://www.acmicpc.net/problem/1309 1309번: 동물원 첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다. www.acmicpc.net 다이나믹 프로그래밍 문제이다. 해당 문제에선 세가지의 경우에 수를 구해야한다. 1. 동물을 넣지 않을 경우 2. 동물을 1번에 넣을 경우 3. 동물을 2번에 넣을 경우 문제에서도 나와있듯이 동물의 배치는 가로,세로 겹칠 수 없다. 점화식은 아래와 같다. dp[i][0] = 동물을 넣지 않았을 때 dp[i][1] = 1번칸에 동물을 넣었을 때 dp[i][2] = 2번칸에 동물을 넣었을 때 0번째 인덱스의 값은 동물을 넣지 않았을 때이므로 [i-1]의 모든 원소들을 더한 값을 넣어주면 된다. 1번째 인덱스의 값은 1번칸에 동물을 넣었..
-
Converter, FormatterSpring 2023. 8. 29. 14:58
해당 내용은 공부한 내용을 정리한 것이며, 잘못된 정보가 있다면 지적 부탁드립니다. 스프링부트를 조금이라도 사용해봤다면 컨트롤러에서 @PathVariable 어노테이션을 사용하여 객체타입으로 값을 받는 것을 본적이 있을 수 있다. @RestController public class TestController { public String Test(@PathVariable Post post){ return post.getId.toString(); } } 위와 같은 코드에서 값으로 String값이 들어온다고 가정했을 때, String이 어떻게 객체로 변환이 되는 것인지에 대해서 의문이 있었다. 이는 스프링부트에서 기본적으로 내장된 Converter, Formatter가 입력값으로 들어온 String 타입의 값..
-
Java 1654 랜선 자르기PS 2023. 8. 29. 14:22
https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 해당 문제는 입력값으로 주어지는 갯수가 많기 때문에 브루트포스로 모든 경우의 수를 다 구한다면 시간초과가 나기 때문에 이분 탐색을 활용하여 풀어야하는 문제입니다. 입력값 중에서 가장 큰 값을 max, 작은 값을 min 각각의 변수에는 입력값중에서 큰 값과 0이 들어갑니다. mid의 변수에는 (max+min)/2의 값이 들어갑니다. 배열의 원소에서 mid로 나누어 랜선의..
-
Java 11967 불켜기PS 2023. 8. 25. 15:30
https://www.acmicpc.net/problem/11967 11967번: 불켜기 (1, 1)방에 있는 스위치로 (1, 2)방과 (1, 3)방의 불을 켤 수 있다. 그리고 (1, 3)으로 걸어가서 (2, 1)방의 불을 켤 수 있다. (2, 1)방에서는 다시 (2, 2)방의 불을 켤 수 있다. (2, 3)방은 어두워서 갈 수 없으 www.acmicpc.net 로직은 아래와 같다. 1. 방의 좌표 값들을 2차원 Arraylist에 저장한 뒤 0, 0 에서부터 bfs 탐색을 시작한다. 2. 큐에서 꺼낸 좌표 값을 x,y라고 하겠다. 방의 좌표가 있는 Arraylist[x][y]에는 불을 켤 수 있는 좌표가 저장되어 있다. for each문으로 켤 수 있는 모든 좌표에 불을 켜준다. 3. 상,하,좌,우 ..
-
Java 1655 가운데를 말해요PS 2023. 8. 25. 10:25
https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 시간 제한이 0.1초이기에 원소가 들어올 때 마다 중간값을 찾는다면 시간초과가 날 것이다.(N이 최대 100,000이기 때문에) 그래서 우선순위 큐를 두개를 사용하여 해당 문제를 풀이하였다. 문제의 예시처럼 1, 5, 2 10, -99, 7, 5 가 입력 값으로 주어질 때 원소 하나당 어떤 작업이 이루어지는지 살펴보겠다. 우선 1이 들어올 때 모든 큐에 값이 없으므로 maxHeap..
-
IoC 컨테이너(Application Context)와 빈Spring 2023. 8. 22. 13:07
해당 글은 공부한 내용을 정리한 것이며 잘못된 오류가 있다면 지적 부탁드립니다. IoC 컨테이너란 ? 스프링에서 객체를 빈으로 관리하며, 빈 관리가 IoC (Inversion of Control) 컨테이너의 역할입니다. 기본적으로 스프링에서 모든 빈은 싱글톤(Singleton) 스코프로 등록되며, 하나의 객체 인스턴스가 생성되어 여러 곳에서 공유됩니다. 이로 인해 초기 생성 비용을 단 한 번만 지불하면 되는 장점이 있습니다. 또한, 빈으로 등록한 객체들의 의존성 주입(DI)을 IoC 컨테이너가 수행하고, 빈의 생명주기 관리도 해줌으로써 개발자가 객체의 생성과 의존성 주입 등을 관리하는 수고를 덜게 됩니다. 이로써 제어의 역할이 코드를 작성하는 사용자에서 스프링 프레임워크로 역전되므로 "Inversion ..
-
Java 2636 치즈PS 2023. 8. 22. 11:01
https://www.acmicpc.net/problem/2636 2636번: 치즈 아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓 www.acmicpc.net 문제를 보고 치즈를 중심으로 공기와 닿는 지 아닌지를 체크하며 풀이를 하다가 문제에 가장자리에는 치즈가 놓일 수 없다는 조건을 다시 확인하였고 가장자리에서부터 녹는 치즈인지 아닌지를 체크하며 문제를 풀이하였다. 핵심 로직은 다음과 같다. 1. 초기 치즈 갯수를 카운트 해준 뒤 가장자리에서부터 상하좌우 bfs 탐색을 진행한다. 2. 치즈를 만난다면 해당 치즈는 녹는 치즈이므로 치즈 갯수를 빼준다. 3. 모든 치즈가 녹..