로또 문제

권재현·2021년 3월 25일

문제풀이

목록 보기
4/8
post-thumbnail

이번문제는 개발자라면 누구라도 풀어본 로또 문제다.
여기서 조건을 하나 추가해 회차당 번호중복이 안된다.

번호는 1 부터 45까지.
회차당 번호 중복은 안됨.
총 5번 출력
위에 3개가 조건이였다.
나는 for문을 사용했다.

처음 문제 접근의 시작은 일단 로또번호 보관해야 출력이 가능해 배열로 변수를 만들었다. 그다음은 회차당 번호 중복을 피하기 위해 어떤 조건식을 넣어야 할 지 고민했고, 결과적으로 아래표처럼 정리 해보니 어렵지 않게 생각했다.

번호52261620
인덱스012345

인덱스 1번은 0번만 비교하면되고 2번은 0,1 과 비교하면된다.
3번은 0,1,2 이렇게 보면 생성되는 번호와 생성되었던 번호만 비교하면 간단히 중복를 걸러낼 수 있고, 중복 시에 번호를 새로 출력 받으면 된다. 여기서 제일 중요한점은 위에 표를 참고하면 인덱스 1번과 2번이 번호과 중복이 발생했다.
근데 2번 인덱스 출력 후 출력을 위해서 3번 인덱스로 넘어간다.
그래서 내가 생각한 방법은 소인수분해를 구할 때 사용한 i--; 이 생각나 바로 적용해 다행히 출력에 성공했다. 이제 코드로 확인해보자

public class Lotto {

	public static void main(String[] args) {
		//문제 2. 로또번호 5번 생성. 1번당 6개의 숫자 중복없이..중복체크..
		
	int[] lotto=new int [6]; //로또 번호 담은 배열변수
		//비교를 위한 
		
	for(int times= 0; times<lotto.length-1; times++) {
		
	lotto[0]=(int) Math.floor(Math.random()*45)+1; // 1번 째 번호
			
	for(int i =1; i<lotto.length; i++) { //2번부터 6번까지 번호 뽑기 횟수
			
	lotto[i]=(int) Math.floor(Math.random()*45)+1; // //2번부터 6번까지 번호 뽑기
		
	for(int j=0; j<i; j++) {
		if(lotto[i]==lotto[j]) { 
        //비교하다 해당차례에서 중복 수가 나오면 
        //그 차례를 다시 뽑으면 되기 때문에 i--해주면 해결된다.
					i--;
					}
				}
			}
System.out.println("로또 "+(times+1)+" 회차 :"+lotto[0]+","+lotto[1]+","+lotto[2]+","
+lotto[3]+","+lotto[4]+","+lotto[5]);
		}
	}
}

참고가 된 소인수분해 코드

public class Practices {
	public static void main(String[] args) {
	int i = 50;
	 for(int j =2; j<=i; j++) {
		 if(i%j==0) {
			 i=i/j;
		
			 System.out.println(j);
			 j--;
		 }
		 
	 	}
	}
}

문제풀이 후기

확실히 처음에 못 풀었어도 복습을 철저히 한 노력의 결과가 오늘 문제를 풀면서 절실히 느꼈다. 그리고 이해못하는 이해할때 까지 포기 하지않고 친절히 설명해준 희두형 때문에 풀 수 있었다.
고맙다는 말은 여기에 조용히 남긴다.

profile
호텔리어 출신 비전공자

0개의 댓글