Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit efac2f5

Browse files
이지영: [BOJ] 2629 양팔저울_250228
1 parent 9a70c62 commit efac2f5

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

‎BOJ/1000-5000번/JY_2629.java

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import java.io.*;
2+
import java.util.*;
3+
public class JY_2629 {
4+
5+
public static void main(String[] args) throws IOException {
6+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
StringTokenizer st = new StringTokenizer(br.readLine());
8+
StringBuilder sb = new StringBuilder();
9+
10+
int N = Integer.parseInt(st.nextToken());
11+
int[] wrr = new int[N+1];
12+
st = new StringTokenizer(br.readLine());
13+
for(int i=1; i<N+1; i++) {
14+
wrr[i] = Integer.parseInt(st.nextToken());
15+
}
16+
17+
st = new StringTokenizer(br.readLine());
18+
int C = Integer.parseInt(st.nextToken());
19+
int[] coins = new int[C+1];
20+
st = new StringTokenizer(br.readLine());
21+
for(int i=1; i<C+1; i++) {
22+
coins[i] = Integer.parseInt(st.nextToken());
23+
}
24+
25+
// 만들 수 있는 최대 구슬의 무게 == (가장큰추의무게 * 추의 개수)
26+
int maxW = wrr[N] * N;
27+
28+
29+
// case2) 1차원
30+
int[] dp = new int[maxW+1];
31+
dp[0] = 1;
32+
33+
for(int i=1; i<N+1; i++) {
34+
for(int j=maxW; j>=wrr[i]; j--) {
35+
dp[j] = dp[j] + dp[j-wrr[i]];
36+
}
37+
}
38+
39+
for(int i=1; i<C+1; i++) {
40+
int c = coins[i];
41+
// 구슬이 최소 추의 무게보다 작다면 X
42+
if(c < wrr[0]) {
43+
sb.append("N ");
44+
continue;
45+
}
46+
// 구슬이 만들 수 있는 최대 무게보다 크다면 X
47+
if(c > maxW) {
48+
sb.append("N ");
49+
continue;
50+
}
51+
52+
// 구슬 --- 추(n개)
53+
if(dp[c] != 0) {
54+
sb.append("Y ");
55+
}
56+
// 구슬+추(n개) --- 추(m개)
57+
else {
58+
boolean isOk = false;
59+
// 가지고 있는 추 n개로 만들수 있는 무게에 구슬을 더한 값이
60+
// 또 다른 추 m개로 만들 수 있는 무게값과 같은 것이 있는지 체크
61+
for(int j=1; j<maxW+1; j++) {
62+
if(j + c > maxW) break;
63+
if(dp[j] != 0 && dp[j+c] != 0) {
64+
sb.append("Y ");
65+
isOk = true;
66+
break;
67+
}
68+
}
69+
if(!isOk) sb.append("N ");
70+
}
71+
}
72+
73+
System.out.println(sb.toString());
74+
75+
// case1) 2차원
76+
// int[][] dp = new int[N+1][maxW+1];
77+
// for(int i=0; i<N+1; i++) {
78+
// dp[i][0] = 1;
79+
// }
80+
//
81+
//
82+
// for(int i=1; i<N+1; i++) {
83+
// for(int j=1; j<maxW+1; j++) {
84+
// if(wrr[i] > j) dp[i][j] = dp[i-1][j];
85+
// else {
86+
// dp[i][j] = dp[i-1][j] + dp[i-1][j-wrr[i]];
87+
// }
88+
// }
89+
// }
90+
//
91+
// for(int i=1; i<N+1; i++) {
92+
// System.out.println(Arrays.toString(dp[i]));
93+
// }
94+
95+
}
96+
97+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /