프로그래머스 : JavaScript 알고리즘 100일 챌린지 31일차
- 프로그래머스 : https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc
- 유트브 참고 : https://www.youtube.com/watch?v=RMmOU2u-_as&list=PLkfUwwo13dlWZxOdbvMhkzhAowaiEjuGS
코딩 기초 트레이닝 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)]
}, [])
}