[프로그래머스/JS] Lv1. 같은 숫자는 싫어

2024. 6. 26. 10:25· JavaScript/프로그래머스

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


풀이

 자바 스크립트로 큐를 구현해보고자 시도한 문제였다. 자바스크립트에는 자바처럼 큐 라이브러리가 없기 때문에 직접 구현을 해야만 한다.

 

 스택의 성질을 써도 되지만, 나는 자료구조에서 값을 빼내어 answer 변수에 저장할 때, 그냥 큐에서 poll 하는 순서대로 저장하고 싶었다.

 

 그래서 큐를 구현하였고, 제출했더니 시간초과가 발생했다.

function solution(arr)
{
    var answer = [];
    
    let queue = new Queue();
    for(let i = 0; i<arr.length;i++){
        const num = arr[i];
        if(queue.peek()!==num){
            queue.add(num);
        }
    }
    while(!queue.isEmpty()){
        answer.push(queue.poll());
    }
    return answer;
}

class Queue{
    
    constructor(){
        this.arr = [];
    }
    poll(){
        return this.arr.shift();
    }
    add(item){
        this.arr.push(item)
    }
    peek(){
        return this.arr[this.arr.length-1];
    }
    isEmpty(){
        return this.arr.length===0;
    }
}

 

 

띠용.. 제한 사항에 배열 'arr의 크기 : 1,000,000 이하의 자연수'라는 것을 간과했던 탓일까. 정확한 시간 제한 기준이 명시되어있지 않아 저렇게 연습해보라는 문제인줄 알았다.

 

 

이 코드에서 가장 큰 오버헤드는  queue를 구현한 부분의 poll()에서 shift 메서드 부분이다. shift를 쓸 때마다 배열은 한 칸씩 당겨지며, O(n)의 시간복잡도가 생기게 된다.

 

 그리고 while문을 돌며, queue에서 정답 배열로 값을 밀어넣는 과정도 O(n)의 시간복잡도가 생기게 된다.

 

 

 

 

 

그래서 queue 자료구조 구현없이 스택의 원리만 가져와 구현했더니 또 시간초과가 발생했다.

function solution(arr)
{
    let stack = [];
    for(let i = 0; i<arr.length;i++){
        const num = arr[i];
        if(stack.length===0||stack[stack.length-1]!==num){
            stack.push(num);
        }
    }
    return stack;
}

 

시간복잡도는 최소화했는데, 로직적으로 미세하게 시간 초과가 나는 것 같다.

 

 

 

그래서 최소한의 로직으로 배열로만 구현하니 통과했다. 아래는 소스 코드이다.


소스 코드

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

'JavaScript > 프로그래머스' 카테고리의 다른 글

[프로그래머스/JS] Lv2. 더 맵게 (힙 자료구조, 우선순위 큐 구현)  (0) 2024.06.27
[프로그래머스/JS] Lv1. 올바른 괄호 (스택 구현)  (0) 2024.06.26
[프로그래머스/JS] Lv0. 문자열 반복해서 출력하기 (반복 출력)  (0) 2024.06.21
[프로그래머스/JS] Lv0. a와 b 출력하기 (구조 분해 할당)  (0) 2024.06.21
[프로그래머스/JS] Lv0. 문자열 출력하기 (입출력)  (0) 2024.06.21
'JavaScript/프로그래머스' 카테고리의 다른 글
  • [프로그래머스/JS] Lv2. 더 맵게 (힙 자료구조, 우선순위 큐 구현)
  • [프로그래머스/JS] Lv1. 올바른 괄호 (스택 구현)
  • [프로그래머스/JS] Lv0. 문자열 반복해서 출력하기 (반복 출력)
  • [프로그래머스/JS] Lv0. a와 b 출력하기 (구조 분해 할당)
동구름이
동구름이
동구름이
동구름
동구름이
전체
오늘
어제
  • 분류 전체보기 (177)
    • Java (63)
      • Java 를 파헤쳐보자 (13)
      • BOJ (45)
      • 프로그래머스 (3)
      • SWEA (1)
      • Java GUI (1)
    • JavaScript (17)
      • JS를 파헤쳐보자 (7)
      • 프로그래머스 (7)
      • JS 학습 정리 (1)
    • Backend (32)
      • Spring (3)
      • HTTP (7)
      • 프로젝트 (10)
      • MySQL (5)
      • Redis (3)
      • Elastic Search (1)
      • 인증, 인가 (3)
    • CS (57)
      • 운영체제 (35)
      • Network (22)
    • Git (2)
    • 개발 관련 이것저것 (2)
    • etc (1)
    • 독서 (0)
    • 사설 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • BOJ
  • 큐
  • OS
  • 반효경
  • 자바스크립트
  • 프로그래머스
  • JCF
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • 인프런
  • 자바
  • 운영체제
  • 백준
  • 이석복
  • 구현
  • 레디스
  • Java
  • 네트워크
  • 한양대
  • 김영한
  • 스택

최근 글

hELLO · Designed By 정상우.v4.2.2
동구름이
[프로그래머스/JS] Lv1. 같은 숫자는 싫어
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.