From b8d330fa03fb7e26cae113c69e62432885e7dda2 Mon Sep 17 00:00:00 2001 From: LiiNi-coder <97495437+LiiNi-coder@users.noreply.github.com> Date: Wed, 20 Aug 2025 23:59:01 +0900 Subject: [PATCH] =?UTF-8?q?[20250820]=20PGM=20/=20LV2=20/=20=EB=91=90=20?= =?UTF-8?q?=ED=81=90=20=ED=95=A9=20=EA=B0=99=EA=B2=8C=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EA=B8=B0=20/=20=EC=9D=B4=EC=9D=B8=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \353\247\214\353\223\244\352\270\260.md" | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 "LiiNi-coder/202508/20 PGM \353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260.md" diff --git "a/LiiNi-coder/202508/20 PGM \353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260.md" "b/LiiNi-coder/202508/20 PGM \353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260.md" new file mode 100644 index 00000000..d5232ad4 --- /dev/null +++ "b/LiiNi-coder/202508/20 PGM \353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260.md" @@ -0,0 +1,92 @@ +```java +import java.util.*; + +class Solution { + static class BfsQElement { + int count; + ArrayDeque q1; + ArrayDeque q2; + long sum1; + long sum2; + + BfsQElement(int count, ArrayDeque q1, ArrayDeque q2, long sum1, long sum2) { + this.count = count; + this.q1 = q1; + this.q2 = q2; + this.sum1 = sum1; + this.sum2 = sum2; + } + } + + public int solution(int[] queue1, int[] queue2) { + long total = 0; + long sum1 = 0, sum2 = 0; + + var q1 = new ArrayDeque(); + var q2 = new ArrayDeque(); + + for (int i : queue1) { + q1.offer(i); + sum1 += i; + total += i; + } + for (int i : queue2) { + q2.offer(i); + sum2 += i; + total += i; + } + if (total % 2 != 0) + return -1; + long target = total / 2; + var bfsQ = new ArrayDeque(); + bfsQ.offer(new BfsQElement(0, q1, q2, sum1, sum2)); + + Set visited = new HashSet<>();//방문상태 + visited.add(sum1 + "," + sum2); + + while (!bfsQ.isEmpty()) { + BfsQElement cur = bfsQ.poll(); + + if (cur.sum1 == target) { + return cur.count; + } + + if (!cur.q1.isEmpty()) { + int val = cur.q1.peek(); + var newQ1 = new ArrayDeque<>(cur.q1); + var newQ2 = new ArrayDeque<>(cur.q2); + newQ1.poll(); + newQ2.offer(val); + + long newSum1 = cur.sum1 - val; + long newSum2 = cur.sum2 + val; + String key = newSum1 + "," + newSum2; + + if (!visited.contains(key)) { + visited.add(key); + bfsQ.offer(new BfsQElement(cur.count + 1, newQ1, newQ2, newSum1, newSum2)); + } + } + + if (!cur.q2.isEmpty()) { + int val = cur.q2.peek(); + var newQ1 = new ArrayDeque<>(cur.q1); + var newQ2 = new ArrayDeque<>(cur.q2); + newQ2.poll(); + newQ1.offer(val); + + long newSum1 = cur.sum1 + val; + long newSum2 = cur.sum2 - val; + String key = newSum1 + "," + newSum2; + + if (!visited.contains(key)) { + visited.add(key); + bfsQ.offer(new BfsQElement(cur.count + 1, newQ1, newQ2, newSum1, newSum2)); + } + } + } + + return -1; + } +} +```