프로그래머스_같은 숫자는 싫어 / 스택(Stack) 큐(Queue) 찍먹

ㅇㅖㅈㅣ·2024년 3월 13일
0

Today I Learned

목록 보기
76/93
post-thumbnail

프로그래머스 코딩테스트 연습문제를 풀어보았다.

💡 문제

스택/큐 > 같은 숫자는 싫어

배열 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 함수를 완성해 주세요.

제한사항

배열 arr의 크기 : 1,000,000 이하의 자연수
배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

입출력 예

arranswer
[1,1,3,3,0,1,1][1,3,0,1]
[4,4,4,3,3][4,3]

🔗 나의 풀이

function solution(arr)
{
    let answer = [];
    for (i=0; i<=arr.length; i++) {
      if (arr[i] !== arr[i+1]) {
          answer.push(arr[i])
      }  
    }

    return answer;
}

for 문으로 arr의 길이만큼 순서대로 돌면서 그 다음 숫자랑 같은 숫자가 같지 않을 경우에 answer배열에 넣어주는 방식으로 접근해보았다.

(오랜만에 푸니까 감 다 떨어져서 힘들었다;; 꾸준히 풀어봐야지..)

다른사람의 풀이

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

filter를 이렇게 사용할 수 있구나 싶었다...


❓ 자료구조 - 스택/큐

프로그래머스에서 코딩테스트 → 알고리즘 고득점 kit 에 들어가보면 자료구조로 분류해서 나눠놓은 문제들을 볼 수 있다.
사실 알고리즘을 풀면서도 자료구조라는 것에 대한 지식이 전혀 없이 풀어왔었다.

이번에 풀었던 문제의 유형이 스택/큐 이었기 때문에 자세하게는 아니지만 간단하게 스택/큐는 무엇인지에 대해 찾아보았다.

자료구조란?

자료구조는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다. 신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 한다. (출처_위키백과)

스택/큐

스택(Stack)큐(Queue)는 자바스크립트에서 두 가지 중요한 자료구조로, 데이터를 저장하고 관리하는데 사용된다. 각각의 자료구조는 데이터를 저장하고 접근하는 방식이 다르며, 특정한 작업을 수행하기 위해 효율적으로 활용된다.

스택(Stack)

  • 스택은 후입선출(LIFO, Last-In-First-Out) 방식을 따르는 자료구조
  • 즉, 가장 최근에 추가된 항목이 가장 먼저 제거되는 구조

스택 주요 연산

  • push(item) : 스택의 맨 위(마지막)에 항목을 추가한다.
  • pop() : 스택의 맨 위(마지막)에서 항목을 제거하고 반환한다.
  • peek() : 스택의 맨 위(마지막)에 있는 항목을 제거하지는 않고 반환한다.
  • isEmpty() : 스택이 비어 있는지 확인한다.

스택의 사용 예시

  • 실행 취소 (undo)
  • Backtracking
  • 웹 브라우저 뒤로가기
  • 구문분석
  • 후위(postfix) 표기법 연산
  • 문자열의 역순 출력 등

이미지출처


큐(Queue)

  • 큐는 선입선출(FIFO, First-In-First-Out) 방식을 따르는 자료구조
  • 즉, 가장 먼저 추가된 항목이 가장 먼저 제거되는 구조

큐 주요 연산

  • enqueue(item) : 큐의 뒤쪽에 항목을 추가한다.
  • dequeue() : 큐의 앞쪽에서 항목을 제거하고 반환한다.
  • peek() : 큐의 앞쪽에 있는 항목을 제거하지는 않고 반환한다.
  • isEmpty() : 큐가 비어 있는지 확인한다.

큐의 사용 예시

  • 프로세스 관리
  • 작업 대기열 관리(ex.프린터 작업 대기열)
  • 은행 업무

이미지출처

profile
웰씽킹_나는 경쟁력을 갖춘 FE개발자로 성장할 것이다.

0개의 댓글