일단 난 자바밖에 다뤄본적이 없고.. 씨는 기초적인 것도 헷갈려해..(회사 업무중에 pro-c라고

아주 찔금 다뤄봐서.. 거기서는 포인터도 거의 안쓰여서...)

그래서 자바로만 설명할께.. 씨로 짜면 자료구조 직접 다 구현할텐데.. 자신이 없다 ㅋ

자료구조 떡칠했고.. 제대로 된 알고리즘이나 퍼포먼스가 보장된 알고리즘이라곤 말 못하겠어

ㅋㅋ 그냥 이렇게 하면 돌아는 가겠다 라는 생각이야... 아마 다른 형들이 최적화해서 짜주겠지..

나는 일이 없어서 ㅠㅜ 심심해서 짜보는거라 허접하더라도 이해해줘..

내가 자바 스윙을 다뤄봤으면 좀더 간편하고 이쁜 ui를 만들어 주겠는데.. 내가 해본 ui는

웹이랑 안드로이드밖에 없어.. ui부분은 제껴두고... 짜볼께..

시드값 입력은 파일로 받게할 생각이야...

01,03,04,05,06,07,09,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,33,36,37,38,40,41,42,44,45
01,03,04,06,08,10,11,12,13,14,15,16,17,18,20,22,24,25,26,28,29,30,31,33,34,36,37,38,39,40,41,42,43,44,45
01,02,03,04,05,06,07,08,10,11,14,15,17,18,19,20,22,23,24,25,26,28,29,30,31,32,33,34,35,36,39,40,41,42,44

이런식으로 저장된 파일을 읽어오는거지..

기존에 있는것처럼 드래그해서 붙여넣기 하는식도 좋은데... 앞서 말했듯이 스윙을 안해봐서..

그렇다고 저 숫자를 하나하나 사용자가 입력하는건 아닌거 같고.. 그래서 파일로 읽어오는걸로 할께

자바에 scanner.nextLine() 메소드를 쓰면 한줄씩 읽어와..

while(scanner.hasNext){                          //읽어올 내용이 있다면
  String 시드값=scanner.nextLine()
  String 시드값에 있는 숫자[]=시드값.split(","); // ,로 파싱해주는거.. 문자로 표현된 숫자들의 배열에 각기 값이 담김
  arraylist.add(시드값에 있는 숫자[]);     // 어레이 리스트에 위에서 나온 숫자배열을 추가해 주기
}

while(HashSet.size()<=50){                          //인덱스 갯수가 50개가 될때까지.. 반복
    int 시드값인덱스=(int)(Math.random()*arraylist);//0부터 총시드값이 저장되어 있는 목록 수 사이에서 랜덤하게 값을 뽑음
    if(!HashSet.contains(시드값인덱스)){            //뽑은 값이 기존에 있는 인덱스인지 아닌지 구별
      HashSet.add(시드값인덱스);                    //없을시에 인덱스를 관리하는 hashset에 추가
    }
}

Iterator 해쉬셋이터레이터=HashSet.iterator();      //인덱스를 관리하는 hashset을 순차적으로 불러오기 위해 이터레이터를 검.

while(해쉬셋이터레이터.hasNext()){                 //해쉬셋이터레이터가 끝날때까지 반복
    String[] 시드의숫자들=arraylist.get(해쉬셋이터레이터.next()); //랜덤하게 나온 인덱스를 통해 전체 목록중에서 값을 꺼내옴. 그 값들이 문자열 배열이기 때문에 문자열 배열로 선언하고 값을 넣음.
    for(int i=0;i<시드의숫자들.size();i++){                       //나온 숫자들의 배열길이 만큼 반복
        if(HashMap.contains(시드의숫자들[i]){                     //기존에 있는 숫자인가 아닌가 판별
            HashMap.put(시드의숫자들[i],HashMap.get(시드의숫자들[i])+1) //있는 숫자라면 나온 횟수를 증가시킴
        }else{
            HashMap.put(시드의숫자들[i],1);                       //아니라면 해쉬맵에 키값을 넣고 값음 1을 넣음.
        }
            
    }
}

Iterator 해쉬맵이터레이터=HashMap.keySet().iterator();       // 해쉬맵 값에 순차적으로 접근하기 위해 이터레이터 검
while(해쉬맵이터레이터.hasNext()){                   //해쉬맵끝까지 반복
   String 뽑아낸수=해쉬맵이터레이터.next();          //키값을 뽑아낸수 라는 문자열 변수에 담음. 키값이란 숫자를 말함(1~45)
   if(HashMap.get(뽑아낸수)==HashSet.size()){        //그 숫자가 중복된수가 50번인지 아닌지 구분.. 
                                                     //50이라고 안하고 HashSet.size()를 쓴 이유는 지금은 50개를 추려서 값을 뽑아내지만 
                                                     //나중에는 30개가 될수도 있고 100개가 될수 있기때문에.. 
                                                     //그때그때 상황에 맞출수 있는 유연한 코드가 되기를 바라는 마음으로..
       최종적으로 살아남은 수 리스트.add(뽑아낸수);  //전부 중복된 숫자들을 리스트에 담는다.
   }   
    
}



for(int i=0;i<최종적으로 살아남은 수 리스트.size();i++){ //최종적으로 살아남은 숫자들을 출력
    
   System.out.print(최종적으로 살아남은 수 리스트[i]+"/");
}
   System.out.println("");

if(최종적으로 살아남은 수 리스트.size()<6){              //6개 미만일경우 끝나고 아닐 경우는 뽑아낸 수에서 6개를 랜덤으로 뽑아주는 곳으로 간다.
   System.out.println("결과수의 갯수가 6개 미만입니다 "); 
   return; 
}

---------------

일단은 이런식으로 흐름이 진행되게 할건데... 내가 잘못 이해하거나 빼먹은게 있으면 말해줘... 주석 달아서 형이 이해하기 쉽게

설명한다고 했는데 이해 안되는 부분 있으면 말해주고...  일단 기존꺼 보다 속도같은거는 모르겠다 ㅋㅋ 기존꺼 한번 돌려봐서

어떤지 잘 모르겠고.. 알고리즘을 내가 잘 짜는것도 아니라서... 이런식으로 짜면 돌아는 갈거야... 뭐 짜봐야 알겠지만