[JavaScript] 무작위 숫자 5개를 뽑아 오름차순으로 정렬 2

Lpla

·

2021. 1. 17. 21:34

반응형

지난 포스트 : [JavaScript] 무작위 숫자 5개를 뽑아 오름차순으로 정렬 1

 

지난 번에 무작위 숫자 5개를 뽑아 오름차순으로 정렬하는 방법에 대해 알아보았다.

var 추출 = [];
for (i = 1; i <= 5; i+=1) {
  var 랜덤숫자 = Math.floor(Math.random() * 20) + 1;
  추출.push(랜덤숫자);
}

추출.sort(function(a, b){
  return a - b;
});

console.log(추출);
// 결과
// [9, 9, 22, 41, 49]

 

하지만 중복되는 숫자를 제거하지 못하고 그대로 출력하는 문제가 남아 있다.

 

중복을 검사하는 방법은 indexOf 를 사용하면 된다.

indexOf는 배열에서 지정된 요소를 찾을  있는  번째 인덱스를 반환하고 존재하지 않으면 -1 반환한다.

var array = [2, 9, 9, 5];
array.indexOf(2);  // 0
array.indexOf(9);  // 1
array.indexOf(5);  // 3
array.indexOf(7);  // -1

 

존재하지 않을 때 음수값이 나온다는 점을 이용하여 중복을 검사할 수 있다.

var 추출 = [];
for (i = 1; i <= 5; i+=1) {
  var 랜덤숫자 = Math.floor(Math.random() * 20) + 1;
  if (추출.indexOf(랜덤숫자) === -1) {
    추출.push(랜덤숫자);
  }
}
추출.sort(function (a, b) {
  return a - b;
});

console.log(추출);
// 결과 
// [2, 6, 7, 8, 20]

// 결과
// [3, 18, 19, 20]

// 결과
// [4, 9, 13, 20]

 

하지만 결과를 보면 중복이 있을 경우 숫자를 4개 이하로 반환하는 것을 알 수 있다.

 

우리는 중복을 제외하고 총 5개의 숫자가 반환되길 원한다.

이 문제는 if문을 사용하면 쉽게 해결할 수 있다.

var 추출 = [];
for (i = 1; i <= 5; i += 1) {
  var 랜덤숫자 = Math.floor(Math.random() * 20) + 1;
  if (추출.indexOf(랜덤숫자) === -1) {
    추출.push(랜덤숫자);
  } else {
    i--
  }
}
추출.sort(function (a, b) {
  return a - b;
});

console.log(추출);

 

중복일 경우 i 값을 1 낮춰, 반복문을 한 번 더 돌리도록 하였다.

// 결과
// [4, 11, 12, 16, 19]

// 결과
// [2, 6, 7, 12, 15]

 

비로소 우리가 원하는 중복 없는 5가지 숫자를 오름차순으로 정렬하는 배열을 구할 수 있다.

 

반응형