diff --git a/syamauchi/src/C081.java b/syamauchi/src/C081.java new file mode 100644 index 0000000000000000000000000000000000000000..35882512313bd92f38b1b626a62ae15a2b0d9bd8 --- /dev/null +++ b/syamauchi/src/C081.java @@ -0,0 +1,92 @@ +package src; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +public class C081 { + private final int amount; + + private C081(final int amount) { + this.amount = amount; + } + + public static void main(String[] args) { + final Scanner sc = new Scanner(System.in); + new C081(sc.nextInt()).countOfPair(sc); + sc.close(); + } + + private void countOfPair(final Scanner sc) { + int pair = 0; + // 各種類の靴下の数を集計 + final Map socksMap = countOfSocks(sc); + // SocksMapからペアになる靴下を探す + for (Map.Entry firstSock : socksMap.entrySet()) { + for (Map.Entry secondSock : socksMap.entrySet()) { + if (isPair(firstSock.getKey(), secondSock.getKey())) { + // ペアが見つかった時 + pair = pair + addPair(socksMap, firstSock.getKey(), secondSock.getKey()); + + } + } + + } + + System.out.println(pair); + } + + private Map countOfSocks(final Scanner sc) { + final Map socksMap = new HashMap<>(); + for (int i = 0; i < this.amount; i++) { + final String kind = sc.next(); + final String direction = sc.next(); + final String sock = kind + direction; + addSocks(socksMap, sock); + } + + return socksMap; + } + + private void addSocks(final Map socksMap, final String sock) { + final int addValue = 1; + if (socksMap.containsKey(sock)) { + socksMap.put(sock, socksMap.get(sock) + addValue); + } else { + socksMap.put(sock, addValue); + } + } + + private int addPair(final Map socksMap, final String firstSock, + final String secondSock) { + final int decValue = 1; + int pair = 0; + while (isPairRemain(socksMap.get(firstSock), socksMap.get(secondSock))) { + pair = pair + 1; + socksMap.put(firstSock, socksMap.get(firstSock) - decValue); + socksMap.put(secondSock, socksMap.get(secondSock) - decValue); + } + return pair; + } + + private boolean isR(final String sock) { + + return (sock.charAt(1) == 'R'); + } + + private boolean isL(final String sock) { + return (sock.charAt(1) == 'L'); + } + + private boolean isPair(final String l, final String r) { + return (isL(l) && isR(r) && isSameSock(l, r)); + } + + private boolean isPairRemain(final int l, final int r) { + return (l > 0 && r > 0); + } + + private boolean isSameSock(final String a, final String b) { + return a.charAt(0) == b.charAt(0); + } +}