프로그래밍/함수형 프로그래밍

[함수형 프로그래밍 연습하기] 프로그래머스 Level1 - 같은 숫자는 싫어

mhko411 2021. 8. 5. 23:41
728x90

https://programmers.co.kr/learn/courses/30/lessons/12906

 

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

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

programmers.co.kr


접근

기본적으로 스택을 활용하였다. 숫자들을 탐색하면서 현재 숫자와 스택의 top을 비교한다.

만약 stack의 top과 현재 숫자가 다를 때는 숫자를 스택에 추가하고 같을 때는 추가하지 않는다.

최종적으로 stack을 반환한다.

 

구현

- filter라는 함수를 만들었고 빈 배열과 arr을 넘긴다.

- 빈 배열은 스택으로 활용된다.

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

  answer = filter([], arr);

  return answer;
}

 

- 전달받은 숫자들을 탐색하고

- 스택이 비어있을 때 스택에 현재 숫자를 추가하고

- 스택이 비어있지 않을 때는

- 스택의 top과 현재 숫자를 비교하여 같을 때는 continue

- 다를 때는 stack에 push 한다.

function filter(stack, numbers) {
  for (let number of numbers) {
    if (isEmpty(stack)) stack.push(number);
    else {
      if (isEqual(stack, number)) continue;
      stack.push(number);
    }
  }
  return stack;
}

전체 코드

function filter(stack, numbers) {
  for (let number of numbers) {
    if (isEmpty(stack)) stack.push(number);
    else {
      if (isEqual(stack, number)) continue;
      stack.push(number);
    }
  }
  return stack;
}

function isEmpty(list) {
    if (list.length === 0) return true;
    return false;
}

function isEqual(list, b) {
    return list[list.length-1] === b;
}

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

  answer = filter([], arr);

  return answer;
}