Skip to content

Commit 2ee75f3

Browse files
authored
Merge pull request #703 from AlgorithmWithGod/LiiNi-coder
[20250820] PGM / LV2 / 두 큐 합 같게 만들기 / 이인희
2 parents 295f4bb + b8d330f commit 2ee75f3

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
```java
2+
import java.util.*;
3+
4+
class Solution {
5+
static class BfsQElement {
6+
int count;
7+
ArrayDeque<Integer> q1;
8+
ArrayDeque<Integer> q2;
9+
long sum1;
10+
long sum2;
11+
12+
BfsQElement(int count, ArrayDeque<Integer> q1, ArrayDeque<Integer> q2, long sum1, long sum2) {
13+
this.count = count;
14+
this.q1 = q1;
15+
this.q2 = q2;
16+
this.sum1 = sum1;
17+
this.sum2 = sum2;
18+
}
19+
}
20+
21+
public int solution(int[] queue1, int[] queue2) {
22+
long total = 0;
23+
long sum1 = 0, sum2 = 0;
24+
25+
var q1 = new ArrayDeque<Integer>();
26+
var q2 = new ArrayDeque<Integer>();
27+
28+
for (int i : queue1) {
29+
q1.offer(i);
30+
sum1 += i;
31+
total += i;
32+
}
33+
for (int i : queue2) {
34+
q2.offer(i);
35+
sum2 += i;
36+
total += i;
37+
}
38+
if (total % 2 != 0)
39+
return -1;
40+
long target = total / 2;
41+
var bfsQ = new ArrayDeque<BfsQElement>();
42+
bfsQ.offer(new BfsQElement(0, q1, q2, sum1, sum2));
43+
44+
Set<String> visited = new HashSet<>();//방문상태
45+
visited.add(sum1 + "," + sum2);
46+
47+
while (!bfsQ.isEmpty()) {
48+
BfsQElement cur = bfsQ.poll();
49+
50+
if (cur.sum1 == target) {
51+
return cur.count;
52+
}
53+
54+
if (!cur.q1.isEmpty()) {
55+
int val = cur.q1.peek();
56+
var newQ1 = new ArrayDeque<>(cur.q1);
57+
var newQ2 = new ArrayDeque<>(cur.q2);
58+
newQ1.poll();
59+
newQ2.offer(val);
60+
61+
long newSum1 = cur.sum1 - val;
62+
long newSum2 = cur.sum2 + val;
63+
String key = newSum1 + "," + newSum2;
64+
65+
if (!visited.contains(key)) {
66+
visited.add(key);
67+
bfsQ.offer(new BfsQElement(cur.count + 1, newQ1, newQ2, newSum1, newSum2));
68+
}
69+
}
70+
71+
if (!cur.q2.isEmpty()) {
72+
int val = cur.q2.peek();
73+
var newQ1 = new ArrayDeque<>(cur.q1);
74+
var newQ2 = new ArrayDeque<>(cur.q2);
75+
newQ2.poll();
76+
newQ1.offer(val);
77+
78+
long newSum1 = cur.sum1 + val;
79+
long newSum2 = cur.sum2 - val;
80+
String key = newSum1 + "," + newSum2;
81+
82+
if (!visited.contains(key)) {
83+
visited.add(key);
84+
bfsQ.offer(new BfsQElement(cur.count + 1, newQ1, newQ2, newSum1, newSum2));
85+
}
86+
}
87+
}
88+
89+
return -1;
90+
}
91+
}
92+
```

0 commit comments

Comments
 (0)