Skip to content

Commit 8173842

Browse files
committed
feat : 프로그래머스 dp 문제
1 parent 2f99476 commit 8173842

File tree

4 files changed

+143
-33
lines changed

4 files changed

+143
-33
lines changed

src/main/java/sgyj/programmers/yeji/cs/Solution42839.java

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,19 @@
11
package sgyj.programmers.yeji.cs;
22

33
import java.util.HashSet;
4+
import java.util.List;
45
import java.util.Set;
56

67
public class Solution42839 {
7-
private static boolean[] visited;
8-
private static Set<Integer> answer = new HashSet<>();
98

9+
private static Set<Integer> primeSet = new HashSet<>();
10+
private static boolean[] visited;
11+
private static Character[] cm;
12+
private static int answer = 0;
1013
public static int solution(String numbers) {
11-
String[] numberStr = numbers.split("");
12-
int n = numberStr.length;
13-
visited = new boolean[n];
14-
for(int i=0; i<n; i++){
15-
visited[i] = true;
16-
checkPrime(numberStr,i,n,numberStr[i],0);
17-
}
18-
return answer.size();
19-
}
2014

21-
public static void checkPrime(String[] numberStr, int i, int n,String target, int count){
22-
if(i==n && count != n) i=0;
23-
if(i==n || count == n) return;
24-
if(!visited[i]){
25-
target += numberStr[i];
26-
}
27-
if(isPrime(Integer.valueOf(target))){
28-
answer.add(Integer.valueOf(target));
29-
}
30-
visited[i] = true;
31-
checkPrime(numberStr,i+1,n,target,count+1);
32-
visited[i] = false;
33-
}
3415

35-
public static boolean isPrime(int target){
36-
boolean isPrime = true;
37-
if(target == 0 || target == 1) return false;
38-
for(int p=2; p<target; p++){
39-
if(target % p == 0) {
40-
isPrime = false;
41-
}
42-
}
43-
return isPrime;
16+
return answer;
4417
}
4518

4619
public static void main ( String[] args ) {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package sgyj.programmers.yeji.dp;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashSet;
5+
import java.util.List;
6+
import java.util.Set;
7+
8+
// N으로 표현
9+
public class Solution42895 {
10+
public static int solution(int N, int number) {
11+
List<Set<Integer>> countList = new ArrayList<>();
12+
13+
for(int i=0; i<9; i++)
14+
countList.add(new HashSet<>());
15+
16+
countList.get(1).add(N); // N을 1개 쓴 값은 N 혼자이다.
17+
18+
for(int i=2; i<9; i++){
19+
Set<Integer> countSet = countList.get(i);
20+
21+
for(int j=1; j<=i; j++){
22+
Set<Integer> preSet = countList.get(j);
23+
Set<Integer> postSet = countList.get(i - j);
24+
25+
for(int preNum : preSet){
26+
for(int postNum : postSet){
27+
countSet.add(preNum + postNum);
28+
countSet.add(preNum - postNum);
29+
countSet.add(preNum * postNum);
30+
31+
if(preNum != 0 && postNum != 0)
32+
countSet.add(preNum / postNum);
33+
}
34+
}
35+
}
36+
37+
countSet.add(Integer.parseInt(String.valueOf(N).repeat(i)));
38+
}
39+
40+
for(Set<Integer> sub : countList){
41+
if(sub.contains(number))
42+
return countList.indexOf(sub);
43+
}
44+
45+
return -1;
46+
}
47+
public static void main ( String[] args ) {
48+
int N = 2;
49+
int number = 11;
50+
System.out.println( solution(N,number) );
51+
}
52+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package sgyj.programmers.yeji.dp;
2+
3+
public class Solution42898 {
4+
private static int[][] distance;
5+
private static int minDistance = Integer.MAX_VALUE;
6+
private static int answer = 0;
7+
public static int solution(int m, int n, int[][] puddles) {
8+
distance = new int[n+1][m+1];
9+
// 방문할수 없는 곳
10+
for(int[] puddle : puddles){
11+
distance[puddle[0]][puddle[1]] = -1;
12+
}
13+
14+
findDistance(1,1,n,m,0);
15+
16+
return answer;
17+
}
18+
19+
public static void findDistance(int x, int y, int n, int m,int i){
20+
if((x==m && y == n-1) || (y==n && x==m-1)){
21+
distance[x][y] = 0;
22+
if(minDistance == i){
23+
answer++;
24+
}
25+
if(minDistance>i){
26+
minDistance = i;
27+
answer = 1;
28+
}
29+
return;
30+
}
31+
if(x<n && y<m && distance[x][y] != -1){
32+
distance[x][y] = i;
33+
findDistance( x+1,y,n,m,i+1 );
34+
findDistance( x,y+1,n,m,i+1 );
35+
}
36+
37+
}
38+
39+
public static void main ( String[] args ) {
40+
int m = 4;
41+
int n = 3;
42+
int[][] puddles = {{2,2}};
43+
44+
System.out.println(solution(m,n,puddles));
45+
}
46+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package sgyj.programmers.yeji.dp;
2+
3+
public class Solution43105 {
4+
5+
public static int solution(int[][] triangle) {
6+
int answer = 0;
7+
int n = triangle.length;
8+
int[][] visited = new int[n][triangle[n-1].length];
9+
visited[0][0] = triangle[0][0];
10+
for(int i=1; i<n; i++){
11+
for(int j=0; j<=i; j++){
12+
if(j==0){
13+
visited[i][j] = visited[i-1][j] + triangle[i][j];
14+
}else if(j == i){
15+
visited[i][j] = visited[i-1][j-1] + triangle[i][j];
16+
}else{
17+
int compare = triangle[i][j] + visited[i-1][j-1];
18+
int compare2 = triangle[i][j] + visited[i-1][j];
19+
int max = Math.max( compare2,compare );
20+
visited[i][j] = max;
21+
}
22+
}
23+
}
24+
25+
for(int v : visited[n-1]){
26+
answer = Math.max( answer,v );
27+
}
28+
29+
return answer;
30+
}
31+
32+
public static void main ( String[] args ) {
33+
int[][] triangle = {
34+
{7},{3,8},{8,1,0},{2,7,4,4},{4,5,2,6,5}
35+
};
36+
37+
System.out.println(solution(triangle));
38+
}
39+
}

0 commit comments

Comments
 (0)