본문 바로가기

전체 글

(34)
11060: 점프점프 (DP) - 실패 풀이 뒤부터 체크해서 넘어가면 1로 설정하고 그 앞의 값은 해당하는 값만큼 앞의 수를 체크하는 방식으로 구현하였다. 하지만 모든 입출력에서 맞는데 왜 틀리는지는 잘모르겠음,, 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System..
2491: 수열 (DP) 풀이 연속해서 커지는 경우가 가장 긴 길이를 한번 체크하고 연속해서 작아지는 경우가 가장 긴 길이를 한번 체크해서 둘 중에 더 큰 길이의 값을 출력한다. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N..
13398: 연속합2 (DP) 풀이 1912: 연속합 문제와 연결되는 문제이다. 처음 문제와 다른점은 하나의 수를 제거하는 경우까지 포함해서 생각해야된다는 점이다. 하나를 뺄 수도 있고 안뺄 수도 있으므로 원래의 dp와 하나를 뺀 dp값을 계산해야 하므로 2차원 배열의 dp를 사용한다. dp[1][i] = dp[1][i-1] + arr[i] 10 -4 3 1 5 6 -35 12 21 -1 dp[0] 10 6 9 10 15 21 -14 12 33 32 0 0 -4 3 4 9 15 -20 12 33 32 1 10 10 13 14 19 25 -10 12 33 32 2 10 6 6 7 12 18 -17 12 33 32 3 10 6 9 9 14 20 -15 12 33 32 4 10 6 9 10 10 16 -19 12 33 32 5 10 6 9..
15990: 1,2,3 더하기 5 (DP) 풀이 처음 배열 선언을 int가 아닌 long으로 해줘야 된다는 점이 중요한 문제이다. 1 = 1 2 = 2 3 = 1+ 2, 2+1, 3 4 = 1+ 2+ 1, 1 + 3, 3 + 1 5 = 1 + 3 + 1, 2 + 3, 2 + 1 + 2, 3 + 2 6 = 1 + 2 + 3, 1 + 2 + 1 + 2, 1 + 3 + 2, 2 + 1 + 3, 2 + 1 + 2 + 1, 3 + 2 + 1, 3 + 1 + 2, 2 + 3 + 1 이를 표로 표현해보면 1 2 3 4 5 6 1 1 1 2 1 3 2 1 1 0 2 3 3 1 1 1 2 4 부터 확인해 보면 dp[n][0] = dp[n-1][1] + dp[n-1][2] dp[n][1] = dp[n-2][0] + dp[n-2][2] dp[n][2] = dp[n-..
1520: 내리막길 (DP) 풀이 dfs와 dp가 혼합된 문제이다. visited배열을 boolean으로 생성하여 체크하지 않고 int로 생성하여 몇번 방문했는지 확인할 수 있게하였다. 0,0에서 시작해서 마지막 N-1, M-1에 도착하면 뒤로 돌아가면서 +하게 해주면 마지막에 도달할 수 있는 개수가 출력되게 된다. 코드 import java.util.Scanner; public class Main { static int[][] arr; static int[][] visited; static int M; static int N; static int H = 0; static int[] dx = { -1, 1, 0, 0 }; static int[] dy = { 0, 0, -1, 1 }; public static void main(Str..
1912: 연속합 (DP) 풀이 첫번째 정수부터 체크하여 현재값을 더한 dp 값과 그 전까지의 dp값을 비교하여 큰 것이 현재까지 최대 dp값이 된다. 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] arr = new int[N]; int[] dp = new int[N]; for (int n = 0; n < N; n++) { arr[n] = sc.nextInt(); } dp[0] = arr[0]; for (int i = 1; i < N; i++) { dp[i] = Math.max(dp[i - 1] + ar..
2156: 포도주 시식 (DP) 풀이 dp를 처음 접해본 문제! 3잔을 연속으로 마실 수 없기 때문에 그때의 max값의 점화식을 구성해보면 된다. 6, 10, 13, 9, 8, 1이 차례로 들어올때 첫번째 6이 들어오면 dp[0]은 첫번째 (6) 두번째 10이 들어오면 dp[1]은 첫번째 + 두번째 (10 + 6) 세번째 13이 들어오면 dp[2]는 첫번째 + 두번째, 두번째 + 세번째, 첫번째 + 세번째 중에 가장 큰 것! 네번째 이후로 max는 그 전에 구했던 dp[i-1]과 dp[i - 2] + arr[i], dp[i - 3] + arr [i] + arr[i - 1]중에 큰 값이 된다. 코드 import java.util.Scanner; public class Main { public static void main(String[]..
CISC와 RISC CISC(Complex Instruction Set Computer) 란? 연산을 처리하는 복잡한 명령어들을 수백 개 이상 탑재하고 있는 프로세서입니다. CISC는 명령어 개수 증가에 따라 프로세서 내부구조가 매우 복잡해지고, 고속으로 작동되는 프로세서를 만들기 힘듭니다. 여기서 명령어가 복잡하다는 것의 의미는 하나의 명령어가 할 수 있는 일의 양이 RISC 대비하여 많다는 것을 의미합니다. 명령어 마다 길이가 다르고, 실행에 필요한 사이클 수도 다르기 때문에 pipelining 설계가 어려우며 한 바이트 명령어부터 100바이트이상 되는 명령어들도 있습니다. CISC의 특징 - 명령어의 개수가 많음 - 명령어 길이가 다양하며, 실행 사이클도 명령어 마다 다름 - 회로구성이 복잡함 - 프로그램을 만들 때 ..