Another Brain

mission_java_RandomTeamTest 본문

P/JAVA

mission_java_RandomTeamTest

뉸누나ㄴ나 2021. 5. 25. 00:12
package com.work.view;

import java.util.Random;

public class RandomTeamTest {

	/*
	 * 실습 : 
	 * 우리반 30명 학생들을 대상으로 랜덤하게 팀 구성하는 프로그램을 구현하세요
	 * 1. 팀당 인원수??
	 * 	>> 고정적 / 가변적
	 * 	>> 가변적 => 사용자 입력(IO, main(String[] args) 아규먼트 전달)
	 *  >> 사용자 입력 : IO (java.io API 활용)
	 *  >> main(String[] args) 아규먼트 : 숫자를 입력해도 String => String 입력 숫자문자열을 
           숫자타입(int) 변환 기술??
	 *  >> main() 메서드에 아규먼트 전달해서 실행하는 방법??
	 *  
	 * 2. 랜덤하게 배열요소를 접근하기 위한 방법???
	 * 	>> 30명
	 * 	>> 30개 String[] 배열생성해서 학생들의 이름을 저장   
	 *  >> 배열요소 인덱스번호 0 ~ 배열크기-1
	 *  >> java.util.Random API 활용해서 임의 숫자를 추출하는 유틸리티 클래스 제공
	 * 
	 * 3. 남는 인원은 어떤 팀에 배정할것인지??
	 * 	>> 남는 인원을 첫번째 팀부터 순서대로 1명씩 일괄 배정??
	 *  >> 배정하는 팀도 랜덤하게 처리배정??
	 *  
	 * 
	 */
	public static void main(String[] args) {
		if(args.length != 1) {
			System.out.println("Usage: java RandomTeamTest 팀원숫자");
			System.exit(0);
		}
		
		int teamLenth = Integer.parseInt(args[0]); // String 문자열타입숫자데이터를 int 타입으로 변환
		
		// 학생의 이름정보는 배열요소 30명 저장
		
		// 2차원 배열 행크기, 열크기 분석해서 선언 및 생성
		
		System.out.println();
		int randomNo = getRandomNo();
		System.out.println(randomNo);
		
	}

	public static int getRandomNo() {
		/* 임의의 정수형 숫자를 추출하기 위한 제공 코드입니다. */
		Random extractNo = new Random((long)(Math.random() * System.nanoTime()));
		
		/* 0 ~ 29 사이의 임의의 숫자 추출 */
		int no = extractNo.nextInt(30); 
		return no;
	}

}

 


package com.work.view;

import java.util.Random;

public class RandomTeamTest {
	/* 1. 정렬 알고리즘
	 * 2. 단게임 허용
	 *  다중게임
	 *  
	 *  #수행결과 문제
	 *  1. 일부 멤버 중복
	 *  + 팀원 이름을 정렬 {@link string#compareTo(String)}
	 * */

	public static void main(String[] args) {
		int teamMemberLengthCols = 4;
		if (args.length == 1) {
			teamMemberLengthCols = Integer.parseInt(args[0]);
		} else {
			System.out.println("[팀당 인원수를 입력하지 않아 팀당 인원수를 기본 4명으로 진행합니다.]");
		}
		
		String[] names = {
			// 전체 멤버 이름 ""
		};
		
		String[][] teamMembers = null;
		int teamLengthRows = names.length / teamMemberLengthCols;;
		int remainderLength = names.length % teamMemberLengthCols;
		
		if (remainderLength == 0) { 
			teamMembers = new String[teamLengthRows][teamMemberLengthCols];
			System.out.println(teamLengthRows + "개의 팀에 " + teamMemberLengthCols + "명의 팀원을 균등하게 배정합니다.");
		} else {
			teamMembers = new String[teamLengthRows][];
			for (int index = 0; index < remainderLength; index++) {
				teamMembers[index] = new String[teamMemberLengthCols + 1];
			}
			
			for (int index = remainderLength; index < teamLengthRows; index++) {
				teamMembers[index] = new String[teamMemberLengthCols];
			}
			
//			for (int teamRows = 0; teamRows < teamMembers.length; teamRows++) {
//				System.out.println((teamRows + 1) + "팀의 팀원은 " + teamMembers[teamRows].length + "명을 배정합니다.");
//			}
			
			System.out.println(teamLengthRows + "개의 팀에 " + teamMemberLengthCols + "명을 배정합니다.");
			System.out.println("남은 인원은 " + remainderLength + "개의 팀에 1명씩 추가로 균등 배정합니다.");
		}
		
		int[] uniqueNamesIndex = new int[names.length];
		int uniqueLength = 0;
		
		int randomNo;
		for (int teamRows = 0; teamRows < teamMembers.length; teamRows++) {
			for (int teamCols = 0; teamCols < teamMembers[teamRows].length; teamCols++) {
				
				randomLoop:
				while(true) {
					randomNo = getRandomNo();
					for (int index = 0; index < uniqueLength; index++) {
						if (uniqueNamesIndex[index] == randomNo) {
							continue randomLoop;
						}
					}
					
					uniqueNamesIndex[uniqueLength] = randomNo;
					teamMembers[teamRows][teamCols] = names[randomNo];
					break randomLoop;
				} 
				
			}
		}
		
		System.out.println();
		System.out.println("[팀별 팀원 배정 정보]");
		
		for (int teamRows = 0; teamRows < teamMembers.length; teamRows++) {
			System.out.print((teamRows + 1) + "팀 팀원 : ");
			for (int teamCols = 0; teamCols < teamMembers[teamRows].length; teamCols++) {
				System.out.print(teamMembers[teamRows][teamCols] + "\t");
			}
			System.out.println();
		}
	}
	
	public static boolean isUniqueNo(int randomNo) {
		return false;
	}

	public static int getRandomNo() {
		Random random = new Random((long)(Math.random() * System.nanoTime()));
		return random.nextInt(30);
	}
}
Comments