[연습문제] 지난 시험 복습 문제 2
지난 시험 복습 문제 2 (211018)
네카라쿠배 온라인 1기를 수강하며 코딩테스트 시험 봤던 문제들을 다시 풀어보자.
게임판
function solution(h, w) {
const dx = [0, 1]; //오른쪽, 아래
const dy = [1, 0];
let cnt = 0;
const dfs = (x, y) => {
console.log(x,y)
if (x == h-1 && y == w-1) {
++cnt;
return;
}
for (let i = 0; i < 2; i++) {
let nx = x + dx[i];
let ny = y + dy[i];
if (nx < h && ny < w) {
dfs(nx, ny);
}
}
};
dfs(0, 0);
return cnt;
}
console.log(solution(3,3));
많이 들어온 숫자 순서대로 정렬
function solution(s) {
const hash = [...s].reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {});
const exist = Object.entries(hash)
.sort((x, y) => (x[1] > y[1] ? -1 : x[1] < y[1] ? 1 : 0))
.map(v => +v[0]);
return [...exist, ...Array.from(Array(10), (_, i) => i).filter(v => !exist.includes(v))].join(' ');
}
console.log(solution('221123')); // 2 1 3 0 4 5 6 7 8 9
console.log(solution('1235670089006427894100')); // 2 1 3 0 4 5 6 7 8 9
피라미드
function solution(arr) {
for (let i = 1; i < arr.length; i++) {
arr[i][0] += arr[i - 1][0];
arr[i][i] += arr[i - 1][i - 1];
}
for (let i = 2; i < arr.length; i++) {
for (let j = 1; j < arr[i].length - 1; j++) {
arr[i][j] += Math.max(arr[i - 1][j - 1], arr[i - 1][j]);
}
}
return Math.max(...arr[arr.length - 1]);
}
console.log(solution([[3], [5, 10], [4, 6, 8]]));