logo

숫자 문자열과 영단어(LV1)

function solution(s) {
    const obj = {'zero':0, 'one':1, 'two':2, 'three':3, 'four':4, 'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9}
    let stringNum = ''
    let answer = ''
    for(let i=0; i<s.length; i++){
        let temp = +s[i]
        if(isNaN(temp)){
            stringNum += s[i]
              if(obj[stringNum] || obj[stringNum] === 0){ // 반례 'one0zero0' 0은 falsy한 값이기 때문에 값을 정확하게 써줘야 한다. 
            answer += obj[stringNum]
            stringNum = ''
            }   
        } else {
            answer += s[i]
        }
        
    }
    return +answer
}
읽는 시간 1분

조합(Combinations)

function getCombinations(arr, selectNumber) {
    const results = [];
    
    if (selectNumber === 1) {
        return arr.map((value) => [value]); // 하나씩 반환
    }

    arr.forEach((fixed, index, array) => {
        const rest = array.slice(index + 1); // 현재 요소 이후의 배열
        const combinations = getCombinations(rest, selectNumber - 1); // 재귀 호출
        const attached = combinations.map((combination) => [fixed, ...combination]); // 현재 요소와 조합을 붙임
        results.push(...attached);
    });

    return results;
}
읽는 시간 1분

올바른 괄호 (LV2)

가고 싶은 회사 라이브 코딩테스트에서 이 문제가 그대로 나왔다.

3년 전, 신입 준비 할 때 코딩테스트 준비 하면서 분명히 풀어봤던 문젠데… 오래 되어서 기억이 나질 않았다.

중간에 못푼게, 너무 아쉬웠다. 그래서 복기를 해보는 중이다.

function solution(s) {
    let stack = [];
    let obj = { '(': ')', '{':'}', '[':']' };
    
    for (let i = 0; i < s.length; i++) {
        if (Object.keys(obj).includes(s[i])) { 
            stack.push(s[i]); // 좌측의 괄호만 stack에 넣는다.
        } else {
            let last = stack.pop(); // stack 배열의 가장 마지막을 빼서
            if (s[i] !== obj[last]) { // 올바른 괄호에 맞춰보고, 아니면 false
                return false;
            }
        }
    }
    if (stack.length !== 0) { // stack에 어떤 값이 남아 있다면, 괄호가 모두 닫히지 않았다는 의미가 된다. 고로, false
        return false;
    } else {
        return true; // stack이 모두 제거가 되었다는 뜻은, 괄호가 모두 올바르게 닫혔다는 의미, 고로 true
    }
}
읽는 시간 1분