문제 설명
7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 고른 홀수들 중 최솟값을 찾기.
예를 들어, 7개의 자연수 12, 77, 38, 41, 53, 92, 85 가 주어지면
홀수는 77, 41, 53, 85 이므로
합은 77+41+53+85 = 256 이다.
각 홀수마다 크기의 순서는
41 < 53 < 77 < 85 이므로 41이 최솟값이다.
따라서 256과 41이 출력 되어야 한다.
입출력 예
input | output |
---|---|
[12, 77, 38, 41, 53, 92, 85] | [256,41] |
풀이
const smallestOdd = (arr) => {
let oddArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 !== 0) {
oddArr.push(arr[i]);
}
}
// 홀수 총합
const sumOdd = oddArr.reduce((a, b) => a + b, 0);
console.log(sumOdd);
// 가장 작은 홀수
const minOdd = Math.min(...oddArr);
console.log(minOdd);
return `홀수의 합:${sumOdd}, 가장 작은 홀수:${minOdd}`;
};
✍️
console.log(oddArr);
console.log(...oddArr);
Math.min()
함수는 주어진 숫자들 중 가장 작은 값을 반환한다. 주어진 숫자들 중 가장 작은 값. 만약 적어도 1개 이상의 인자값이 숫자형으로 변환이 불가능 한 경우 이 함수는 NaN 를 반환 한다.❓ 처음엔 주어진 배열의 안을 살펴보면 전부 멀쩡한 숫자인데 왜 NaN이 떴을까 🤔 생각했는데 당연하게도 콘솔창에 찍어본 것을 보면 oddArr만 넣을 경우 배열을 바라보기 때문에 NaN가 뜬 것이라고 이해했다.
function add(a,b,c){
return a+b+c
}
const nums = [1,2,3]
console.log(add(nums)) // 1,2,3 undefined undefined
console.log(add(...nums)) // 6
→ MDN_Math.min() 예제 살펴보기 ▼
console.log(Math.min(2, 3, 1));
// expected output: 1
console.log(Math.min(-2, -3, -1));
// expected output: -3
const array1 = [2, 3, 1];
console.log(Math.min(...array1));
// expected output: 1
solution
function solution(arr) {
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;
}
console.log(solution(arr)); // [256, 41]
✍️
for...of
를 이용해서 홀수를 찾아내고, 그 후 x에 담은 모든 홀수의 합과 가장 작은 홀수를 찾아낸다.Number.MAX_SAFE_INTEGER
: 상수Number.MAX_SAFE_INTEGER
는 JavaScript에서 안전한 최대 정수값을 나타낸다. -MDN문제 설명
한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내기.
문자열의 길이는 100을 넘지 않는다.
입력설명: 첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다.
출력설명: 첫 줄에 해당 문자의 개수를 출력한다.
입출력 예
input | output |
---|---|
COMPUTERPROGRAMMING, R | 3 |
풀이
const chcrInStr = (str, char) => {
let charArray = [];
for (let x of str) {
if (x === char) {
charArray.push(x);
}
}
console.log(charArray);
return charArray.length;
};
const str = 'COMPUTERPROGRAMMING';
const char = 'R';
console.log(chcrInStr(str, char));
✍️
for...of
문을 사용해서 속성값을 x에 할당 한 뒤, if
문을 통해서 char을 찾는다.solution
1) for...of
function solution1(s, t) {
let answer = 0;
for (let x of s) {
if (x === t) answer++;
}
return answer;
}
let str1 = 'COMPUTERPROGRAMMING';
console.log('solution1 :', solution1(str1, 'R'));
✍️ answer 을 선언, 초기화하고 마찬가지로 for..of
문과 if
문을 통해서 s 안의 특정 문자 t 를 찾은 뒤 answer 값을 ++ 해준다.
2) 내장함수 split 사용
function solution2(s, t) {
let answer = s.split(t).length - 1;
return answer;
}
let str2 = 'COMPUTERPROGRAMMING';
console.log('solution2 :', solution2(str2, 'R'));
✍️
split
을 사용한다. 구분자로 들어온 문자 t 를 넣는다. let str2 = 'COMPUTERPROGRAMMINGR';
reference)
자바스크립트 알고리즘 문제풀이