반응형
문제:
문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. 
mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.

mode가 0일 때,
code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.

mode가 1일 때,
code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.

 

문제 풀어보기: https://school.programmers.co.kr/learn/courses/30/lessons/181932

 

풀이보기
더보기
function solution(code) {
    let result = [];
    let mode = 0;
    
    [...code].forEach((val, i) => {
        if(val !== '1') {
            if(mode) {
                if(i % 2 !== 0) result.push(val);
            } else {
                if(i % 2 === 0) result.push(val);
            }
        } else {
            mode = !mode;
        }
    })
    
    return result.length ? result.join('') : 'EMPTY';
}

먼저 forEach로 code를 순회한다.

만약 현재 값 val이 1이 아닐 경우에는 mode의 값에 따라 result에 val을 넣어주면 된다.

0이면 false, 0이 아니면 true이므로 이런 성질을 이용해서 mode 값을 비교해줬다.

따라서 mode는 0부터 시작하니 false로 시작하게 되는 것이고 false면 홀수 인덱스, true면 짝수 인덱스 요소를 넣어준다.

만약 val이 1이면 mode를 반전시켜주면 된다.

 

마지막으로 반복문을 통해 처리한 result의 길이를 기준으로 값을 리턴해주면 된다.

result가 비어있지 않으면 문자열로 반환해주고 비어있으면 EMPTY를 반환해주면 된다.

 

반응형

+ Recent posts