코테

코드 처리하기

콩쥐땃쥐 2025. 1. 8. 01:56

 

1차시도

function solution(code) {
    let a = '';
    let mode = 0;
    for (let i = 0; i<code.length; i++){
        if (code[i] === '1' && mode === 1){
            mode = 0
        }
        else if (code[i] === '1' && mode === 0){
            mode = 1
        }
        else if(mode === 0 && i % 2 === 0){
            a += code[i];
        } 
        else if (mode === 1 && i % 2 === 1){
            a += code[i];
        }
    }
    return a;
}

마지막에 오답이 발견돼서 질문에 가보니 EMPTY 예외처리를 해주지 않아서 발생한 문제였다. 

 

2차시도

function solution(code) {
    let a = '';
    let mode = 0;
    for (let i = 0; i<code.length; i++){
        if (code[i] === '1' && mode === 1){
            mode = 0
        }
        else if (code[i] === '1' && mode === 0){
            mode = 1
        }
        else if(mode === 0 && i % 2 === 0){
            a += code[i];
        } 
        else if (mode === 1 && i % 2 === 1){
            a += code[i];
        }
    }
    return a === '' ? 'EMPTY' : a ;
}

이렇게 수정해주니 통과는 했지만 아래처럼 시간이 너무 길어진다는 문제가 생겼다. else가 많아서 생긴 문제일까

 

3차시도

function solution(code) {
    let a = '';
    let mode = 0;
    for (let i = 0; i<code.length; i++){
        if(mode === 0 && (i % 2 === 0 || code[i] === "1")){
            code[i] === "1" ? mode = 1 : a += code[i];
        } 
        else if (mode === 1 && i % 2 === 1 || code[i] === "1"){
            code[i] === "1" ? mode = 0 : a += code[i];
        }
    }
    return a === '' ? 'EMPTY' : a ;
}

더 느려졌다...

 

4차시도?

function solution(code) {
    let a = '';
    let mode = 0;
    for (let i = 0; i<code.length; i++){
        if(mode === 0 && (i % 2 === 0 || code[i] === "1")){
            code[i] === "1" ? mode = 1 : a += code[i];
        } 
        else if (mode === 1 && i % 2 === 1 || code[i] === "1"){
            code[i] === "1" ? mode = 0 : a += code[i];
        }
    }
    return a === '' ? 'EMPTY' : a ;
}

마찬가지로 첫 번째보다는 더 느려졌다

 

다른 사람의 풀이는 간단한 게 있었는데

function solution(code) {
    let answer = '';
    let mode = 0;

    for (let i = 0; i < code.length; i += 1) {
      if (Number(code[i]) === 1) {
        mode = mode === 1 ? 0 : 1;
      }
      if (Number(code[i]) !== 1 && i % 2 === mode) {
        answer += code[i];
      }
    }
    return answer.length > 0 ? answer : 'EMPTY';
}

 엄청 간결하고... 깔끔하다 창의성이 있어야하나?