Software Engineering/Algorithm Test
Day5_코딩 기초 트레이닝_프로그래머스
Nomad Kim
2023. 7. 16. 10:24
코드 처리하기
description: https://school.programmers.co.kr/learn/courses/30/lessons/181932
My answer was
function solution(code) {
let answer = '';
let mode = 0;
for(let idx = 0; idx < code.length; idx++) {
const firstCondition = !mode && (idx % 2 === 0)
const secondCondition = mode && (idx % 2 === 1)
if(code[idx] !== '1' && (firstCondition || secondCondition)) answer += code[idx];
mode = code[idx] === '1' ? mode ? 0 : 1 : mode
}
return answer || "EMPTY";
}
Best answer was
function solution(code) {
let answer = '';
let mode = 0;
for (let i = 0; i < code.length; i += 1) {
if (Number(code[i]) === 1) {
mode = mode === 1 ? 0 : 1;
}
if (Number(code[i]) !== 1 && i % 2 === mode) {
answer += code[i];
}
}
return answer.length > 0 ? answer : 'EMPTY';
}
주사위 게임
My answer was
// Solution1
function solution(a, b, c) {
const allDifferent = a !== b && b !== c && a !== c;
const oneDifferent = (a === b && b !== c) || (b === c && a !== b) || (a === c && a !== b);
const allIdentical = a === b && b === c;
const total = a + b + c;
const multipleTotal = Math.pow(a, 2) + Math.pow(b, 2) + Math.pow(c, 2);
const tripleTotal = Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3);
return allDifferent ? total : oneDifferent ? total * multipleTotal : total * multipleTotal * tripleTotal;
}
// Solution2
function solution(a, b, c) {
const sum1 = a + b + c;
const sum2 = a * a + b * b + c * c
const sum3 = a ** 3 + b ** 3 + c ** 3
if(a === b && b === c) return sum1 * sum2 * sum3;
else if((a === b)||(b === c)||(a === c)) return sum1 * sum2;
else return sum1;
Best answer was
const solution = (a, b, c) => {
const set = new Set([a, b, c]);
switch ([...set].length) {
case 1: return calculate([a, b, c], 3);
case 2: return calculate([a, b, c], 2);
case 3: return calculate([a, b, c]);
}
};
const calculate = (inc, n=1) => {
const [a, b, c] = inc;
let result = 1;
for (let i = 1; i <= n; i++) {
result *= Math.pow(a, i) + Math.pow(b, i) + Math.pow(c, i)
}
return result;
};
const set = new Set([a, b, c]) 을 사용하여 중복된 인자의 개수를 파악한 점이 좋다.
calculate 대신, sum1, sum2, sum3 를 그냥 리턴하는 것이 좋겠다.
원소들의 곱과 합
My answer was
function solution(num_list) {
const multiplied = num_list.reduce((acc, cur) => acc * cur, 1);
const squaredSummed = num_list.reduce((acc, cur) => acc + cur, 0) ** 2
return +(multiplied < squaredSummed)
}
Best answer was
function solution(num_list) {
let accMul = 1
let accSum = 0
for (const num of num_list) {
accMul *= num
accSum += num
}
return accMul < accSum ** 2 ? 1 : 0
}
for 구문을 한번만 돌려서 시간 복잡도를 낮춘 것이 훌륭하다.
이어 붙인 수
My answer was
function solution(num_list) {
let odd = ''
let even = ''
for(const n of num_list) {
if(n % 2 === 0) even += n
else odd += n
}
return Number(odd) + Number(even)
}
Best answer was
새롭다.