배열 중복 검사 알고리즘

김덕근·2022년 12월 13일
0

algorithm

목록 보기
3/12
	public void creatLottoNumber() {
		// 로또번호 생성기
		// [6, 12, 16, 20, 21, 42]
		
		// 1. 1 ~ 45 사이 중복되지 않는 난수 6개 생성 => Math.random()
		// 2. 생성된 난수가 오름차순으로 정렬 => Arrays.sort()
		
		// 1) 정수 6개를 저장할 배열 선언 및 할당
		int[] lotto = new int[6];
		
		// 2) 생성된 배열을 처음부터 끝까지 순차 접근하는 for문 작성
		for(int i = 0; i < lotto.length; i++) {
			
			// 3) 1 ~ 45 사이의 난수생성
			int random = (int)(Math.random() * 45 + 1);
			// 0.0 <= x < 1.0
			// 0.0 <= x * 45 < 45.0
			// 1.0 <= x * 45 + 1 < 46.0
			// 1 <= (int)(x * 45 + 1) < 46
			
			// 4) 생성된 난수를 순서대로 배열 요소에 대입
			lotto[i] = random;

			// 5) 중복 검사를 위한 for문 작성
			for(int x = 0; x < i; x++) {
				
				// 6) 현재 생성된 난수와 같은 수가
				// 	앞쪽 요소에 있는지 검사
				if(random == lotto[x]) {
					
					i--;
					//i가 1씩 증가할 때 마다 난수가 하나 생성
					// => 중복 값이 있으므로 난수를 새로 하나 더 생성해야함.
					// --> i는 기본적으로 0~5까지 6회 반복되지만
					// 		i값을 인위적으로 1 감소시켜서 7회 반복되는 모양을 만듦.
					
					break;
					// 앞쪽에서 중복 데이터 발견하면
					// 남은 값을 비교할 필요 없음
					// -> 효율 향상을 위해서 감사하는 for문 종료

				}
			}
		} // for문 끝
		Arrays.sort(lotto);
        
		//결과 출력
		System.out.println(Arrays.toString(lotto));
	}
    ```
profile
안녕하세요!

0개의 댓글