[프로그래머스 레벨투] 짝지어 제거하기 👯♂️🧽
🔽 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/12973
✍🏼 나의 수도 코드
// 첫 번째 수도코드
1) 재귀를 활용하자!
2) 짝지어 제거하기 함수를 만든다.
3) 재귀 함수가 리턴한 값이 기존의 문자열과 같으면 0(false)을 출력한다.
4) 문자열의 길이가 0이 되면, 1(true)을 출력한다.
// 두 번째 질문하기를 보고, 스택을 사용하라는 힌트를 얻었다.
1) 스택을 활용한다.
2) s를 split해 splitArr를 만든다.
3) splitArr를 반복문을 돌리면서 요소들을 스택에 옮겨 담는다.
4) 옮겨 담을 때 짝이 생기면 제거해준다.
5) 마지막에 splitArr와 스택이 모두 빈 배열이 되면 1을 리턴한다.
👨🏻💻 나의 문제 풀이
// 정확도에서 일부, 효율성 전체 실패 코드
function deletePairStr(s){
let strArr = s.split("");
for(let i = 0; i < strArr.length; i++){
if(strArr[i] === strArr[i + 1]){
strArr.splice(i, 2, "0", "0")
}
}
let filteredArr = strArr.filter((item) => item !== "0");
return filteredArr.join("");
}
function solution(s){
if(s.length === 0){
return 1
} else if(s === deletePairStr(s)){
return 0;
} else {
return solution(deletePairStr(s));
}
}
function solution(s){
let stack = [];
let splitArr = s.split("");
for(let i = 0; i < splitArr.length; i++){
stack.push(splitArr[i]);
let l = stack.length
if(stack[l - 2] === stack[l - 1]){
stack.pop();
stack.pop();
}
}
if (stack.length === 0) {
return 1;
} else {
return 0;
}
}
👩🏻💻 다른 사람의 코드
// 나처럼 먼저 옮겨 담은 후에 비교한 것이 아니라,
// 비교를 먼저하고 pop과 push의 여부를 결정했다는 점에서 내 코드보다 좀 더 효율적이다.
function solution(s)
{
var stringToArray = s.split('');
var res = [];
for (var val of stringToArray){
if( val === res[res.length -1]){
res.pop()
} else { res.push(val)}
}
return res.length === 0 ? 1 : 0 ;
}
🍯 알게 된 것들
- 자료구조들을 적극적으로 활용하자. (재귀가 무조건 효율적인 것은 결코 아니다.)
- 시간복잡도를 고려하자.
Author And Source
이 문제에 관하여([프로그래머스 레벨투] 짝지어 제거하기 👯♂️🧽), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@9rganizedchaos/프로그래머스-레벨투-짝지어-제거하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)