From b1869f6e43a6b8cdb991628453121ea7315748b5 Mon Sep 17 00:00:00 2001 From: anxi01 Date: Fri, 5 Apr 2024 03:04:32 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20=EA=B8=B0=EB=8A=A5=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 101 ++++++++++++++++-- 1 file changed, 94 insertions(+), 7 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index e48ce2b..1c8226f 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -4,38 +4,125 @@ public class LeetsMateApplication { + static String members; + static int row; + // 동작 함수입니다. - public void run() { + public void run() throws Exception { + Scanner sc = new Scanner(System.in); + + System.out.println("[Leets 오늘의 짝에게]를 시작합니다.\n"); + + System.out.println("참석자들의 이름을 입력해 주세요. (,로 구분)"); + members = sc.nextLine(); + + checkHasNoEnglish(members); + + System.out.println("\n최대 짝 수를 입력해 주세요."); + int maximumGroupSize = sc.nextInt(); + + List memberList = parseMembers(members); + + checkDataValidity(memberNumber(memberList), maximumGroupSize); + + printResult(generateRandomGroups(memberList, maximumGroupSize)); + + while (true) { + System.out.print("다시 구성하시겠습니까? (y or n): "); + String answer = sc.next(); + + if (answer.equals("y")) { + printResult(generateRandomGroups(memberList, maximumGroupSize)); + } else { + System.out.println("자리를 이동해 서로에게 인사해주세요."); + break; + } + } } // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - return new ArrayList<>(); + List memberList = Arrays.stream(members.split(",")).toList(); + // toList를 하게 되면 변경할 수 없는 리스트가 되기 때문에 다시 변경 가능한 리스트로 변환한다. + return new ArrayList<>(memberList); } // 총 멤버수를 반환합니다. public int memberNumber(List members) { - return 0; + return members.size(); } // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 - public void checkHasNoEnglish(String members) { + public void checkHasNoEnglish(String members) throws Exception { + String[] membersArr = members.split(","); + for (String member : membersArr) { + if (member.matches("^[a-zA-Z]*$")) { + throw new Exception("[ERROR] 이름은 한글로 입력해야 합니다"); + } + } } // 멤버수와 최대 짝수 데이터가 유효한지 검사하는 함수입니다. 유효하지 않다면 예외 출력 - public void checkDataValidity(int memberCount, int maximumGroupSize) { + public void checkDataValidity(int memberCount, int maximumGroupSize) throws Exception { + if (memberCount < maximumGroupSize) { + throw new Exception("[ERROR] 최대 짝 수는 이름의 갯수보다 클 수 없습니다"); + } } // 랜덤 짝꿍 추첨하는 함수 입니다. public List> generateRandomGroups(List memberList, int maximumGroupSize) { - return new ArrayList<>(); + Collections.shuffle(memberList); + + List> result = new ArrayList<>(); + + if (memberList.size() % maximumGroupSize != 0) { + row = memberList.size() / maximumGroupSize + 1; + } else { + row = memberList.size() / maximumGroupSize; + } + + for (int i = 0; i < row; i++) { + result.add(new ArrayList<>()); + } + + for (int i = 0; i < row; i++) { + for (int j = i * maximumGroupSize; j < maximumGroupSize * (i + 1); j++) { + if (j < memberList.size()) { + result.get(i).add(memberList.get(j)); + } + } + } + return result; } // 결과를 프린트 하는 함수입니다. public void printResult(List> result) { + System.out.println("\n오늘의 짝 추천 결과입니다."); + + StringBuilder sb = new StringBuilder(); + + int column = result.get(0).size(); + + for (int i = 0; i < row; i++) { + sb.append("[ "); + for (int j = 0; j < column; j++) { + sb.append(result.get(i).get(j)); + + if (i == row - 1 && j == members.length() % column) { + break; + } + + if (j + 1 != column) { + sb.append(" | "); + } + } + sb.append(" ]\n"); + } + sb.append("\n추천을 완료했습니다.\n"); + System.out.println(sb); } - public static void main(String[] args) { + public static void main(String[] args) throws Exception { LeetsMateApplication app = new LeetsMateApplication(); app.run(); } From 4289636a3d3862ef0b790611a90d521d02aec001 Mon Sep 17 00:00:00 2001 From: anxi01 Date: Sun, 7 Apr 2024 03:15:28 +0900 Subject: [PATCH 2/8] =?UTF-8?q?fix=20:=20=EC=98=81=EC=96=B4=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/leets_mate/LeetsMateApplication.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 1c8226f..92e2cba 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -54,11 +54,8 @@ public int memberNumber(List members) { // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) throws Exception { - String[] membersArr = members.split(","); - for (String member : membersArr) { - if (member.matches("^[a-zA-Z]*$")) { - throw new Exception("[ERROR] 이름은 한글로 입력해야 합니다"); - } + if (members.matches("^[a-zA-Z]*$")) { + throw new Exception("[ERROR] 이름은 한글로 입력해야 합니다"); } } From 831502da5f8fb38d656be6982ec300c79eeedabb Mon Sep 17 00:00:00 2001 From: anxi01 Date: Sun, 7 Apr 2024 03:43:33 +0900 Subject: [PATCH 3/8] =?UTF-8?q?refactor=20:=20=EC=A0=95=EC=A0=81=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20=EC=A0=95=EC=9D=98=20=EB=B0=8F=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=9E=AC=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 92e2cba..4dec231 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -5,7 +5,8 @@ public class LeetsMateApplication { static String members; - static int row; + static List memberList; + static int row, column; // 동작 함수입니다. public void run() throws Exception { @@ -19,20 +20,20 @@ public void run() throws Exception { checkHasNoEnglish(members); System.out.println("\n최대 짝 수를 입력해 주세요."); - int maximumGroupSize = sc.nextInt(); + column = sc.nextInt(); - List memberList = parseMembers(members); + memberList = parseMembers(members); - checkDataValidity(memberNumber(memberList), maximumGroupSize); + checkDataValidity(memberNumber(memberList), column); - printResult(generateRandomGroups(memberList, maximumGroupSize)); + printResult(generateRandomGroups(memberList, column)); while (true) { System.out.print("다시 구성하시겠습니까? (y or n): "); String answer = sc.next(); if (answer.equals("y")) { - printResult(generateRandomGroups(memberList, maximumGroupSize)); + printResult(generateRandomGroups(memberList, column)); } else { System.out.println("자리를 이동해 서로에게 인사해주세요."); break; @@ -72,10 +73,10 @@ public List> generateRandomGroups(List memberList, int maxi List> result = new ArrayList<>(); - if (memberList.size() % maximumGroupSize != 0) { - row = memberList.size() / maximumGroupSize + 1; + if (memberNumber(memberList) % maximumGroupSize != 0) { + row = memberNumber(memberList) / maximumGroupSize + 1; } else { - row = memberList.size() / maximumGroupSize; + row = memberNumber(memberList) / maximumGroupSize; } for (int i = 0; i < row; i++) { @@ -84,7 +85,7 @@ public List> generateRandomGroups(List memberList, int maxi for (int i = 0; i < row; i++) { for (int j = i * maximumGroupSize; j < maximumGroupSize * (i + 1); j++) { - if (j < memberList.size()) { + if (j < memberNumber(memberList)) { result.get(i).add(memberList.get(j)); } } @@ -98,18 +99,16 @@ public void printResult(List> result) { StringBuilder sb = new StringBuilder(); - int column = result.get(0).size(); - for (int i = 0; i < row; i++) { sb.append("[ "); for (int j = 0; j < column; j++) { sb.append(result.get(i).get(j)); - if (i == row - 1 && j == members.length() % column) { + if (i == row - 1 && j == memberNumber(memberList) % column - 1) { break; } - if (j + 1 != column) { + if (j < column - 1) { sb.append(" | "); } } From 370dde598a4f3e4afdceb4cc3e18e3440da76563 Mon Sep 17 00:00:00 2001 From: anxi01 Date: Sun, 7 Apr 2024 04:04:17 +0900 Subject: [PATCH 4/8] =?UTF-8?q?refactor=20:=20toList=20=EB=8C=80=EC=8B=A0?= =?UTF-8?q?=20asList=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/leets_mate/LeetsMateApplication.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 4dec231..8d4a1ac 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -43,9 +43,7 @@ public void run() throws Exception { // 문자열로된 멤버들을 리스트로 분리하는 함수입니다. public List parseMembers(String members) { - List memberList = Arrays.stream(members.split(",")).toList(); - // toList를 하게 되면 변경할 수 없는 리스트가 되기 때문에 다시 변경 가능한 리스트로 변환한다. - return new ArrayList<>(memberList); + return Arrays.asList(members.split(",")); } // 총 멤버수를 반환합니다. From f8a9842c9e997087a3e49db5cf545b00097a2c39 Mon Sep 17 00:00:00 2001 From: anxi01 Date: Wed, 10 Apr 2024 22:25:12 +0900 Subject: [PATCH 5/8] =?UTF-8?q?fix:=20=EC=A0=95=EA=B7=9C=ED=91=9C=ED=98=84?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/leets_mate/LeetsMateApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 8d4a1ac..4d9ede5 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -53,7 +53,7 @@ public int memberNumber(List members) { // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 public void checkHasNoEnglish(String members) throws Exception { - if (members.matches("^[a-zA-Z]*$")) { + if (members.matches(".*[a-zA-Z].*")) { throw new Exception("[ERROR] 이름은 한글로 입력해야 합니다"); } } From 2b5a68576b167c11f756fee7ab7015992ddf1595 Mon Sep 17 00:00:00 2001 From: anxi01 Date: Wed, 10 Apr 2024 22:42:04 +0900 Subject: [PATCH 6/8] =?UTF-8?q?fix:=20=EB=9E=9C=EB=8D=A4=20=EC=A7=9D?= =?UTF-8?q?=EA=B6=81=20=EC=B6=94=EC=B2=A8=20=EB=A1=9C=EC=A7=81=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets_mate/LeetsMateApplication.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 4d9ede5..c852a49 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -71,23 +71,28 @@ public List> generateRandomGroups(List memberList, int maxi List> result = new ArrayList<>(); - if (memberNumber(memberList) % maximumGroupSize != 0) { - row = memberNumber(memberList) / maximumGroupSize + 1; - } else { - row = memberNumber(memberList) / maximumGroupSize; - } - - for (int i = 0; i < row; i++) { - result.add(new ArrayList<>()); + int memberCount = memberNumber(memberList); + int groupCount = memberCount / maximumGroupSize; + int remainingMembers = memberCount % maximumGroupSize; + + int currentIndex = 0; + for (int i = 0; i < groupCount; i++) { + List group = new ArrayList<>(); + for (int j = 0; j < maximumGroupSize; j++) { + group.add(memberList.get(currentIndex)); + currentIndex++; + } + result.add(group); } - for (int i = 0; i < row; i++) { - for (int j = i * maximumGroupSize; j < maximumGroupSize * (i + 1); j++) { - if (j < memberNumber(memberList)) { - result.get(i).add(memberList.get(j)); - } + if (remainingMembers > 0) { + List lastGroup = new ArrayList<>(); + for (int i = currentIndex; i < memberCount; i++) { + lastGroup.add(memberList.get(i)); } + result.add(lastGroup); } + return result; } From 83a3a1f47756ed6f94cf5c37e88661bab9a7a80c Mon Sep 17 00:00:00 2001 From: anxi01 Date: Wed, 10 Apr 2024 22:49:13 +0900 Subject: [PATCH 7/8] =?UTF-8?q?fix:=20=EC=B6=9C=EB=A0=A5=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/leets/leets_mate/LeetsMateApplication.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index c852a49..7c38bd3 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -102,21 +102,18 @@ public void printResult(List> result) { StringBuilder sb = new StringBuilder(); - for (int i = 0; i < row; i++) { + for (List row : result) { sb.append("[ "); - for (int j = 0; j < column; j++) { - sb.append(result.get(i).get(j)); + for (int j = 0; j < row.size(); j++) { + sb.append(row.get(j)); - if (i == row - 1 && j == memberNumber(memberList) % column - 1) { - break; - } - - if (j < column - 1) { + if (j < row.size() - 1) { sb.append(" | "); } } sb.append(" ]\n"); } + sb.append("\n추천을 완료했습니다.\n"); System.out.println(sb); } From c3ee1e0d6911f447941f3dd6cbd1c0c6eaa7a8a6 Mon Sep 17 00:00:00 2001 From: anxi01 Date: Wed, 10 Apr 2024 22:52:03 +0900 Subject: [PATCH 8/8] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EB=B3=80=EC=88=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets/leets_mate/LeetsMateApplication.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index 7c38bd3..12fc0bf 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -4,10 +4,6 @@ public class LeetsMateApplication { - static String members; - static List memberList; - static int row, column; - // 동작 함수입니다. public void run() throws Exception { Scanner sc = new Scanner(System.in); @@ -15,25 +11,25 @@ public void run() throws Exception { System.out.println("[Leets 오늘의 짝에게]를 시작합니다.\n"); System.out.println("참석자들의 이름을 입력해 주세요. (,로 구분)"); - members = sc.nextLine(); + String members = sc.nextLine(); checkHasNoEnglish(members); System.out.println("\n최대 짝 수를 입력해 주세요."); - column = sc.nextInt(); + int maximumGroupSize = sc.nextInt(); - memberList = parseMembers(members); + List memberList = parseMembers(members); - checkDataValidity(memberNumber(memberList), column); + checkDataValidity(memberNumber(memberList), maximumGroupSize); - printResult(generateRandomGroups(memberList, column)); + printResult(generateRandomGroups(memberList, maximumGroupSize)); while (true) { System.out.print("다시 구성하시겠습니까? (y or n): "); String answer = sc.next(); if (answer.equals("y")) { - printResult(generateRandomGroups(memberList, column)); + printResult(generateRandomGroups(memberList, maximumGroupSize)); } else { System.out.println("자리를 이동해 서로에게 인사해주세요."); break;