본문 바로가기
프로그래머스 코딩 테스트

프로그래머스 : JavaScript 알고리즘 100일 챌린지 31일차

by dongjin6539 2023. 6. 15.
728x90
반응형

프로그래머스 : JavaScript 알고리즘 100일 챌린지 31일차

 

코딩 기초 트레이닝 Day31

 

 

1. 마지막 두 원소 : 정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.

function solution(num_list) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
num_list result
[2, 1, 6] [2, 1, 6, 5]
[5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10]

 

답 확인하기
function solution(num_list) {
    const secondLast = num_list[num_list.length - 2];
    const last = num_list[num_list.length - 1];
    
    if (secondLast >= last) {
        return [...num_list, last * 2];
    } else {
        return [...num_list, last - secondLast];
    }
}

 

2. 수 조작하기1 : 정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

  • "w" : n이 1 커집니다.
  • "s" : n이 1 작아집니다.
  • "d" : n이 10 커집니다.
  • "a" : n이 10 작아집니다.

위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.

function solution(n, control) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
n control result
0 "wsdawsdassw" -1

 

답 확인하기
function solution(n, control) {
    return [...control].reduce((acc, cur) => {
        switch(cur) {
            case 'w':
                return acc+1
            case 's':
                return acc-1
            case 'd':
                return acc+10
            case 'a':
                return acc-10
            default:
                return acc
        }
    }, n)
}

 

3. 수 조작하기2 : 정수 배열 numLog가 주어집니다. 처음에numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.

  • "w" : 수에 1을 더한다.
  • "s" : 수에 1을 뺀다.
  • "d" : 수에 10을 더한다.
  • "a" : 수에 10을 뺀다.

그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이numLog입니다. 즉,numLog[i]numLog[0]로부터 총i번의 조작을 가한 결과가 저장되어 있습니다. 주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.

function solution(numLog) {
    var answer = '';
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
log result
[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1] "wsdawsdassw"

 

답 확인하기
function solution(numLog) {
    return numLog.reduce((acc, cur, curIdx, originArr) => {
        if(!curIdx) return ""
        const prev = originArr[curIdx-1]
        switch(prev-cur) {
            case -1:
                return acc+'w'
            case 1:
                return acc+'s'
            case -10:
                return acc+'d'
            case 10:
                return acc+'a'
        }
    }, "")
}

 

4. 수열과 구간 쿼리3 : 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다. 각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다. 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

function solution(arr, queries) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
arr queries result
[0, 1, 2, 3, 4] [[0, 3], [1, 2], [1, 4]] [3, 4, 1, 0, 2]

 

답 확인하기
function solution(arr, queries) {
    return queries.reduce((acc, cur, idx, origin) => {
        const copyAcc = [...acc]
        const [to, from] = cur
        const box = acc[to]
        copyAcc[to] = copyAcc[from]
        copyAcc[from] = box
        return copyAcc
    }, [...arr])
}

 

5. 수열과 구간 쿼리2 : 정정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.  query마다 순서대로 s  i  e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다. 각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

function solution(arr, queries) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
arr queries result
[0, 1, 2, 4, 3] [[0, 4, 2], [0, 3, 2], [0, 2, 2]] [3, 4, -1]

 

답 확인하기
function solution(arr, queries) {
    return queries.reduce((acc, cur) => {
        const [to, from, val] = cur
        const range = arr.slice(to, from+1)
        const biggerThan = range.filter(a => a > val)
        if(!biggerThan.length) return [...acc, -1]
        return [...acc, Math.min(...biggerThan)]
    }, [])
}
728x90
반응형