랜덤 팀 추첨

콘솔창에서 구현한 랜덤 팀 추첨입니다. 사람수,팀수,사람이름을
입력받고 랜덤으로 팀을 배정하여 출력합니다. 사람수/팀수 가
나누어 떨어지지 않을 시 인원이 누락되는 것을 해결하지 못했습니다.
제작일시는 21.10.09 소요시간은 5시간입니다.

소스코드

package RandomSadari;

import java.util.Random;
import java.util.Scanner;
import java.util.Arrays;
public class Main 
{
    
	
	
	public static void main(String[] args) 
	{   Random random = new Random();
		Scanner sc = new Scanner(System.in);
		int k=0;
		System.out.println("사람수 입력:");
		int num_crew = sc.nextInt();                        //사람수 = num_crew 입력받기
	    System.out.println("팀수입력 :");
		int crew = sc.nextInt();                           //팀수 = crew 입력받기
		int div_crew = num_crew/crew;                     
		String[] name_crew = new String[num_crew];          // 사람이름 = name_crew배열 생성
		int[] num_random = new int[num_crew];               //팀추첨 변수 =  num_random 생성
		String[][] crew2 = new String[crew][div_crew]; 	//나눈 팀원들을 담을 배열
		
		for(int i=0;i<name_crew.length;i++)                 // 사람이름 입력받기 
		{   System.out.println(i+1 +"번째 사람이름 입력 :" );
			name_crew[i] = sc.next();
		}
		
		for (int i = 0; i < num_random.length; i++) 
		{
		num_random[i] = random.nextInt(num_crew); // 팀원 추첨할 변수 배열 생성- 중복없음
			for(int j=0; j<i; j++)
			{
				if(num_random[i]==num_random[j]) {i--; break;}	        	
			}	 
	    }
		
		for (int i = 0; i < crew2.length; i++) 
		{
			for (int j = 0; j < crew2[i].length; j++) 
			{
				crew2[i][j] = name_crew[num_random[k]];
				k++;
			}
		}
		
		for(int i=0;i<crew2.length;i++)
		{   System.out.print(i+1+"팀   ");
			System.out.println(Arrays.toString(crew2[i]));
		}
		sc.close();
	}
}

로직 설명

  1. 사람 수 만큼의 길이를 가지는 배열(num_random)을 생성하여 중복이 없는 정수값을 할당해준다.(중복제거는 로또 포스트 참고)
  2. name_crew[num_random[k]] => k를 0부터 하나씩 증가시키며 2차원배열(crew2)에 넣어준다.
    이렇게 하면 이름의 중복없이 2차원배열에 잘 담긴다.
    => 사람수가 10명일때 num_random 배열은 {4,8,1,5,3,0,7,2,9,6} 이런식으로 생성이 되고
    for문을 돌면서
    첫번째 = name_crew[4]
    두번째 = name_crew[8]
    세번째 = name_crew[1] .... 이렇게 값을 넣게 된다.

실행화면

문제점

예를 들어 5명을 2팀으로 나눌때
1팀 사람3, 사람5
2팀 사람1 ,사람4
이런식으로 한명이 누락된다.
crew2의 열 길이가 div_crew로 설정되어서 이런 문제가 발생했는데 고민을 많이 했지만 해결하지 못했다.

후기

로또 번호 생성기를 만들때 썼던 로직을 활용해서 만들었다.
name_crew[num_random[k]] <= 이 로직을 구현할때 구글링으로도 못찾고 너무 어려워서
골머리를 싸매면서 저거 하나만 4시간을 고민해서 결국엔 생각해냈다.
문제점은 ArrayList<String[]>을 써서 해결 할 수 있을것같다. 시간이 되면 해결해서 다시 올려봐야겠다.

좋은 웹페이지 즐겨찾기