본문 바로가기

수업 복습하기/Java Quiz

Method Quiz 02 - 메서드 + for 구문(6)

728x90
728x90

= 메서드 + for 구문(5)

 

<문제> (난이도 ) (혼자 못 푼다!! ㅜ_ㅜ)

정수를 매개변수로 받아서, 1~매개변수 까지의 값을 배열에 랜덤하게

넣어서 반환해주는 함수 seat을 생성하세요.
 
- 조건
1. 숫자는 중복되지 않습니다.
2. swap을 이용하지 않습니다.

- 입력 5
출력 - [1~5가 랜덤하게 섞여있는 길이가 5인 배열]

- 입력10
출력 - [1~10가 랜덤하게 섞여있는 길이가 10인 배열]

 

+) swap으로는 중복되지않게 하기 어렵다.
배열에 값을 집어 넣기 전에, 그 앞자리까지 5가 있는지 확인해보면된다.
바깥에서나오는 반복문은 몇 번 중복인지는 회전수가 계속 달라질 것이다.
while문을 사용해서 바깥, 안쪽은 집어넣기전 인덱스까지 하나씩 찾아보면 된다.

<정답>

seat(10);을 출력했을 때, 배열의 크기가 10인 배열 안에 1~10까지 랜덤하게 섞여있다면 정답.

 

<해설>

(method)
static int[] seat(int size)	{//매개변수 size로 하자!
	int[]arr=new int[size];//사이즈만한 크기의 arr이 필요하다.
	int index = 0;
		
	start:while(true) { //돌아갈때마다, 랜덤한 값이 들어가는게 필요하다.
	int ran = (int)(Math.random()*size)+1;//이부분이 이해가 잘안간다.
    //중복검사 부분
	for(int i = 0;i<index;i++	) {
		if(arr[i]==ran) {
			continue start;
			}
		}
	arr[index]=ran;
	index++; //이렇게 까지만 하면, 중복값이 나온다. //중복검사로 가기
	if(index==size) break;//탈출
	}
return arr; 
}
    
(in main)
int[] arr = seat(10);
System.out.println(Arrays.toString(arr));

728x90