오늘은 주말이라서 밀린 과제와 남은 시간에 알고리즘 문제를 풀었다.
100 이하의 숫자의 세 수 중 최솟값을 구하는 문제이다.
또 정렬을 사용하면 안된다고 한다.
function helloWord(a, b, c) {
if (a < b && a < c) {
return a;
} else if (b < c) {
return b;
} else {
return c;
}
}
helloWord(6, 5, 11);
function helloWord(a, b, c) {
let sum;
if (a<b) sum = a;
else sum = b
if(c<sum) sum = c;
return sum;
helloWord(6, 5, 11);
이렇게 한줄을 더 줄일 수 있다.
1. 만약 a가 b보다 작다면 sum은 a이다.
2. 그게 아니라면 sum은 b이다.
3. 만약 c가 sum보다 작다면 sum은 c이다.
삼각형이 만들어 질 수 있는지 구하는 문제이다.
삼각형이 되려면 가장 긴 변의 길이와 나머지 두 변의 합이 가장 긴 변의 길이보다 커야 한다.
function helloWord(a, b, c) {
let answer = "NO";
if (a > b && a > c) {
if (a < b + c) answer = "YES";
} else if (b > a && b > c) {
if (b < a + c) answer = "YES";
} else {
if (c < a + b) answer = "YES";
}
return answer;
}
사람 1명당 연필 한자루를 나누어 줄 떄 필요한 연필의 다스 수를 구하는 문제이다.
function helloWord(num) {
return Math.ceil(num / 12);
}
helloWord(37);
Math.ceil 라는 메소드를 이용하여 num을 나누었을 때 소수점이 나오면 올림하게 하였다.
그래서 37/12을 나누면 리턴 값은 4가 된다.
기초 알고리즘 문제에 자주 보이는 문제이다.
특히 반복문을 사용한 기초 문제이다.
function helloWord(sum) {
let result = 0;
for (let i = 1; i <= sum; i++) {
result += i;
}
return result;
}
function helloWord(a, b, c, d, e, f, g) {
const sum = [a, b, c, d, e, f, g];
let num = sum[0];
for (let i = 0; i < sum.length; i++) {
if (num > sum[i]) num = sum[i];
}
return num;
}
function helloWord(a, b, c, d, e, f, g) {
const sum = [a, b, c, d, e, f, g];
let hot = 0;
let num = Number.MAX_SAFE_INTEGER;
for (let i = 0; i < sum.length; i++) {
if (sum[i] % 2 !== 0) {
hot += sum[i];
if (num > sum[i]) num = sum[i];
}
}
console.log(hot, num);
}
위에 문제에서의 응용문제이다.
거기서 홀수값을 구해놓고 최솟값을 구하면 되는 것이다.
1. 이번에는 num에 Number.MAX_SAFE_INTEGER 메소드를 사용하였다.
이 메소드는 자바스크립트에서 안전한 숫자 중에서 제일 큰 값을 구해주는 메소드이다.
2. 똑같이 sum에 배열을 만들어서 대입값들을 할당 시킨다.
3. 그리고 hot에는 0을 할당한다.
4. 그리고 반복문을 이용하여 sum의 길이만큼 돌린다.
5. 만약 sum[i] % 2 !== 0 이 아니면
6. hot는 hot + sum[i]를 한다.
7. 5번에서 2를 나눠서 나머지가 0이 아니면 홀수 이다.
8. 그 다음 if문은 위에 문제랑 비슷하기 때문에 생략하겠다.