티스토리 뷰

제한시간 60분

 

문제1

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.

예를 들어, 문자열 S = baabaa 라면

b aa baa → bb aa → aa 

의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.

 

 

풀이

function solution(s) {
    var answer = 0;
    s = s.split('');

    for(let i = 1; i < s.length; i++) {
        if(s[i] == s[i-1]) {
            s.splice(i-1, 2);
            i = 0;
        }
    }

    if(s.length == 0) answer = 1;
    return answer;
}

1. splice를 쓰기위해 split()을 이용해 문자열을 배열로 만들어줌

2. for문을 돌면서 이전 값과 현재값을 비교해 같으면 두 값을 배열에서 제거해주고, i를 0으로 바꿔줌(다시 처음부터 for문을 돌게끔)

3. for문을 반복하면서 s.length가 0이 되면, 즉 배열에 비게 되면 answer = 1로 업데이트

4. answer 반환

 

결과

정확성 30.0/30.0

효율성 0/20.0

 

아무래도 for문을 계속 돌면서 효율성이 많이 떨어지는 것 같은데, 어떻게 개선해야할지 더 고민해봐야겠다🤔

 

 

수정된 풀이(조과장님의 도움💁🏻‍♀️)

function solution(s){   
    const stack = [];
    
    for(let i = 0; i < s.length; i++) {
        const target = stack.pop();

        if(!target) {
            stack.push(s[i]);
            continue;
        }
        
        if(target != s[i]) {
            stack.push(target, s[i]);
            continue;
        }
    }
    
    return stack.length == 0 ? 1 : 0;
}

답은 스택에 있었넴!

stack 배열을 만들고, 타겟값과 비교를 통해 넣었다 뺐다! 

최종적으로 stack 배열에 값이 남아있으면 0을, 없으면 1을 반환하도록

 

 

다른사람의 풀이

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 ;
}

이사람도 스택을 이용함.

res 배열을 만들어서 제일 마지막 값이 현재 값이랑 같으면, res에서 마지막 값을 빼주고, 그렇지 않으면 값을 넣어줌!

 

 

문제2

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

 

풀이

function solution(s) {
    var answer = '';
    let splited = s.toLowerCase().split(" ");
    for(let i = 0; i < splited.length; i++) {
        splited[i] = splited[i].charAt(0).toUpperCase() + splited[i].slice(1);
    }
    answer = splited.join(" ");
    return answer;
}

1. 문자열을 전부 소문자로 변환해준 뒤, split()을 이용하여 공백을 기준으로 분리함

2. for문을 돌면서 charAt(0)을 이용해 첫번째 알파벳만 toUpperCase()로 처리한 뒤, 나머지 단어들과 합쳐줌

3. 배열화 했던 문자열을 다시 join()으로 합치고 answer에 넣어줌

4. answer 반환

 

결과

정확성 50.0/50.0

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함