diff --git a/src/main/java/leets/leets_mate/LeetsMateApplication.java b/src/main/java/leets/leets_mate/LeetsMateApplication.java index e48ce2b..12fc0bf 100644 --- a/src/main/java/leets/leets_mate/LeetsMateApplication.java +++ b/src/main/java/leets/leets_mate/LeetsMateApplication.java @@ -5,37 +5,116 @@ public class LeetsMateApplication { // 동작 함수입니다. - public void run() { + public void run() throws Exception { + Scanner sc = new Scanner(System.in); + + System.out.println("[Leets 오늘의 짝에게]를 시작합니다.\n"); + + System.out.println("참석자들의 이름을 입력해 주세요. (,로 구분)"); + String 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<>(); + return Arrays.asList(members.split(",")); } // 총 멤버수를 반환합니다. public int memberNumber(List members) { - return 0; + return members.size(); } // 멤버 문자열에 영어가 있는지 검사합니다. 영어가 있다면 예외 출력 - public void checkHasNoEnglish(String members) { + public void checkHasNoEnglish(String members) throws Exception { + if (members.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<>(); + + 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); + } + + if (remainingMembers > 0) { + List lastGroup = new ArrayList<>(); + for (int i = currentIndex; i < memberCount; i++) { + lastGroup.add(memberList.get(i)); + } + result.add(lastGroup); + } + + return result; } // 결과를 프린트 하는 함수입니다. public void printResult(List> result) { + System.out.println("\n오늘의 짝 추천 결과입니다."); + + StringBuilder sb = new StringBuilder(); + + for (List row : result) { + sb.append("[ "); + for (int j = 0; j < row.size(); j++) { + sb.append(row.get(j)); + + if (j < row.size() - 1) { + 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(); }