랜덤 팀 추첨
콘솔창에서 구현한 랜덤 팀 추첨입니다. 사람수,팀수,사람이름을
입력받고 랜덤으로 팀을 배정하여 출력합니다. 사람수/팀수 가
나누어 떨어지지 않을 시 인원이 누락되는 것을 해결하지 못했습니다.
제작일시는 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();
}
}
로직 설명
- 사람 수 만큼의 길이를 가지는 배열(num_random)을 생성하여 중복이 없는 정수값을 할당해준다.(중복제거는 로또 포스트 참고)
- 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[]>을 써서 해결 할 수 있을것같다. 시간이 되면 해결해서 다시 올려봐야겠다.
Author And Source
이 문제에 관하여(랜덤 팀 추첨), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kmh916/랜덤-팀-추첨저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)