Post

JS 알고리즘 입문 40문제

JS 알고리즘 입문 40문제

1. 두 수의 나눗셈

1
2
3
function solution(num1, num2) {
    return parseInt(num1 / num2 * 1000);
}

2. 짝수 홀수 개수

1
2
3
4
5
6
7
8
9
10
11
function solution(num_list) {
    var answer = [0,0];
    for(let num of num_list) {
        if(num % 2 == 0) {
            answer[0]++
        } else {
            answer[1]++
        }
    }
    return answer;
}

3. 두수의 합

1
2
3
function solution(num1, num2) {
    return num1+num2;
}

4. 문자열 뒤집기

1
2
3
function solution(my_string) {
    return my_string.split("").reverse().join("");
}

5. 점의 위치 구하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function solution(dot) {
    var answer = 0;
    const [x, y] = dot;
    
    if(x > 0 && y > 0) {
        return 1;
    } else if ( x < 0 && y > 0) {
        return 2;
    } else if (x < 0 && y < 0) {
        return 3;
    } else {
        return 4;
    }
}

6. 아이스 아메리카노

1
2
3
4
function solution(money) {
    const coffePrice = 5500;
    return [parseInt(money/coffePrice), money % coffePrice];
}

7. 삼각형의 완성조건(1)

1
2
3
4
5
6
7
function solution(sides) {
    var answer = 0;
    sides.sort((a,b) => a-b);
    
    if(sides[0] + sides[1] > sides[2]) return 1
    return 2;
}

8. n의 배수 고르기

1
2
3
4
5
6
7
function solution(n, numlist) {
    var answer = [];
    for(let num of numlist) {
        if(num % n == 0) answer.push(num);
    }
    return answer;
}

9. 배열의 유사도

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(s1, s2) {
    var answer = 0;
    
    for(let i = 0 ; i < s1.length ; i++) {
        for(let j = 0 ; j < s2.length ; j++) {
            
            if(s1[i] == s2[j]) {
                answer++;
            }
        }
    }
    return answer;
}

10. 머쓱이보다 키 큰 사람

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function solution(array, height) {
    array.sort((a,b) => a-b);
    
    for(let i = 0 ; i < array.length ; i++) {
        if(array[i] > height) return array.length - i;
    }
    
    return 0;
}

// 다른 사람 풀이 (filter 사용 !)
function solution(array, height) {
    var answer = array.filter(item => item > height);
    return answer.length;
}

11. 피자 나눠먹기 (1)

1
2
3
function solution(n) {
    return Math.ceil(n / 7);
}

12. 자릿수 더하기

1
2
3
function solution(n) {
    return n.toString().split("").map(Number).reduce((a,b) => a+b);
}

13. 모음 제거

1
2
3
4
5
6
7
8
9
10
11
12
function solution(my_string) {
    var answer = '';
    const alphabet = ["a", "e", "i", "o", "u"];
    
    answer = my_string.split("").filter((value) => !alphabet.includes(value)).join("")
    return answer;
}

// 다른 사람 풀이 (정규표현식)
function solution(my_string) {
    return my_string.replace(/[aeiou]/g, '');
}

14. 배열 원소의 길이

1
2
3
4
5
6
7
8
9
10
11
function solution(strlist) {
    var answer = [];
    for(let i of strlist) {
        answer.push(i.length);
    }
    return answer;
}
// 다른 사람 풀이 (map은 return값 존재)
function solution(strlist) {
    return strlist.map((el) => el.length)
}

15. 중복된 숫자의 개수

1
2
3
function solution(array, n) {
    return array.filter((el) => el == n).length;
}

16. 배열 두 배 만들기

1
2
3
function solution(numbers) {
    return numbers.map((el) => el * 2);
}

17. 중앙값 구하기

1
2
3
function solution(array) {
    return array.sort((a,b) => a - b)[parseInt(array.length / 2)];
}

18. 짝수는 싫어요

1
2
3
4
5
6
7
function solution(n) {
    var answer = [];
    for(let i = 1 ; i <= n ; i+=2) {
        answer.push(i)
    }
    return answer;
}

19. 옷가게 할인 받기

1
2
3
4
5
6
7
function solution(price) {
    if(price >= 500000) return parseInt(price * 0.8);
    if(price >= 300000) return parseInt(price * 0.9);
    if(price >= 100000) return parseInt(price * 0.95);
    
    return price;
}

20. 직삼각형 출력하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
}).on('close', function () {
    n = Number(input[0]);
    
    for(let i = 1 ; i < n+1 ; i++) {
        console.log("*".repeat(i))
    }
});

21. 개미군단

1
2
3
4
5
6
7
8
9
function solution(hp) {
    var answer = 0;
    answer += parseInt(hp / 5);
    hp = hp % 5;
    answer += parseInt(hp / 3);
    hp = hp % 3;
    answer += hp;
    return answer;
}

22. 가위 바위 보

1
2
3
4
function solution(rsp) {
    const winner = {"2" : "0", "0" : "5", "5":"2"};
    return rsp.split("").map((el) => winner[el]).join("");
}

23. 숨어있는 숫자의 덧셈 (1)

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(my_string) {
    var answer = 0;
    for(let str of my_string.split("")) {
        let number = Number(str);
        if(number > 0) answer += number;
    }
    return answer;
}

// 다른 사람 풀이
function solution(my_string) {
    return [...my_string].reduce((acc,cur)=> Number(cur) ? +acc + +cur : acc, 0)
}

24. 최댓값 만들기 (2)

1
2
3
4
function solution(numbers) {
    numbers.sort((a,b) => a-b);
    return Math.max(numbers[0] * numbers[1] , numbers[numbers.length - 1] * numbers[numbers.length - 2]);
}

25. 대문자와 소문자

1
2
3
4
5
6
7
8
function solution(my_string) {
    let result = "";    
    for(let str of my_string){
        if(str.charCodeAt() >= 97 ) result += String.fromCharCode(str.charCodeAt() - 32);
        else result += String.fromCharCode(str.charCodeAt() + 32);
    }
    return result
}

26. 인덱스 바꾸기

1
2
3
4
5
6
function solution(my_string, num1, num2) {
    var answer = my_string.split("");
    answer[num1] = my_string[num2];                
    answer[num2] = my_string[num1];
    return answer.join("");
}

27. 약수 구하기

1
2
3
4
5
6
7
function solution(n) {
    var answer = []; 
    for(let i = 1 ; i <= n ; i++) {
        if(n % i == 0) answer.push(i)
    }
    return answer;
}

28. 가장 큰 수 찾기

1
2
3
function solution(array) {
    return [Math.max(...array), array.indexOf(Math.max(...array))];
}

29. 문자열 정렬하기 (1)

1
2
3
function solution(my_string) {
    return my_string.split("").filter((value) => !isNaN(value)).map(Number).sort((a,b) => a-b);
}

30. 암호 해독

1
2
3
4
5
6
7
8
9
10
function solution(cipher, code) {
    var answer = '';
    let idx;
    
    for(let i = 1 ; i <= cipher.length / code ; i++) {
        idx = code * i;
        answer += cipher[idx-1];
    }
    return answer;
}

31. 주사위 개수

1
2
3
function solution(box, n) {
    return parseInt(box[0] / n) * parseInt(box[1] / n) * parseInt(box[2] / n);
}

32. 문자열 정렬하기 (2)

1
2
3
function solution(my_string) {
    return my_string.toLowerCase().split("").sort().join("");
}

33. 제곱수 판별하기

1
2
3
function solution(n) {
    return Math.sqrt(n) % 1 ? 2 : 1;
}

34. 피자 나눠먹기 (2)

1
2
3
4
5
6
7
8
9
10
11
function solution(n) {
    var answer = 0;
    let i = 1;
    while(true) {
        let pizza = 6 * i;
        answer++;
        if(pizza % n == 0) return answer = i;
        i++;
    }
    return answer;
}

35. 외계행성의 나이

1
2
3
4
5
6
7
function solution(age) {
    var answer = '';
    const alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
    const ageArr = age.toString().split("").map(Number);
    answer += ageArr.map((age) => alphabet[age]).join("");
    return answer;
}

36. 배열 회전시키기

1
2
3
4
5
6
7
8
9
10
11
12
function solution(numbers, direction) {
    var answer = [];
    if(direction == "left") {
        const leftNum = numbers.shift()
        answer.push(...numbers);
        answer.push(leftNum);
    } else {
        answer.push(numbers.pop());
        answer.push(...numbers);
    }
    return answer;
}

37. 369게임

1
2
3
4
function solution(order) {
    var answer = 0;
    return order.toString().split("").filter((v) => "369".includes(v)).length;
}

38. 숫자 찾기

1
2
3
4
function solution(num, k) {
    const numArr = num.toString().split("").map(Number)
    return numArr.indexOf(k) >= 0 ?  numArr.indexOf(k)+1 :  -1;
}

✅ String에서는 indexOf 사용 가능. int에서는 사용 불가능.

39. 합성수 찾기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function solution(n) {
    var answer = 0;
    for(let i = 1 ; i <= n ; i++) {
        if(isChecked(i)) answer++; 
    }
    return answer;
}

function isChecked(num) {
    let cnt = 0;
    for(let i = 1 ; i <= num ; i++) {
        if(num % i == 0) cnt++;
    }
    return cnt >= 3 ? true : false;
}

40. 중복된 문자 제거

1
2
3
4
5
6
7
function solution(my_string) {
    var answer = '';
    for(let str of my_string) {
        if(!answer.includes(str)) answer += str;
    }
    return answer;
}

END

This post is licensed under CC BY 4.0 by the author.