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 |