문제(출처: 프로그래머스)

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

▶ 내가 푼 방식

function solution(my_string) {
    const reg = /\d+/g
    const numberArray = my_string.match(reg);
    
    return numberArray === null ? 0 :numberArray.reduce((sum,number) => sum + parseInt(number), 0);
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(my_string) {
  return my_string.split(/\D+/).reduce((acc, cur) => acc + Number(cur), 0);
}


// 유저 2
function solution(my_string) {
    return my_string.toLowerCase().replace(/[a-z]/g, " ").split(" ").map((v) => v*1).reduce((a,b) => a+b)
}

 

문제(출처: 프로그래머스)

한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.

 

▶ 내가 푼 방식

function solution(polynomial) {
    const xVariable = polynomial.match(/\b\d*x\b/g);
    const numbers = polynomial.match(/\b\d+\b/g);
    
    const numberSum = numbers === null? null: numbers.reduce((sum, number) => {
        return sum + parseInt(number) }, 0)
    
    const Coefficient = xVariable === null? null: xVariable.reduce((sum, variable) => {
        const number = variable === 'x'? 1: parseInt(variable);
        return sum + number
    },0)
    
    const xSum = (Coefficient === 1 && Coefficient !==null) ? 'x' : `${Coefficient}x`
    
    if (numberSum && Coefficient){
        return `${xSum} + ${numberSum}`
    }
    if (numberSum && Coefficient === null){
        return `${numberSum}`
    }
    if (numberSum == null && Coefficient){
        return `${xSum}`
    }
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(polynomial) {
    const arr = polynomial.split(" + ");
    const xNum = arr
                .filter(n => n.includes("x"))
                .map(n => n.replace('x', '') || '1')
                .reduce((acc, cur) => acc + parseInt(cur, 10), 0);
    const num = arr
                .filter(n => !isNaN(n))
                .reduce((acc, cur) => acc + parseInt(cur, 10), 0);

    let answer = [];
    if(xNum) answer.push(`${xNum === 1 ? "" : xNum}x`);
    if(num) answer.push(num);

    return answer.join(" + ");
}

 

 배운 것들

     - "숫자x" 형태를 모두 찾아 배열로 반환

const allX = str.match(/\b\d+x\b/g)
/**
\b는 단어 경계 -> 이를 통해 "x" 앞에 오는 숫자들만 선택
\d+는 하나 이상의 숫자를 나타냄
x는 리터럴 문자 'x'를 의미
\b는 닫는 단어 경계를 나타냅니다.
g는 전역 검색을 의미, 문자열 전체에서 해당패턴을 검색
**/

     -  " 숫자" 만 모두 찾아 배열로 반환

const number = str.match(/\b\d+\b/g)
  • 숫자만을 찾아내며, 숫자가 독립적인 단어로 취급 (숫자 앞뒤에 문자가 없어야 찾아냄).

문제(출처: 프로그래머스)

머쓱이는 RPG게임을 하고 있습니다. 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다. 예를 들어 [0,0]에서 up을 누른다면 캐릭터의 좌표는 [0, 1], down을 누른다면 [0, -1], left를 누른다면 [-1, 0], right를 누른다면 [1, 0]입니다. 머쓱이가 입력한 방향키의 배열 keyinput와 맵의 크기 board이 매개변수로 주어집니다. 캐릭터는 항상 [0,0]에서 시작할 때 키 입력이 모두 끝난 뒤에 캐릭터의 좌표 [x, y]를 return하도록 solution 함수를 완성해주세요.
- [0, 0]은 board의 정 중앙에 위치합니다. 예를 들어 board의 가로 크기가 9라면 캐릭터는 왼쪽으로 최대 [-4, 0]까지 오른쪽으로 최대 [4, 0]까지 이동할 수 있습니다.

 

▶ 내가 푼 방식

function solution(keyinput, board) {
    var answer = [];
    const controlXY = {"down": ["y", -1] , "up": ["y", 1], "left": ["x", -1], "right": ["x",1] }
    const maxX = (board[0] - 1) / 2;
    const maxY = (board[1] - 1) / 2;
    let x = 0
    let y = 0
    for (let i of keyinput){
        let [coordinate, value] = controlXY[i];
        if (coordinate == "x"){
            x += value
            if (x > maxX) {x = maxX}
            if (x < -maxX) {x = -maxX}
        }
        else{
            y += value
            if (y > maxY) {y = maxY}
            if (y < -maxY) {y = -maxY}
        }
    }
    return [x, y]
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(keyinput, board) {
    let res = [0,0];
    for (let p of keyinput) {
        switch(p){
            case 'left': if (-res[0] < board[0]/2-1) res[0]--; break;
            case 'right': if (res[0] < board[0]/2-1) res[0]++; break;
            case 'up': if (res[1] < board[1]/2-1) res[1]++; break;
            case 'down': if (-res[1] < board[1]/2-1) res[1]--; break;
        }
    }
    return res;
}

// 유저 2
const CONTROL = {
    up: [0, 1],
    down: [0, -1],
    left: [-1, 0],
    right: [1, 0],
}

function solution(key, [n, m]) {
    const [x1, x2] = [-(n-1)/2, (n-1)/2];
    const [y1, y2] = [-(m-1)/2, (m-1)/2];
    return key.reduce(([x, y], k) => {
        const [nx, ny] = [x + CONTROL[k][0], y + CONTROL[k][1]];
        if (x1 <= nx && nx <= x2 && y1 <= ny && ny <= y2) return [nx, ny];
        return [x, y];
    }, [0, 0]);
}


// 유저 3

 

 배운 것들

     -  배운것 : Array.reduce 에서 accumulator 를 배열로도 가능하다. 함수 안에서 더하기만 하는 것이 아니라 원하는 기능을 구현 할 수도 있다.

     -  복습 : Array.reduce

array.recude((accumulator, currentVale) => {
    accumulator + currentValue
  },
  initialValue
);

     - 

문제(출처: 프로그래머스)

머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array 가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.

 

▶ 내가 푼 방식

function solution(array) {
    var answer = array.join('');
    const match = answer.match(/7/g)
    return match? match.length : 0
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(array) {
    return(array.join().split("").filter((el)=>{return el=="7"}).length)
}

// 유저 2


// 유저 3

 

 배운 것들

     - 문장에 특정 문자가 몇개가 있는 가를 알고 싶을 때 사용 하는 방식이 text.match(/7/g)

     - 

+ Recent posts