From 46477fe75e4eb1698afc352ed1d0aceb3d4402c1 Mon Sep 17 00:00:00 2001 From: bokyeong-Lee <149753416+kyeong8139@users.noreply.github.com> Date: Tue, 30 Jul 2024 03:46:44 +0900 Subject: [PATCH] =?UTF-8?q?Create=20=EB=81=9D=EB=A7=90=EC=9E=87=EA=B8=B02.?= =?UTF-8?q?java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...353\247\220\354\236\207\352\270\2602.java" | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 "swea/bokyeong/\353\201\235\353\247\220\354\236\207\352\270\2602.java" diff --git "a/swea/bokyeong/\353\201\235\353\247\220\354\236\207\352\270\2602.java" "b/swea/bokyeong/\353\201\235\353\247\220\354\236\207\352\270\2602.java" new file mode 100644 index 0000000..b326fa6 --- /dev/null +++ "b/swea/bokyeong/\353\201\235\353\247\220\354\236\207\352\270\2602.java" @@ -0,0 +1,77 @@ +import java.util.*; + +class UserSolution { + + static TreeSet[] words = new TreeSet[26]; + ArrayList next = new ArrayList<>(); + HashSet used = new HashSet<>(); + int n; + boolean[] isEndPlayer; + + static { + for (int i = 0; i < 26; i++) { + words[i] = new TreeSet<>(); + } + } + + public void init(int N, int M, char[][] mWords) { + next.clear(); + used.clear(); + for (int i = 0; i < 26; i++) { + words[i].clear(); + } + + n = N; + isEndPlayer = new boolean[n]; + + StringBuilder sb = null; + for (int i = 0; i < M; i++) { + sb = new StringBuilder(); + for (int j = 0; j < 10; j++) { + if (mWords[i][j] == 0) { + break; + } + + sb.append(mWords[i][j]); + } + + int idx = sb.charAt(0) - 'a'; + words[idx].add(sb.toString()); + } + } + + public int playRound(int mID, char mCh) { + for (int i = 0; i < next.size(); i++) { + StringBuilder word = new StringBuilder(next.get(i)).reverse(); + if (used.contains(word.toString())) { + continue; + } + + int idx = word.charAt(0) - 'a'; + words[idx].add(word.toString()); + } + next.clear(); + + int player = mID - 1; + + int idx = mCh - 'a'; + while (!words[idx].isEmpty()) { + String word = words[idx].pollFirst(); + next.add(word); + used.add(word); + + int lastAlphabet = word.charAt(word.length() - 1); + idx = lastAlphabet - 'a'; + + player = (player + 1) % n; + while (isEndPlayer[player]) { + player = (player + 1) % n; + } + } + + isEndPlayer[player] = true; + return player + 1; + } + + +}