TIL17-04 filter 의 활용

김태혁·2023년 1월 28일
0

TIL

목록 보기
62/205

filter를 활용한 문제들

1.1 문제 설명
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
1.2 풀이 과정

  • 처음에는 중복값을 제거하면 간단히 해결 될 수 있을 거라고 생각했다.
  • 하지만 연속된 중복값을 하나씩만 제거해야 정답이 되는 것이었다.
  • 중복을 제거하려 Set()을 썼지만 중복을 모두 삭제되어 정답이 아니었고, for문을 돌리려니 시간초과의 문제가 발생했다.
  • 그래서 filter의 사용법을 검색했고, filter를 통해 문제를 해결했다.
function solution(arr){
 return arr.filter((val,index) => val != arr[index+1]);
                    //val 값이 val index 다음값과 같지 않은 값들만 반환한다.
}

2.1 문제 설명

2.2 풀이 과정

  • 당첨번화 배열과, 주어진 번호 배열을 비교하여 같은 값을 찾는다.
  • 여기서 filter를 사용했다.
function solution(lottos, win_nums) {
     let arr = [];
     let sameNumber = lottos.filter( x => win_nums.includes(x));// 두 배열 비교 같은값 도출
     let count = 0; 
     for (let i = 0; i < lottos.length; i++) {
         if (lottos[i] == 0) {
             count++  //0의 개수 
            }
         }
  • filter를 통해 일치하는 값을 구했고, 0의 갯수는 카운트를 통해 구했다.
  • 일치하는 값만으로 가능한 등수는 최저 등수이고, 일치하는값과 0의 갯수의 합이 최고 등수이다.
     if (sameNumber.length + count == 6 ) {
         arr.push(1);  //같은번호 배열의 길이가 일치하는 번호 갯수 + 0의 갯수 =최고 등수
     } else if (sameNumber.length + count == 5 ) {
         arr.push(2);
     } else if (sameNumber.length + count == 4)  {
         arr.push(3);
     } else if (sameNumber.length + count == 3)  {
         arr.push(4);
     } else if (sameNumber.length + count == 2)  {
         arr.push(5);
     } else {
         arr.push(6);
     }
             if (sameNumber.length == 6) {
         arr.push(1);    //같은번호 배열의 길이가 일치하는 번호 갯수 = 최저 등수
     } else if ( sameNumber.length == 5) {
         arr.push(2);
     } else if ( sameNumber.length == 4) {
         arr.push(3);
     } else if (sameNumber.length == 3) {
         arr.push(4);
     } else if (sameNumber.length == 2) {
         arr.push(5);
     } else {
         arr.push(6);
     }            
    return arr.sort();
}
  • 위의 코드에 로또 등수의 조건문을 만들어 해결하였다.
profile
도전을 즐기는 자

0개의 댓글