본문 바로가기
코딩 테스트/프로그래머스

110 옮기기 (자바스크립트)

by 위그든씨 2025. 6. 9.

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

 

프로그래머스

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

programmers.co.kr

문제 풀이

110을 뽑은 다음 사전순으로 문자열을 조작할려면 0 다음에 110들을 붙이거나, 0이 없다면 1들로 이뤄진 문자열 앞에 110들을 두면 된다.

문장에서 110들을 모조리 뽑는 것은 문자열을 탐색하면서 문자들을 스택에 하나씩 넣다가 110을 넣으면 뽑고 count 를 +1 씩 해준다.

이후 count의 갯수만큼 110을 만든다.

let stack = [];
let count = 0;

for (let i = 0; i < str.length; i++) {
    stack.push(str[i]);
    if (
        stack.length >= 3 &&
        stack[stack.length - 3] === '1' &&
        stack[stack.length - 2] === '1' &&
        stack[stack.length - 1] === '0'
    ) {
        stack.pop();
        stack.pop();
        stack.pop();
        count++;
    }
}

이제 끝에서부터 0을 찾아보고 없다면 110 갯수만큼 문자들 생성 후 나머지 1들을 붙이기.

있다면 그 뒤에 110들 붙이고 나머지 1들 이어주기

let idx = stack.lastIndexOf('0');
if (idx === -1) {
    stack = Array(count).fill('110').join('') + stack.join('');
} else {
    stack =
        stack.slice(0, idx + 1).join('') +
        Array(count).fill('110').join('') +
        stack.slice(idx + 1).join('');
}

answers.push(stack);

 

전체 코드

function solution(s) {
    const answers = [];

    for (let str of s) {
        let stack = [];
        let count = 0;

        for (let i = 0; i < str.length; i++) {
            stack.push(str[i]);
            if (
                stack.length >= 3 &&
                stack[stack.length - 3] === '1' &&
                stack[stack.length - 2] === '1' &&
                stack[stack.length - 1] === '0'
            ) {
                stack.pop();
                stack.pop();
                stack.pop();
                count++;
            }
        }

        let idx = stack.lastIndexOf('0');
        if (idx === -1) {
            stack = Array(count).fill('110').join('') + stack.join('');
        } else {
            stack =
                stack.slice(0, idx + 1).join('') +
                Array(count).fill('110').join('') +
                stack.slice(idx + 1).join('');
        }

        answers.push(stack);
    }

    return answers;
}

const a = ['1110', '100111100', '0111111010'];
console.log(solution(a));
 
 

idx = stack.lastindexof ( '0')를하자;
if (idx === -1) {
stack = array (count) .fill ( '110'). join ( '') + stack.join ( '');
} 또 다른 {
스택 =
stack.slice (0, idx + 1) .join ( '') +
배열 (count) .fill ( '110'). join ( '') +
stack.slice (idx + 1) .join ( '');
}

답변 (스택);

 

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

주사위 고르기  (0) 2025.10.21
표 병합 (자바스크립트)  (0) 2025.10.18
[lv3]코딩 테스트 공부 (자바스크립트)  (0) 2024.05.22
빛의 경로 사이클  (0) 2024.05.21
2차원 동전 뒤집기  (0) 2024.05.20