[프로그래머스/자바스크립트] 스택/큐 문제 풀이 모음

2025. 3. 4. 02:18·코딩테스트/프로그래머스-JS
목차
  1. 1. 같은 숫자는 싫어 - lv1
  2. 2. 기능개발 - lv.2
  3. 3. 올바른 괄호 - lv.2
728x90

1. 같은 숫자는 싫어 - lv1

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

연속으로 나타나는 수는 하나만 남기고 나머지는 제거하는 문제이다. 배열보다 filter를 사용하면 간단하게 풀 수 있다.

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

값이 다음 값과 같은 경우에는 걸러낸다.

배열을 사용하면 이렇게 풀 수 있다.

function solution(arr)
{
    var answer = [arr[0]];
    
    arr.forEach(v => answer[answer.length-1] !== v ? answer.push(v) : '');
    
    return answer;
}

우선 arr의 첫번째 값을 배열에 넣는다.

그 다음 arr를 forEach로 순회하면서 값이 answer.peek()값과 다른 경우에만 배열에 값을 push한다.

 

2. 기능개발 - lv.2

https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=javascript

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

작업 진도를 x, 작업 속도를 y라 하고 배포 가능 상태가 되기까지 걸리는 날은 다음과 같이 구할 수 있다.

Math.ceil((100 - x) % y)

 

위 공식으로 구한 [93, 30, 55]가 배포 가능 상태가 되기까지 걸리는 날은 [7, 3, 9]다. (이하 prog)

두 번째 값 3은 첫 번째 값 7이 먼저 배포될 때까지 기다렸다가 7과 함께 배포된다. 그리도 이틀 뒤에 9가 배포된다. 즉 반환값은 [2, 1]이 된다.

이를 다음과 같이 정리했다.

  • 배포날인 n을 prog의 첫 번째 값으로 초기화(배포)하고 배열에서 그 값을 삭제한다.
  • 반환값 answer 배열은 [1]로 초기화한다. 7 하나가 배포되었기 때문이다.
  • 이제 prog 배열을 순회하면서 값 x가 n보다 작거나 같을 때는 함께 배포한다. (answer[answer.length-1]++)
  • n보다 큰 경우에는 배포날이 다르므로 answer에 1을 push하고 n을 x로 바꾼다.
function solution(progresses, speeds) {
    progresses = progresses.map((x, i) => Math.ceil((100-x)/speeds[i]));
    
    var answer = [1];
    var n = progresses.shift();
    
    progresses.forEach((x, i) => {
        if(x <= n) answer[answer.length - 1]++;
        else { answer.push(1); n = x; }
    })
    
    return answer;
}

 

3. 올바른 괄호 - lv.2

처음에는 replaceAll()을 사용해서 풀었지만 효율성에서 시간초과가 떴다. replaceAll()이 문자열 전체를 탐색하기 때문에 시간 복잡도가 높기 때문이다.

function solution(s) {
    while (s.length > 0) {
        var copy = s;
        s = s.replaceAll('()', '');
        if (s === copy)
            return false;
    }
    return true;
}

정석대로 스택을 사용해서 풀면 한번만 순회하여 시간초과가 뜨지 않는다.

  1. 주어진 문자열을 순회한다.
  2. 문자가 '('이면 배열에 push한다.
  3. ')'인 경우
    1. 배열이 비어있으면 올바른 괄호가 아니기 때문에 false를 반환한다.
    2. 비어있지 않으면 배열을 pop한다.(배열에는 '('만 들어있기 때문)
  4. 순회가 끝나고 배열이 비어있으면 true를, 아니면 false를 반환한다.
function solution(s) {
    var arr = [];
    for (let c of s) {
        if (c === '(') arr.push(c);
        else {
            if (arr.length === 0) return false;
            else arr.pop();
        }
    }
    return arr.length === 0;
}
728x90

'코딩테스트 > 프로그래머스-JS' 카테고리의 다른 글

[프로그래머스/자바스크립트] 완전탐색 문제 풀이 모음  (0) 2025.04.07
[프로그래머스/자바스크립트] 해시 문제 풀이 모음  (0) 2025.03.09
[프로그래머스/자바스크립트] 정렬 문제 풀이 모음  (0) 2025.03.04
  1. 1. 같은 숫자는 싫어 - lv1
  2. 2. 기능개발 - lv.2
  3. 3. 올바른 괄호 - lv.2
'코딩테스트/프로그래머스-JS' 카테고리의 다른 글
  • [프로그래머스/자바스크립트] 완전탐색 문제 풀이 모음
  • [프로그래머스/자바스크립트] 해시 문제 풀이 모음
  • [프로그래머스/자바스크립트] 정렬 문제 풀이 모음
gamzaggang7
gamzaggang7
    250x250
  • gamzaggang7
    abcdefghklpqrstuvwxyz
    gamzaggang7
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
        • OS
        • 자료구조_알고리즘
      • Java
      • Javascript
      • Node.js
      • React
      • Vue.js
      • 코딩테스트
        • 백준-Java
        • 프로그래머스-JS
      • Canvas
      • HTML, CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    fecolormatrix
    hashchange
    BFS
    프로그래머스
    canvas
    2차원배열
    백준풀이
    Next.js
    npm
    자바
    dat.gui
    정렬
    vue modal
    라우팅
    큐
    오즈코딩스쿨
    css
    자바스크립트
    해시
    자바백준풀이
    React
    Node.js
    vue animation
    props
    서버구축
    til
    vue.js
    fegaussianblur
    스택
    자바공부
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gamzaggang7
[프로그래머스/자바스크립트] 스택/큐 문제 풀이 모음
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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