자바문제[입력한 수 만큼 중복없이 뽑기]

이수보🧑🏻‍💻·2021년 11월 24일
0

문제

목록 보기
4/6

앞서 우리는 정렬을 배웠고 정렬을 응용한 문제도 풀어보았다. 앞에 것들을 이용하여 또 다른 문제를 풀어보자!!

입력한 수 만큼 중복없이 뽑기
25명의 학생이 있을 때 청소당번을 뽑으려 한다. 내가 원하는 수 만큼 청소를 시킬 수 있어야 하고
싸움이 나기 때문에 중복이 있어서는 안된다.

String[] students = {"1번학생", "2번학생", "3번학생", "4번학생", "5번학생"
		    ,"6번학생", "7번학생", "8번학생", "9번학생", "10번학생"
		    ,"11번학생", "12번학생", "13번학생", "14번학생", "15번학생"
		    ,"16번학생", "17번학생", "18번학생", "19번학생", "20번학생"
		    ,"21번학생", "22번학생", "23번학생", "24번학생", "25번학생"};

위 학생들을 문제에 맞춰 출력해주십쇼 !!!!

Hint.1 : 무작위로 정렬
Hint.2 : 정렬 후 앞에서부터 선택하면 중복이 존재할 수 없다.

Hint가 한 개일 정도로 간단한 문제이다.

문제를 낼 때마다 강조하는 것이지만 혼자만의 시간을 충분히 가지고 고민하며 풀어보는 것을 권장한다

정답

1.		for(int i = 0; i < students.length; i++){
2.			int r1 = (int)(Math.random() * 25);
			for(int j = 1; j < students.length; j++){
3.				String temp = students[j];
4.				students[j] = students[r1];
5.				students[r1] = temp;
			}
		}
		
		System.out.println("학생들 중 랜덤으로 뽑을 수를 입력해주세요.");
6.		int a = Integer.parseInt(sc.nextLine());

		System.out.print("입력한 개수만큼의 인원입니다. == ");
		
7.		for(int i = 0; i < a; i++){ 
			System.out.print(students[i]+", ");   
			}

문제가 이해안가고 답이 이해가 안간다면 내가 쓴 풀이(순서)를 천천히 반복해서 읽어보길 바란다.

  • 순서
  1. 학생 배열의 길이만큼 for문을 돌린다. 왜? 앞서 말한 정렬 때문에~~

  2. 무작위로 정렬을 해줘야 하기 때문에 학생배열의 크기만큼 랜덤을 발생시킨다.

  3. 조건이 없다 무작위로 섞어줘야 하기 때문에 temp에 student[j]를 담아준후

  4. student[j]의 자리에 랜덤으로 뽑힌 student[r1]을 넣어준다.

  5. 빈 student[r1]자리에 student[j]를 넣어준다

  6. 얼마만큼의 수를 뽑을 건지 입력받는다. Scanner 이용

  7. 입력받은 수만큼 for문을 돌려 무작위로 정렬된 배열 앞에서 부터 차례로 뽑는다.

생각해보면 간단하다. 무작위로 정렬 없이 뽑으려면 무작위 정렬 후 앞에서 부터 차례로 뽑으면 된다.

내가 문제를 올릴 때마다 항상 올리는 가장 중요한 문구 !!

남의 도움이 없이 충분한 혼자만의 시간을 가지고 문제를 풀어보자!!!

0개의 댓글