https://www.acmicpc.net/problem/1008import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main{ public void solution() throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); System.out.println(Double.parseDouble(st.nextToken())/Double.pars..
https://www.acmicpc.net/problem/9251https://youtu.be/sSno9rV8Rhg?si=3rhs0KtLbIaZU-h3해당 영상에서 LCS 문제를 잘 설명하고 있어 추천한다. import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public void solution() throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); char[] str1 = br.readLine().toCharArray(); char[] str2 = br...
https://www.acmicpc.net/problem/2607입력된 단어를 char 배열로 분해해서, 오름차순으로 정렬한 뒤 머지 소트처럼 비교대상 배열과 현재 배열과 포인터를 움직이며 비교한다. 같을 경우 두 포인터 모두 한 칸씩 이동하고, 한 쪽이 더 작은 알파벳일 경우 작은 알파벳 쪽 포인터를 한 칸 움직인다. 이때 작은 쪽이 한 글자 다르다는 것을 변수에 저장해준다. 만약 이 변수가 2 이상일 경우, 두 글자 이상 다르므로 반복문을 깬다.CAD, DAD 처럼 한 글자를 대체할 경우 비슷한 단어로 간주되기 때문에, 다른 글자의 개수를 세는 것은 두 배열 각자여야 한다.해당 예시의 경우, 오름차순으로 배열하면 A D D, A C D가 된다.처음 A는 동일하기 때문에 두 배열의 포인터를 모두 움직..
https://www.acmicpc.net/problem/2143부 배열의 합들의 인덱스를 기억할 필요가 없기 때문에, 부 배열의 합들 개수를 세서 Hashmap 에 넣은 뒤, a 배열의 부배열 합을 T값에서 뺀 게 B 배열의 부배열 합에 있는 지 확인한 뒤 두 개수를 곱해서 답에 더해주면 된다.import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import java.util.StringTokenizer;public class Main { public void solution() throws Exception{ BufferedReader br ..
https://www.acmicpc.net/problem/1351인덱스의 크기가 int 범위를 넘어갈 수 있음 -> int 배열 사용 불가, HashMap 사용해야 함dp를 사용해서 1부터 n까지 할 경우 무조건 메모리 초과남 -> 필요한 인덱스만 top-down으로 쪼개가며 하기단, 시간 초과를 막기 위해서 HashMap에 값들 저장해가며 하기import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main { Map map = new HashMap(); long n, p, q; public void solution() throws Exception{ Buffer..
https://www.acmicpc.net/problem/14916dp[i-5] , dp[i-2] 중 0 이상이면서 둘중 작은 값에 1을 더한 값을 dp[i]에 저장한다.단, 현재 2, 5로 만들 수 없는 경우 분별을 위해 -1을 넣는다.import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public void solution() throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); in..
https://www.acmicpc.net/problem/1439직전의 글자와 달라지는 횟수를 세고, 이에 1을 더하고 절반으로 나누면 됨그림에서 보면, 바꿔야 하는 그룹마다 직전 숫자와 달라지는 구간이 두 군데씩 있음을 알 수 있다.그러나 이렇게 마지막에 바뀌는 경우, 바뀌는 구간이 한 번밖에 없기 때문에 cnt에 1을 더하고 2로 나누기를 하는 것이다.import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public void solution() throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(Sys..
https://www.acmicpc.net/problem/13305현재 위치에서 다음 나보다 가격이 낮은 주유소가 나타날 때까지의 거리를 계산해서, 지금 지불해야 하는 금액*거리를 더해준 뒤 찾은 주유소로 위치를 이동하면 된다.가격이 모두 동일한 경우, 나보다 가격이 낮은 주유소로 조건을 걸면 한 칸 이동하고 다음 반복문으로 가고 하기 때문에, 가격이 나보다 작거나 같을 경우 반복문을 이어가도록 했다.import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { public void solution() throws Exception{ Buffe..
https://www.acmicpc.net/problem/2293아래는 틀린 답안queue를 사용해서 동전을 구해 봤지만...!! 당연하게도 메모리 초과가 되었다.// 오답 - 메모리 초과import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main { public void solution() throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); ..
https://www.acmicpc.net/problem/11053DP 문제두 가지 조건을 통해 반복문의 현 시점에서 가장 긴 수열 길이를 갱신나보다 수열 최대값(즉, 값)이 작음 ( arr[j] 수열 길이가 현재 저장해둔 수열 길이보다 길 경우 갱신dp 배열에 저장하는 값은 현 시점까지의 가능한 수열 길이 중 가장 긴 것!import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;public class Main { public void solution() throws Exception{ BufferedReader br = new BufferedReader(new InputStreamRead..