리뷰: 로또 번호 생성

문제는 list.get()이용해서 풀었는데 정답코드를 보니

// 뽑는다
int[] pickedNum = new int[6];
for (int i = 0; i < pickedNum.length; i++) {
pickedNum[i] = list.remove(0);
}

이렇게 쓰여져 있더라구요! 뒤에 연습문제에도 비슷한 문제 있어서 보니까 아마 pickedNum[i] = list.remove(i) 를 잘못 입력하신거 같긴한

데..

구글링을 통해 list.remove(N)은 N번째 인덱스의 값을 삭제하고 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로

1씩 당겨진다는 것 까지는 알겠습니다

예를 들어 list를 shuffle 하고나서 list에 12 , 3, 5, 7, 9.. 이런식으로 45개의 숫자가 들어가 있다고 할 때

int[] pickedNum = new int[6];
pickedNum[0] = list.remove(0);
}

를 시행한다면

pickedNum[0] 에는 list의 0 번째 index가 사라진 3, 5, 7, 9… 이렇게 44개의 숫자가 나열되어있는 것 아닌가요?

pickedNum은 int형 배열이니까 pickedNum[0]에는 int 한개가 들어가야 될 것 같은데..

제가 잘못이해하고 있는걸까요? 설명 한번만 부탁드립니다..ㅠㅠ

CODE Link

  1. import java.util.Collections;
  2. import java.util.Arrays;
  3. import java.util.ArrayList;
  4. public class SimpleLottoMachine {
  5. public static void main(String[] args) {
  6. ArrayList<Integer> list = new ArrayList<>();
  7. for (int i=1; i<46 ;i++ ){
  8. list.add(i);
  9. }
  10. Collections.shuffle(list);
  11. int[] arr = new int[6];
  12. for (int i=0; i<6 ; i++ ){
  13. arr[i]= list.get(i);
  14. }
  15. String result = Arrays.toString(arr);
  16. System.out.printf("자동 생성 번호: %s", result);
  17. }
  18. }

INPUT

OUPUT

  1. 자동 생성 번호: [38, 17, 45, 3, 6, 39]

반복문을 한 줄씩 작성한 뒤
하나하나 실행을 비교해보세요

선생님 말씀대로 하나하나 실행해서 서로 다른 6개의 정수가 나오는 걸 확인할 수 있었습니다

  1. int[] arr = new int[6];
  2. arr[0] = list.remove(0);
  3. System.out.println(arr[0]);
  4. arr[1] = list.remove(1);
  5. System.out.println(arr[1]);
  6. arr[2] = list.remove(2);
  7. System.out.println(arr[2]);
  8. arr[3] = list.remove(3);
  9. System.out.println(arr[1]);
  10. arr[4] = list.remove(4);
  11. System.out.println(arr[4]);
  12. arr[5] = list.remove(5);
  13. System.out.println(arr[5]);

그런데.. list.remove(N)을 실행하면 N번째 index의 값이 삭제되는데 그게 어떻게 하나의 정수로 귀결되는지 원리가 이해가 잘 안갑니다..

계속 복습한 결과 suffle시행한 list 에 담긴 숫자가 순서대로 29 22 4 7 11 8 이라면 list.remove(0) = 29 인 건가요?

list.remove(0) = 삭제되는 0번째 index값 <- 이렇게 이해하는게 맞는건지 궁금합니다!

네, 맞습니다.

ArrayList의 remove(n) 메소드는
입력 정수에 해당하는 인덱스값을 반환함과 동시에,
ArrayList에서 삭제합니다.

더 자세한 내용은 다음 키워드로 구글링해보세요
“ArrayList remove 메소드”

[Markdown Preview]