알고리즘/문제풀이 79

[DP] 제단

백준 5626 제단https://www.acmicpc.net/problem/5626 그냥 DP로 하면 메모리가 부족하다. 그래서 Sliding Widow로 지금거 바로 이전것만 저장하면서 진행.D[0][]과 D[1][] 두개로 돌려막기한다. 홀,짝으로 구분. package 제단; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { static long[][] D; //슬라이딩 윈도우 - i번째(두개로 슬라이딩) 높이가 j인 경우의 수 static final long MOD = 1000000007; pu..

[그래프] LCA2

백준 11438 LCA2https://www.acmicpc.net/problem/11438 아직 소스 개선의 여지가 많이 남아있음.package com.company; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static int[][] parent; // parent[a][b] a의 2^b번째 부모 static ArrayList[] adj; //트리 static int[] depth; publ..

[정수론] 소인수분해

백준 11653 소인수분해https://www.acmicpc.net/problem/11653 1은 소인수분해하면 아무것도 없어야 한다. 1로 출력하면 틀림. for문에서 N이 계속해서 변하는 것이 특이함.package com.company; import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int N = sc.nextInt(); if(N==1) return; for(int i=2; i

[DFS] 단절점

백준 11266 단절점https://www.acmicpc.net/problem/11266 자신의 자손(다음) Vertex가 자신을 거치지 않고 자신의 조상(이미 거쳐왔던 곳)에 도달할 수 없으면 단절점이다.인접리스트로 바꾸면 좀 더 빨라질 것 같음.package com.company; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int V, E; static int[] order; //방문여부 static int[] cutVertex; //단절점 static int[][] ma..

[DP] 막대기, 최장공통부분수열, knapsack

package com.company; public class Main { public static void main(String[] args) { int[][] item = {{1, 6, 10}, {2, 100, 20}, {3, 120, 30}}; // int maxValue = knapsack(item, 50); // System.out.println("최대가치: " + maxValue); int[] rodPrice = {0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30}; // System.out.println("2칸일때 최대이익: " + cutRod(rodPrice, 2)); // System.out.println("3칸일때 최대이익: " + cutRod(rodPrice, 3));..

[시뮬레이션] 탈주범 검거

[모의 SW 역량테스트] 탈주범 검거https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpLlKAQ4DFAUq package com.company; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class PrisonBreak { //상하좌우 static int[] dy = {-1,1,0,0}; static int[] dx = {0,0,-1,1}; static int N,M; public static void main(String[] args) { Scanner sc = new Scanner(Syst..

[조합(재귀), 완전탐색] 치킨배달

[삼성 SW 역량 테스트 기출 문제] 치킨배달https://www.acmicpc.net/problem/15686 package com.company; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Chicken { static List shops = new ArrayList(); //치킨집의 위치를 담고있는 리스트 static List homes = new ArrayList(); //집의 위치를 담고있는 리스트 static int minDisSum = 10000; //모든 집에서의 치킨거리 합 중에서 최솟값 public static void main(String[] args) { Scanne..

[BFS] 이상한 계산기

이상한 계산기 이상한 계산기는 두 가지 버튼과 숫자를 출력하는 화면으로 구성되어 있다. 숫자를 출력하는 화면은 총 5자리의 정수를 표현할 수 있다. 각 버튼은 현재까지의 계산 결과에 어떠한 연산을 할지를 나타내는 것으로, 각 버튼은 다음과 같이 연산을 수행한다.Mul : 현재까지의 계산 결과에 2를 곱한다Div : 현재까지의 계산 결과를 3으로 나눈다. 단, 결과가 정수가 아닐 경우, 소수점 이하를 모두 버린다.계산기를 작동시키면, 현재까지의 계산 결과로써 1이 출력된다. 이후 사용자가 어떻게 버튼을 누르냐에 따라 출력되는 숫자가 달라진다. 예를 들어, 계산기를 작동시키면 1이 출력되고, 여기서 Mul를 누르면 2가 되며, 또 Mul을 누르면 4가 출력된다.영수는 이 계산기가 모든 숫자를 출력할 수 있는..

단지번호 붙이기

민경 :)단지번호 붙이기https://www.acmicpc.net/problem/2667 package com.company; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class BottleNumber { static int N; static List groups = new ArrayList(); //각 단지의 집 숫자 //상하좌우 static int[] dx = {0,0,-1,1}; static int[] dy = {-1,1,0,0}; public static void main(String[] args) { Scanner sc = new Sc..

[BFS,DFS] 타겟넘버

[프로그래머스] 깊이/너비 우선탐색(BFS/DFS) 타겟넘버 https://programmers.co.kr/learn/courses/30/lessons/43165 *재귀를 활용package com.company; public class TargetNumber { static int TARGET = 3; static int ANSWER_COUNT = 0; public static void main(String[] args) { int[] numbers = {1,1,1,1,1}; makeOperator(numbers, 0); } private static void makeOperator(int[] numbers, int k) { //k는 number의 index if(k < numbers.length){ n..

[정렬] 다리를 지나는 트럭

[프로그래머스] 다리를 지나는 트럭https://programmers.co.kr/learn/courses/30/lessons/42583 *객체 활용package com.company; import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args) { // write your code here int bridge_length=2; int weight=10; int[] truck_weights={7,4,5,6}; int bWeight=0; //다리 위 트럭무게의 합 //출발대기 트럭 Queue trucks_r = new LinkedList(); for(int truck_w..