원본: http://blog.naver.com/seogi1004/100017307360
원본에선 C#으로 되어 있던 것을 java로 짜봤습니다.
잼있는게 중복이 있는지에 대한 if 문을 없애고 새롭게 했다는거에 재밋었음.
if 문을 없애기 때문에 필요한 for문또한 줄어들어서 log2O 만큼의 시간 절약.(아마?)
- 기본적인 알고리즘엔 랜덤으로 뽑은 값이 기존의 배열에 있는지 확인하는 루틴을 제거 했기 때문에
배열을 돌아야할 for문의 시간과 각각의 배열을 비교할 if 문을 제거 했기 때문에 절약 가능.
but 배열대신 링크드 리스트를 사용해서 메모리는 더쓸수도.. 배열은 개인적으로 사용하기 싫어서..
단점이 또하나 있는데 연속적인 링크드리스트를 실행하고 값을 집어 넣고 시작하기 때문에 연속적이지 않은 랜덤
뽑기에선 비효율적 메모리 사용(쓸데없이 많은 공간을 차지 할수도 있음 - 여기에 대한 보안은 랜덤값을 뽑아내서 리스트에 넣고 뽑아낼려는 숫자만큼만 for문을 돌려주면 되겠다. - 요건 다음에 만들어 봐야지).
import java.util.Random;
public class test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
for(int i = 0; i < 100; ++i)
list.addLast(i); // 1~100까지의 값을 집어 넣음
Random random = new Random();
for(int i = list.size(); i > 0; i--)
{
int index = random.nextInt(i); //현재 list 길이 만큼의 숫자에서 랜덤 숫자 뽑아냄
int random_number = (Integer)list.get(index); //랜덤 값이 나온 값을 리스트에서 뽑아냄 (결국 랜덤으로 나온 값을 뽑아내는것과 같음
System.out.println(random_number + " count : " + i);
list.remove(index); //뽑아낸 리스트 제거
}
}
}
'app > java' 카테고리의 다른 글
java class 파일 디컴파일 프로그램 (2) | 2011.03.14 |
---|---|
java.lang.NumberFormatException: For input string (4) | 2011.02.06 |
java 설치 에러 semi-colon found in selected path (0) | 2010.12.14 |
java 1.4 vector 5.0 vector 차이 (0) | 2010.10.12 |
java Integer to int (0) | 2010.10.10 |