목록백준 (27)
-
더하기 사이클 1110https://www.acmicpc.net/problem/1110 [풀이] 문제에 풀이과정이 다 나와있기 때문에 차근차근 문제의 설명을 따라가면 어렵지 않게 풀 수 있다.10의자리와 1의자리를 구하고 left = num / 10 (10의자리) right = num % 10 (1의자리)다음 숫자를 구한 다음 count++해준다. tmp = right*10 * (left+right)%10새로운 숫자의 10의자리와 1의자리를 구한다. ll = tmp/10 rr = tmp%10left 와 ll 그리고 right와 rr이 같은지 체크한 뒤같으면 count 출력같지 않으면 위의 작업 반복해준다. 123456789101112131415161718192021222324252627import jav..
숫자삼각형 1932https://www.acmicpc.net/problem/1932 [문제풀이]작성중 123456789101112131415161718192021222324252627282930313233343536373839import java.io.BufferedReader;import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int row = Integer.par..
계단오르기 2579https://www.acmicpc.net/problem/2579 [문제 풀이] i번째 계단을 밟았을 때 최댓값은 두 경우 - i-2번째 계단 밟고 i번째 밟을 경우 - i-1번째 계단 밟고 i번째 밟을 경우중 최댓값을 고르면 답!!??이 아니라 틀린다!! 2번조건 "연속된 세 개의 계단을 밟으면 안된다"는 조건이 있기 때문이다! 자, 그러면 어떻게 풀어야 할까?일단 2차원 배열을 생성한다. i번째 계단을 밟았을 때 1) 1번 연속으로 밟은 경우 : dp[1][i] 2) 2번 연속으로 밟은 경우 : dp[2][i]두 경우로 나눌 수 있다! 이때, 1) i번째 계단을 1번 연속으로 밟기 위해서는 i-2번째 계단에서 2칸 이동하는 방법밖에 없으므로 dp[1][i] = max(dp[1][i-..
이친수 2193https://www.acmicpc.net/problem/2193 [문제 풀이]자리수 : n dp[i][0] : i자리 이친수 중 0으로 끝나는 이친수의 개수dp[i][1] : i자리 이친수 중 1로 끝나는 이친수의 개수 dp[i][0] = dp[i-1][0]+dp[i-1][1]dp[i][1] = dp[i-1][0] 답 : dp[n][0]+dp[n][1] 1234567891011121314151617181920212223import java.io.BufferedReader;import java.io.InputStreamReader; /* * 2193번 이친수 */public class Main{ static long d[][]; static int n; public static void m..
1로 만들기 1463https://www.acmicpc.net/problem/1463 [풀이방법]dp[i] = i를 1로 만드는 최소 연산 수 dp[i] = min(dp[i-1], dp[i/2], dp[i/3])+1 모든 연산을 마친 후 dp[i]를 출력하면 답! 123456789101112131415161718192021222324252627282930313233import java.util.Scanner;/* * X가 3으로 나누어 떨어지면, 3으로 나눔. * X가 2로 나누어 떨어지면, 2로 * 1을 뺀다. * 범위 : 1 2 -> 1이렇게 4번이 걸린다.
RGB거리 1149https://www.acmicpc.net/problem/1149 [풀이방법]dp[0][i] = i번째에 R을 칠할 때 까지 든 최소비용dp[1][i] = i번째에 G을 칠할 때 까지 든 최소비용dp[2][i] = i번째에 B을 칠할 때 까지 든 최소비용이라고 할 때 dp[0][i] = min(dp[1][i-1], dp[2][i-1])+i번째 R을 칠할때 드는 비용dp[1][i] = min(dp[0][i-1], dp[2][i-1])+i번째 G을 칠할때 드는 비용dp[2][i] = min(dp[1][i-1], dp[0][i-1])+i번째 B을 칠할때 드는 비용 dp[0][i], dp[1][i], dp[2][i] 중 최솟값을 출력하면 된다. 123456789101112131415161718..
피보나치 함수 1003https://www.acmicpc.net/problem/1003 [문제 요약]숫자 n이 주어지고, f(n)을 n번째 피보나치 수라고 할 때, f(n)을 구하기 위해 f(0)과 f(1)이 몇 번 호출됐는지 구하기 입력과 출력 형식은 이렇다. 문제 분류는 DP로 되어있지만 그냥 재귀로 풀어도 시간초과 나지 않고 풀린다... 12345678910111213141516171819202122232425262728import java.io.*; public class Main { static int n1=0; static int n0=0; public static void main(String[] args) throws Exception { // TODO Auto-generated metho..