출처 : 자바스크립트 알고리즘 문제풀이(코딩테스트 대비) - 김태원 인프런
function solution(a, b, c) {
let answer;
//나의 풀이
if (a < b && a < c) {
answer = a;
} else if (b < a && b < c) {
answer = b;
} else if (c < a && c < b) {
answer = c;
}
// 선생님 풀이
if (a < b) answer = a;
else answer = b;
if (c < answer) answer = c;
return answer;
}
console.log(solution(2, 5, 1));
세 인자 값으로 삼각형을 만들 수 있는 지 판별하기
삼각형이 되는 조건 : 가장 큰 값 < 나머 주 값의 합
function solution(a, b, c) {
// 나의 풀이
let answer, max;
const total = a + b + c;
if (a > b) max = a;
else max = b;
if (c > max) max = c;
if (max < total - max) answer = "YES";
else answer = "NO";
// 선생님 풀이
let answer = "YES",
max;
let sum = a + b + c;
if (a > b) max = a;
else max = b;
if (c > max) max = c;
if (sum - max <= max) answer = "NO";
return answer;
}
console.log(solution(6, 7, 11));
console.log(solution(13, 33, 17));
let 에 미리 YES라는 값을 부여하고 조건에 부합하지 않을 경우 'NO'를 주어 코드를 더 간단하게 만들었다.
function solution(n) {
let answer;
answer = Math.ceil(n / 12);
return answer;
}
console.log(solution(25));
console.log(solution(178));
인자값을 받으면 1부터 그 값까지의 합을 출력하기
for loop를 활용하기
function solution(n) {
//나의 풀이
let answer = (n * (n + 1)) / 2;
//선생님 풀이
let answer = 0;
for(let i =1; i <=n; i++){
answer += 1;
}
return answer;
}
console.log(solution(10));
console.log(solution(6));
여러 숫자들 중 최솟값을 리턴하기
function solution(arr) {
//나의 풀이
let answer = Math.min(...arr);
//선생님 풀이
let answer,
min = Number.MAX_SAFE_INTEGER; //arr[0]
for (let i = 0; i < arr.length; i++) {
if (arr[i] < min) min = arr[i];
}
answer = min;
return answer;
}
console.log(solution([5, 3, 7, 11, 2, 15, 17]));
추가! ) let answer = Math.min.apply(null, arr); null 꼭 적어줘야함. this 에다가 control 할 수 있는 객체를 넘겨줌
배열 내의 숫자들 중 홀수값들만의 합과 홀수값들 중 최솟값을 구하라
function solution(arr) {
//나의 풀이
let answer = [];
let odds = arr.filter((num) => num % 2 === 1);
let sumOdds = odds.reduce((acc, cur) => (acc += cur), 0);
let minOdd = Math.min(...odds);
answer.push(sumOdds, minOdd);
//선생님 풀이
let answer = [];
let sum = 0,
min = Number.MAX_SAFE_INTEGER;
for (let x of arr) {
if (x % 2 === 1) {
sum += x;
if (x < min) min = x;
}
}
answer.push(sum);
answer.push(min);
return answer;
}
arr = [12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));
배열 숫자내의 일의 자리 수와 인자 첫번째 값과 일치하는 숫자들의 갯수를 구하라
function solution(day, arr) {
// 나의 풀이
let answer = arr.filter((num) => num % 10 === day).length;
// 선생님 풀이
let answer = 0;
for (let x of arr) {
if (x % 10 === day) answer++;
}
return answer;
}
arr = [25, 23, 11, 47, 53, 17, 33];
console.log(solution(3, arr));
console.log(solution(0, [12, 20, 54, 30, 87, 91, 30]));
9개의 숫자들 중 7개의 합이 100이어야 한다. 100이 되지 못하는 두 숫자를 제외한 배열을 return 하라
function solution(arr) {
// 나의 풀이
let answer = [];
let gap = arr.reduce((acc, cur) => (acc += cur), 0) - 100;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (arr[i] + arr[j] === gap && i > j) {
answer.push(arr[i], arr[j]);
}
}
}
// 선생님 풀이
let answer = arr;
let sum = arr.reduce((a, b) => a + b, 0);
for (let i = 0; i < 8; i++) {
for (let j = i + 1; j < 9; j++) {
if (sum - (arr[i] + arr[j]) === 100) {
arr.splice(j, 1);
arr.splice(i, 1);
}
}
}
return answer;
}
let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
console.log(solution(arr));
유의 사항) 만약 i부터 splice를 해버리면 index가 앞으로 당겨져서 25가 아닌 그 뒤 8이 지워져버린다.
그렇기에 더 뒤 index인 j 부터 splice 해주어야 한다.
splice는 두번째 인자값으로 삭제하고 싶은 item의 갯수를 받는다. 적어주지 않으면 첫번째 인자값부터 다 삭제되니 유의할 것!