From 0abdff151c4c42eab8132cd85f452de09fe2ed26 Mon Sep 17 00:00:00 2001 From: Jinyeong Seol Date: Thu, 20 Feb 2025 20:34:03 +0900 Subject: [PATCH] =?UTF-8?q?[20250220]=20SWEA=20/=20D4=20/=20=EB=8F=99?= =?UTF-8?q?=EC=95=84=EB=A6=AC=EC=8B=A4=20=EA=B4=80=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20/=20=EC=84=A4=EC=A7=84=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...00\353\246\254\355\225\230\352\270\260.md" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Seol-JY/202502/20 SWEA D4 \353\217\231\354\225\204\353\246\254\354\213\244 \352\264\200\353\246\254\355\225\230\352\270\260.md" diff --git "a/Seol-JY/202502/20 SWEA D4 \353\217\231\354\225\204\353\246\254\354\213\244 \352\264\200\353\246\254\355\225\230\352\270\260.md" "b/Seol-JY/202502/20 SWEA D4 \353\217\231\354\225\204\353\246\254\354\213\244 \352\264\200\353\246\254\355\225\230\352\270\260.md" new file mode 100644 index 00000000..49d55414 --- /dev/null +++ "b/Seol-JY/202502/20 SWEA D4 \353\217\231\354\225\204\353\246\254\354\213\244 \352\264\200\353\246\254\355\225\230\352\270\260.md" @@ -0,0 +1,46 @@ +```java +import java.io.*; + +public class Solution { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int testCases = Integer.parseInt(br.readLine()); + for (int tc = 1; tc <= testCases; tc++) { + String sequence = br.readLine(); + System.out.println("#" + tc + " " + solve(sequence, sequence.length())); + } + } + + private static int solve(String sequence, int length) { + int[][] dp = new int[16][length]; + final int MOD = 1_000_000_007; + + int firstState = (1 << (sequence.charAt(0) - 'A')) | 1; + for (int state = 1; state <= 15; state++) { + if ((state & firstState) == firstState) { + dp[state][0] = 1; + } + } + + for (int pos = 1; pos < length; pos++) { + int currentPerson = 1 << (sequence.charAt(pos) - 'A'); + for (int currState = 1; currState <= 15; currState++) { + if ((currState & currentPerson) == currentPerson) { + for (int prevState = 1; prevState <= 15; prevState++) { + if (dp[prevState][pos-1] > 0 && ((currState & prevState) > 0)) { + dp[currState][pos] = (dp[currState][pos] + dp[prevState][pos-1]) % MOD; + } + } + } + } + } + + int result = 0; + for (int state = 1; state <= 15; state++) { + result = (result + dp[state][length-1]) % MOD; + } + return result; + } +} +```