중복값이 안나오게하려면 어캐하죠?
언뜻 듣기에 배열에 값을 일일이 넣어준다음 순서를 섞으면 된다는데 이해가 잘 안되서;
순서를 섞는게 랜덤이라면 그것도 중복되서 가령 배열[1]이랑 배열[19]가 같은값을 가지는 경우가 나오는데, 어떻게 해결할지 잘 모르겠네요..
아직 초보단계라서 쉬운 설명 부탁드립니다
My life for Aiur
언뜻 듣기에 배열에 값을 일일이 넣어준다음 순서를 섞으면 된다는데 이해가 잘 안되서;
순서를 섞는게 랜덤이라면 그것도 중복되서 가령 배열[1]이랑 배열[19]가 같은값을 가지는 경우가 나오는데, 어떻게 해결할지 잘 모르겠네요..
아직 초보단계라서 쉬운 설명 부탁드립니다
My life for Aiur
아, 그리고 입력값이 중복되지않게 하려면 if문으로 체크를 하던가 해야하는건가요? 아님 다른방법이있나요?
당장 생각이 나는 방법은
1~5까지의 수가 배열에 저장되어 있다고 하고 랜덤으로 나온 수를 배열의 갯수로 나눈 값
ㄴ 그러면 가령 랜덤추출 숫자가 6일때랑 11일때 동일한 값이 나오는거 아닌가요?
여기서는 수가 5개가 있으니 값의 범위가 0~4가 되겠지 이 값을 인덱스로 해서 해당 인덱스의 배열값을 꺼내 오는거지
Rand로 뽑은숫자를 나눈것 자체가 중복이 되어버리니...
ㄴㄴ 배열에 1,2,6,3,11 이 순서로 저장되어 있다고 치고
내가 생각한방법 a[0]=1, a[1]=2 .... 순서대로 배열에 숫자 넣고, 배열 순서 자체를 랜덤으로 섞은다음에 a[0]부터 순서대로 출력하면 중복값 안나옴.
Rand로 뽑은 수에 배열에 저장된 수의 개수 5를 나누면 0~4 중에 하나가 나오는데
딜박 / 그 배열순서를 랜덤으로 섞을때 rand로 섞는건가요? 그러니까 배열[0]=배열[rand함수] 이렇게 하는건 아니죠?
이 수를 인덱스로 해서 가령 2가 나왔다고 하면 배열에서 2의 위치에 저장된 값이 6이니까 6이 나오겠지
ㅇ 님 근데 그걸로 하면 결국 랜덤으로 뽑은 수는 중복되니까 6이 두번 나오는거 아닌가요??
한번 나왔던 수는 배열에서 지우고 배열의 갯수도 -1을 해서 앞서와 똑같이 하면 된다
아아.. 배열에서 지워야 하는구먼..
랜덤으로 나온 수를 그대로 쓰는게 아니라니까 그 수를 배열의 인덱스 값으로 쓰는거지
배열의 인덱스로 쓴다고 하더라도 랜덤값이 2가 나온다면 결국은 또 6이나오잖아요 제말은 그거였죠.. 근데 이걸 지워버린다면 상관없을듯 하기도하고..
구체적으로 지우는 방법을 어떻게하는게 좋을까요? 코드를 복잡하게 안하고..
저게 번거로우면 한번 나왔던 수를 배열에 저장하고
새로운 수를 출력할때 배열에 저장된 수랑 일치하는게 있으면 다시 섞는 방식도 병맛 돋긴 하지만 구현은 간단하겠지
처음에 설명한 방법은 배열이라고 설명하긴 했지만 삭제를 간단하게 하려면 링크드 리스트로 구현하는게 좋을듯
링크드 리스트 코드야 인터넷에 넘쳐나니 검색해보면 되고
흠 그냥 숫자를 뽑을때 for if중첩으로 한번 검사해보고 뽑는식으로 하는게 편하겠네요.. 감사합니다