목록Data Structure & Algorithm/PS - JAVA (270)
Dev.baelanche
무슨 방법을 쓰든 위, 아래, 대각선으로 대칭되는 배열을 구하면 된다. 배열을 4개 만들어서 배열을 각각 구하고 합치는 방식으로 풀었는데 끝내고보니 참 별로다. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int r = sc.nextInt(); int c = sc.nextInt(); char card[][] = new char[r][c]; char card2[][] = new char[r][c]; char card3[][] = new char[r][c]; char card4[][] = new char[r][c]; char full[][] = new char[r*2][c*2]; for(int i=0; i0; i-..
1929번 문제를 풀때와 마찬가지로 소수를 제거하고 n
1부터 1000000의 수 중에 2가 아닌 2의 배수, 3이 아닌 3의 배수, 5가 아닌 5의 배수를 제외한 나머지를 출력한다. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int prime[] = new int[n+1]; prime[1] = 0; for(int i=2; i
입력이 4 1 5 6 7 일때 카드팩은 총 4장을 구매하고, 왼쪽부터 1카드팩을 사려면 1원이 들고 카드 갯수는 1장, 2카드팩을 사려면 5원이 들고 카드 갯수는 2장, 3카드팩을 사려면 6원이 들고 카드 갯수는 3장, 4카드팩을 사려면 7원이 들고 카드 갯수는 4장 이라는 뜻이다. 즉 4번째 카드팩을 구매하면 민규가 총 4장을 사기로 했으므로 1개밖에 못사고 7원이 든다. dp 배열을 만들어서 dp[n] 에 카드를 n장 샀을때 드는 최대값을 기록하는 방식으로 풀것이다. dp 배열과 연산할 배열 pack[] 를 만들고 카드를 n장 살때 드는 비용을 기록한다. (위의 예로 들면 1,5,6,7) 점화식을 구해보자. (편의상 dp[0]=0, card[0]=0 으로 했다) dp[1] = pack[1]; dp[2..
스택 관련 문제이다. 스택에 '(' 기호가 들어오면 모두 push하고, ')' 기호가 들어오면 스택의 top이 '(' 일때 push 한다. 입력이 끝났을때 스택이 비어있으면 VPS 조건이 성립한다. public class Main { Node head; int size = 0; class Node { Node prev; Object value; Node(Object value) { this.value = value; } } public void push(Object value) { Node node = new Node(value); if(size >= 1) node.prev = head; head = node; size++; } public Object pop() { if(size == 0) { retu..
스택으로 입출력하면 되는 간단한 문제이다. 본 문제에서는 직접 구현한 스택으로 풀었다. import java.util.Scanner; public class Main { Node head; int size = 0; class Node { Node prev; Object value; Node(Object value) { this.value = value; } } public void push(Object value) { Node node = new Node(value); if(size >= 1) node.prev = head; head = node; size++; } public Object pop() { if(size == 0) { return -1; } Node temp = head; head = he..
경우의 수를 구해보면 f(n) = 2(fn-2) + (f-1) 이다. 동적계획법으로 풀면 된다. public static int[] dp; public static int f(int n) { if(n == 0) {dp[0] = 0; return 0;} if(n == 1) {dp[1] = 1; return 1;} if(n == 2) {dp[2] = 3; return 3;} if(n == 3) {dp[3] = 5; return 5;} if(dp[n] != -1) return dp[n]; int result = 2*(f(n-2)%10007) + f(n-1)%10007; dp[n] = result; return result; } public static void main(String[] args) { Scann..
n의 증가에 따른 방법의 수를 구해보면 피보나치 수열이다. public static int dp[]; public static int f(int n) { if(n == 0) {dp[0] = 0; return 0;} if(n == 1) {dp[1] = 1; return 1;} if(n == 2) {dp[2] = 2; return 2;} if(dp[n] != -1) return dp[n]; int result = f(n-2)%10007 + f(n-1)%10007; dp[n] = result; return result; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); dp = ..