https://school.programmers.co.kr/learn/courses/30/lessons/181926
function solution(n, control) {
const controller = {
w:1,
s:-1,
d:10,
a:-10
}
return [...control].reduce((acc, cur)=>acc + controller[cur], n);
}
object[key]
를 하면 해당 객체 내 키값을 가져올 수 있다. 그 속성을 이용해 reduce
로 계산했다.
https://school.programmers.co.kr/learn/courses/30/lessons/181925
function solution(numLog) {
const controller = {
"1":"w",
"-1":"s",
"10":"d",
"-10":"a"
}
return numLog.slice(1).reduce((acc, cur, idx)=>acc + controller[`${numLog[idx+1]-numLog[idx]}`],"");
}
controller
의 key
는 numLog[idx] - numLog[idx-1]
이다. 단, 초기값은 컨트롤러에서 제외해야 하기 때문에 배열을 slice
하여 idx 1
부터 계산했다.
reduce
의 numLog[idx+1]
는 cur
와같고, slice
때문에 결과값 배열의 길이가 1
줄었으므로 numLog[idx]
는 원래 배열[idx-1]
과 같다.
https://school.programmers.co.kr/learn/courses/30/lessons/181924
function solution(arr, queries) {
for (const [i, j] of queries) {
const [temp1, temp2] = [arr[i], arr[j]];
arr.splice(i, 1, temp2);
arr.splice(j, 1, temp1);
}
return arr;
}
splice(idx, count, items)
에 인자가 3개 들어가면 배열의 idx
부터 count
개수만큼 items
를 변경한다.
하지만 [arr[i], arr[j]] = [arr[j], arr[i]]
로도 가능한 것을 어렵게 풀이한 느낌이다. 치환이 가능함을 기억하자.
https://school.programmers.co.kr/learn/courses/30/lessons/181923
function solution(arr, queries) {
const answer = [];
for (const [s, e, k] of queries) {
const tmp = arr.filter((v, i)=> s <= i && i <= e && v > k).sort((a,b)=>a-b)[0];
answer.push(tmp ? tmp : -1)
}
return answer;
}
sort
에 조건을 안 넣었더니 계속 실패가 떴다. 생각해 보니, JS
에서 콜백 없는 sort
는 유니코드 값에 따라 정렬되었다. 추가로 오름차순
이 되게끔 콜백을 넣어 정상적으로 풀었다.
https://school.programmers.co.kr/learn/courses/30/lessons/181922
function solution(arr, queries) {
for (const [s, e, k] of queries) {
arr = arr.map((v,i)=> s <= i && i <= e && i % k === 0 ? v + 1 : v);
}
return arr;
}
조건에 맞게끔 변화한 배열을 반환하는 문제라, map
을 통해 arr
에 재할당했다.