From 8312d3f4cbedfb98d5fba96b446c3bc8ebba712a Mon Sep 17 00:00:00 2001 From: syamauchi Date: Thu, 29 Jun 2023 17:30:17 +0900 Subject: [PATCH 1/5] =?UTF-8?q?C081=E5=9B=9E=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C081.java | 114 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 syamauchi/src/C081.java diff --git a/syamauchi/src/C081.java b/syamauchi/src/C081.java new file mode 100644 index 0000000..c741f7e --- /dev/null +++ b/syamauchi/src/C081.java @@ -0,0 +1,114 @@ +package src; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +public class C081 { + private final int amount; + private final String kind; + private final String direction; + + private C081(final int amount, final String kind, final String direction) { + this.amount = amount; + this.kind = kind; + this.direction = direction; + } + + public static void main(String[] args) { + // TODO 自動生成されたメソッド・スタブ + Scanner sc = new Scanner(System.in); + new C081(sc.nextInt(), sc.next(), sc.next()).countOfPair(sc); + + } + + private void countOfPair(Scanner sc) { + int pair = 0; + // 各種類の靴下の数を集計 + final Map socks = countOfSocks(sc); + final Map lSocks = socks; + final Map rSocks = socks; + for (Map.Entry sock : socks.entrySet()) { + // 右足のとき + if (isR(sock.getKey().charAt(1)) && sock.getValue() > 0) { + // 個数ぶん回す + + for (Map.Entry lSock : lSocks.entrySet()) { + // 種類が同じで左足かつ一足以上ある + if (isSame(lSock.getKey().charAt(0), sock.getKey().charAt(0)) && isL(lSock + .getKey() + .charAt(1)) && lSock.getValue() > 0) { + // ペア数増やして個数減らす + while (sock.getValue() > 0 && lSock.getValue() > 0) { + pair = pair + 1; + sock.setValue(sock.getValue() - 1); + lSock.setValue(lSock.getValue() - 1); + } + } + + } + } else if (isL(sock.getKey().charAt(1)) && sock.getValue() > 0) { + for (int i = 0; i < sock.getValue(); i++) { + for (Map.Entry rSock : rSocks.entrySet()) { + // 種類が同じで右足かつ一足以上ある + if (isSame(rSock.getKey().charAt(0), sock.getKey().charAt(0)) && isR(rSock + .getKey() + .charAt(1)) && rSock.getValue() > 0) { + // ペア数増やして個数減らす + while (sock.getValue() > 0 && rSock.getValue() > 0) { + pair = pair + 1; + sock.setValue(sock.getValue() - 1); + rSock.setValue(rSock.getValue() - 1); + } + } + } + } + } + + } + for (Map.Entry sock1 : socks.entrySet()) { + System.out + .println(sock1.getKey() + + " " + + sock1.getValue()); + System.out.println(pair); + } + System.out.println(pair); + } + + private Map countOfSocks(Scanner sc) { + final Map socks = new HashMap<>(); + socks.put(this.kind + this.direction, 1); + String kind; + String direction; + String sock; + for (int i = 1; i < this.amount; i++) { + kind = sc.next(); + direction = sc.next(); + sock = kind + direction; + // 種類向き両方に被りがあるかチェック + if (socks.containsKey(kind + direction)) { + // 被りがあれば値を増やす + socks.put(sock, socks.get(sock) + 1); + } else { + // 被りがなければmapに追加 + socks.put(sock, 1); + } + } + + return socks; + } + + private boolean isR(final char sock) { + + return sock == 'R'; + } + + private boolean isL(final char sock) { + return sock == 'L'; + } + + private boolean isSame(final char a, final char b) { + return a == b; + } +} -- GitLab From d6d0989b49fbbe73175b61159c4cf364739e131e Mon Sep 17 00:00:00 2001 From: syamauchi Date: Fri, 30 Jun 2023 14:17:35 +0900 Subject: [PATCH 2/5] =?UTF-8?q?C081=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C081.java | 118 +++++++++++++++------------------------- 1 file changed, 45 insertions(+), 73 deletions(-) diff --git a/syamauchi/src/C081.java b/syamauchi/src/C081.java index c741f7e..4798552 100644 --- a/syamauchi/src/C081.java +++ b/syamauchi/src/C081.java @@ -6,109 +6,81 @@ import java.util.Scanner; public class C081 { private final int amount; - private final String kind; - private final String direction; - private C081(final int amount, final String kind, final String direction) { + private C081(final int amount) { this.amount = amount; - this.kind = kind; - this.direction = direction; } public static void main(String[] args) { - // TODO 自動生成されたメソッド・スタブ - Scanner sc = new Scanner(System.in); - new C081(sc.nextInt(), sc.next(), sc.next()).countOfPair(sc); - + final Scanner sc = new Scanner(System.in); + new C081(sc.nextInt()).countOfPair(sc); + sc.close(); } - private void countOfPair(Scanner sc) { + private void countOfPair(final Scanner sc) { int pair = 0; // 各種類の靴下の数を集計 - final Map socks = countOfSocks(sc); - final Map lSocks = socks; - final Map rSocks = socks; - for (Map.Entry sock : socks.entrySet()) { - // 右足のとき - if (isR(sock.getKey().charAt(1)) && sock.getValue() > 0) { - // 個数ぶん回す - - for (Map.Entry lSock : lSocks.entrySet()) { - // 種類が同じで左足かつ一足以上ある - if (isSame(lSock.getKey().charAt(0), sock.getKey().charAt(0)) && isL(lSock - .getKey() - .charAt(1)) && lSock.getValue() > 0) { - // ペア数増やして個数減らす - while (sock.getValue() > 0 && lSock.getValue() > 0) { - pair = pair + 1; - sock.setValue(sock.getValue() - 1); - lSock.setValue(lSock.getValue() - 1); - } + final Map socksMap = countOfSocks(sc); + //右靴下と左靴下で分ける + for (Map.Entry rSock : socksMap.entrySet()) { + for (Map.Entry lSock : socksMap.entrySet()) { + if (isSameSock(lSock.getKey(), rSock.getKey()) && isL(lSock + .getKey(), lSock.getValue()) && isR(rSock.getKey(), rSock.getValue())) { + // ペア数増やして個数減らす + while (isPairRemain(rSock.getValue(), lSock.getValue())) { + pair = pair + 1; + rSock.setValue(rSock.getValue() - 1); + lSock.setValue(lSock.getValue() - 1); } } - } else if (isL(sock.getKey().charAt(1)) && sock.getValue() > 0) { - for (int i = 0; i < sock.getValue(); i++) { - for (Map.Entry rSock : rSocks.entrySet()) { - // 種類が同じで右足かつ一足以上ある - if (isSame(rSock.getKey().charAt(0), sock.getKey().charAt(0)) && isR(rSock - .getKey() - .charAt(1)) && rSock.getValue() > 0) { - // ペア数増やして個数減らす - while (sock.getValue() > 0 && rSock.getValue() > 0) { - pair = pair + 1; - sock.setValue(sock.getValue() - 1); - rSock.setValue(rSock.getValue() - 1); - } - } - } - } } } - for (Map.Entry sock1 : socks.entrySet()) { - System.out - .println(sock1.getKey() - + " " - + sock1.getValue()); - System.out.println(pair); - } + System.out.println(pair); } - private Map countOfSocks(Scanner sc) { - final Map socks = new HashMap<>(); - socks.put(this.kind + this.direction, 1); - String kind; - String direction; - String sock; + private Map countOfSocks(final Scanner sc) { + final Map socksMap = new HashMap<>(); + String kind = sc.next(); + String direction = sc.next(); + String sock = kind + direction; + socksMap.put(sock, 1); + for (int i = 1; i < this.amount; i++) { kind = sc.next(); direction = sc.next(); sock = kind + direction; - // 種類向き両方に被りがあるかチェック - if (socks.containsKey(kind + direction)) { - // 被りがあれば値を増やす - socks.put(sock, socks.get(sock) + 1); - } else { - // 被りがなければmapに追加 - socks.put(sock, 1); - } + addSocks(socksMap, sock); } - return socks; + 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 boolean isR(final char sock) { + private boolean isR(final String sock, final int sockRemain) { + + return (sock.charAt(1) == 'R' && sockRemain > 0); + } - return sock == 'R'; + private boolean isL(final String sock, final int sockRemain) { + return (sock.charAt(1) == 'L' && sockRemain > 0); } - private boolean isL(final char sock) { - return sock == 'L'; + private boolean isPairRemain(final int l, final int r) { + return (l > 0 && r > 0); } - private boolean isSame(final char a, final char b) { - return a == b; + private boolean isSameSock(final String a, final String b) { + return a.charAt(0) == b.charAt(0); } } -- GitLab From 560e100876be422300b0b0984fe7d339d8921b86 Mon Sep 17 00:00:00 2001 From: syamauchi Date: Fri, 30 Jun 2023 16:42:20 +0900 Subject: [PATCH 3/5] =?UTF-8?q?C081=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C081.java | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/syamauchi/src/C081.java b/syamauchi/src/C081.java index 4798552..f19a3df 100644 --- a/syamauchi/src/C081.java +++ b/syamauchi/src/C081.java @@ -21,16 +21,16 @@ public class C081 { int pair = 0; // 各種類の靴下の数を集計 final Map socksMap = countOfSocks(sc); - //右靴下と左靴下で分ける + for (Map.Entry rSock : socksMap.entrySet()) { for (Map.Entry lSock : socksMap.entrySet()) { if (isSameSock(lSock.getKey(), rSock.getKey()) && isL(lSock - .getKey(), lSock.getValue()) && isR(rSock.getKey(), rSock.getValue())) { + .getKey()) && isR(rSock.getKey())) { // ペア数増やして個数減らす - while (isPairRemain(rSock.getValue(), lSock.getValue())) { + while (isPairRemain(lSock.getValue(), rSock.getValue())) { pair = pair + 1; - rSock.setValue(rSock.getValue() - 1); - lSock.setValue(lSock.getValue() - 1); + + decSocks(socksMap, lSock.getKey(), rSock.getKey()); } } @@ -43,12 +43,10 @@ public class C081 { private Map countOfSocks(final Scanner sc) { final Map socksMap = new HashMap<>(); - String kind = sc.next(); - String direction = sc.next(); - String sock = kind + direction; - socksMap.put(sock, 1); - - for (int i = 1; i < this.amount; i++) { + String kind; + String direction; + String sock; + for (int i = 0; i < this.amount; i++) { kind = sc.next(); direction = sc.next(); sock = kind + direction; @@ -67,13 +65,20 @@ public class C081 { } } - private boolean isR(final String sock, final int sockRemain) { + private void decSocks(final Map socksMap, final String lSock, + final String rSock) { + final int decValue = 1; + socksMap.put(lSock, socksMap.get(lSock) - decValue); + socksMap.put(rSock, socksMap.get(rSock) - decValue); + } + + private boolean isR(final String sock) { - return (sock.charAt(1) == 'R' && sockRemain > 0); + return (sock.charAt(1) == 'R'); } - private boolean isL(final String sock, final int sockRemain) { - return (sock.charAt(1) == 'L' && sockRemain > 0); + private boolean isL(final String sock) { + return (sock.charAt(1) == 'L'); } private boolean isPairRemain(final int l, final int r) { -- GitLab From 5bebe8730e92b33a990568285a07a693e1fb5bd5 Mon Sep 17 00:00:00 2001 From: syamauchi Date: Mon, 3 Jul 2023 09:19:06 +0900 Subject: [PATCH 4/5] =?UTF-8?q?C081=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C081.java | 43 +++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/syamauchi/src/C081.java b/syamauchi/src/C081.java index f19a3df..109e5bf 100644 --- a/syamauchi/src/C081.java +++ b/syamauchi/src/C081.java @@ -21,17 +21,12 @@ public class C081 { int pair = 0; // 各種類の靴下の数を集計 final Map socksMap = countOfSocks(sc); - - for (Map.Entry rSock : socksMap.entrySet()) { - for (Map.Entry lSock : socksMap.entrySet()) { - if (isSameSock(lSock.getKey(), rSock.getKey()) && isL(lSock - .getKey()) && isR(rSock.getKey())) { - // ペア数増やして個数減らす - while (isPairRemain(lSock.getValue(), rSock.getValue())) { - pair = pair + 1; - - decSocks(socksMap, lSock.getKey(), rSock.getKey()); - } + // SocksMapからペアになる靴下を探す + for (Map.Entry oneSock : socksMap.entrySet()) { + for (Map.Entry pairSock : socksMap.entrySet()) { + if (isPair(oneSock.getKey(), pairSock.getKey())) { + // ペアが見つかった時 + pair = pair + addPair(socksMap, oneSock.getKey(), pairSock.getKey()); } } @@ -43,13 +38,10 @@ public class C081 { private Map countOfSocks(final Scanner sc) { final Map socksMap = new HashMap<>(); - String kind; - String direction; - String sock; for (int i = 0; i < this.amount; i++) { - kind = sc.next(); - direction = sc.next(); - sock = kind + direction; + final String kind = sc.next(); + final String direction = sc.next(); + final String sock = kind + direction; addSocks(socksMap, sock); } @@ -65,11 +57,16 @@ public class C081 { } } - private void decSocks(final Map socksMap, final String lSock, - final String rSock) { + private int addPair(final Map socksMap, final String oneSock, + final String pairSock) { final int decValue = 1; - socksMap.put(lSock, socksMap.get(lSock) - decValue); - socksMap.put(rSock, socksMap.get(rSock) - decValue); + int pair = 0; + while (isPairRemain(socksMap.get(oneSock), socksMap.get(pairSock))) { + pair = pair + 1; + socksMap.put(oneSock, socksMap.get(oneSock) - decValue); + socksMap.put(pairSock, socksMap.get(pairSock) - decValue); + } + return pair; } private boolean isR(final String sock) { @@ -81,6 +78,10 @@ public class C081 { 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); } -- GitLab From 32bc7e403235a1e65aa0dd021f1dacc7bbee2be8 Mon Sep 17 00:00:00 2001 From: syamauchi Date: Mon, 3 Jul 2023 09:37:05 +0900 Subject: [PATCH 5/5] =?UTF-8?q?C081=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syamauchi/src/C081.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/syamauchi/src/C081.java b/syamauchi/src/C081.java index 109e5bf..3588251 100644 --- a/syamauchi/src/C081.java +++ b/syamauchi/src/C081.java @@ -22,11 +22,11 @@ public class C081 { // 各種類の靴下の数を集計 final Map socksMap = countOfSocks(sc); // SocksMapからペアになる靴下を探す - for (Map.Entry oneSock : socksMap.entrySet()) { - for (Map.Entry pairSock : socksMap.entrySet()) { - if (isPair(oneSock.getKey(), pairSock.getKey())) { + for (Map.Entry firstSock : socksMap.entrySet()) { + for (Map.Entry secondSock : socksMap.entrySet()) { + if (isPair(firstSock.getKey(), secondSock.getKey())) { // ペアが見つかった時 - pair = pair + addPair(socksMap, oneSock.getKey(), pairSock.getKey()); + pair = pair + addPair(socksMap, firstSock.getKey(), secondSock.getKey()); } } @@ -57,14 +57,14 @@ public class C081 { } } - private int addPair(final Map socksMap, final String oneSock, - final String pairSock) { + private int addPair(final Map socksMap, final String firstSock, + final String secondSock) { final int decValue = 1; int pair = 0; - while (isPairRemain(socksMap.get(oneSock), socksMap.get(pairSock))) { + while (isPairRemain(socksMap.get(firstSock), socksMap.get(secondSock))) { pair = pair + 1; - socksMap.put(oneSock, socksMap.get(oneSock) - decValue); - socksMap.put(pairSock, socksMap.get(pairSock) - decValue); + socksMap.put(firstSock, socksMap.get(firstSock) - decValue); + socksMap.put(secondSock, socksMap.get(secondSock) - decValue); } return pair; } -- GitLab