개발자/프로그래머스 알고리즘

코딩테스트 연습 - 같은 숫자는 싫어 | 프로그래머스 js ★★★☆☆

YoungDogg 2022. 1. 11. 14:11

코딩테스트 연습 - 같은 숫자는 싫어 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr

 

1차 시도

function solution(arr) {
  let answer = [];
  // 연속으로 오는 요소를 while(true)로 찾고 없다면 다음 요소로 넘어간다
  for (let i = 0; i < arr.length - 1; i++) {
    //이중 반복문, 재귀는 너무 느리고 다른 거 없나
    let insideI = i;
    while (true) {
      // 이중 반복문으로 타협하자
      if (arr[insideI] === arr[insideI + 1]) {
        // 만약 둘이 같다면 자기 자리를 삭제
        arr.splice(i, 1);
      } else {
        break;
      }
    }
  }
  answer = arr;
  return answer;
}

이중 반복문으로 풀어봤다. 시간초과가 떴다.

2차 시도 

set을 써봤다.

function solution(arr){
  let answer =[];
  let mySet = new Set(arr);
  answer = mySet;
  return answer;
}

console.log(solution([1,1,3,3,0,1,1]))

순서를 처리할 수가 없었다.

 

3차 시도 잘 됐다.

function solution(arr) {
  let answer = [];

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] !== arr[i + 1]) {
      // 만약 둘이 다르다면 answer에 넣는다.
      answer.push(arr[i]);
    }
  }
  return answer;
}

console.log(solution([1, 1, 3, 3, 0, 1, 1])); // [ 1, 3, 0, 1 ] 

//성공

 

다른 사람 것을 봤다. 

더 잘한 것이 있는지 확인

 
function solution(arr)
{
    return arr.filter((val,index) => val != arr[index+1]);
}

filter를 썼다.

 

filter를 생각하지 못했다.

 

filter에 대해 공부해보자

Filter란 :: YoungDogg (tistory.com)

4차 시도 

function solution(arr) {
  return arr.filter((val, index) => {
    if (arr[index] !== arr[index + 1]) { 
      return arr[index];
    }
  });
}

console.log(solution([1,1,3,3,0,1,1])); // [ 1, 3, 1 ] 실패
function solution(arr) {
  let answer = [];
  return arr.filter((val, index) => {
    if (arr[index] !== arr[index + 1]) {  
      answer.push(arr[index]);
      return  answer;
    }
  });
} // 성공

성공