[코테] JS 프로그래머스 입문문제 풀이 모음(1)_ 사칙연산, 조건문, 배열, 수학

·2023년 11월 22일
0

코테 풀기

목록 보기
24/26

👀주요 개념

  • 간단히 개념만 짚으려는 목적이기 때문에 상세 설명은 생략한다.

✅숫자 올림/내림/반올림 - Math 이용

  • Math.ceil : 올림
// 1.올림
const ceil_1 = Math.ceil(1); // 1
const ceil_2 = Math.ceil(1.3); // 2
const ceil_3 = Math.ceil(1.7); // 2

// 2. null 또는 0인 경우
const ceil_4 = Math.ceil(null); // 0
const ceil_5 = Math.ceil(0); // 0

// 3. 음수인 경우
const ceil_6 = Math.ceil(-1); // -1
const ceil_7 = Math.ceil(-1.2); // -1
const ceil_8 = Math.ceil(-1.9); // -1

  • Math.floor : 내림
// 1.내림
const floor_1 = Math.floor(1); // 1
const floor_2 = Math.floor(1.3); // 1
const floor_3 = Math.floor(2.2); // 2
const floor_4 = Math.floor(2.9); // 2

// 2. null 또는 0인 경우
const floor_5 = Math.floor(null); // 0
const floor_6 = Math.floor(0); // 0

// 3. 음수인 경우
const floor_7 = Math.floor(-1); // -1
const floor_8 = Math.floor(-1.2); // -2
const floor_9 = Math.floor(-1.9); // -2

  • Math.round : 반올림
const round_1 = Math.round(1); // 1
const round_2 = Math.round(1.3); // 1
const round_3 = Math.round(1.7); // 2

// 2. null 또는 0인 경우
const round_4 = Math.round(null); // 0
const round_5 = Math.round(0); // 0

// 3. 음수인 경우
const round_6 = Math.round(-1); // -1
const round_7 = Math.round(-1.2); // -1
const round_8 = Math.round(-1.9); // -2

✅parseInt: 문자열 -> 숫자 변환

  • 문자열의 첫글자가 숫자가 아닌 경우, NaN
  • 실수값 -> 정수값으로 변환
  • 숫자가 아닌 값은 무시하고, 그 이전의 값까지만 출력
  • 2진법, 16진법도 처리 가능
console.log(parseInt("10")); // 10
console.log(parseInt("-10")); // -10
console.log(parseInt("10.9")); // 10
console.log(parseInt(10)); // 10
console.log(parseInt("10nnn13")); // 10
console.log(parseInt("10n")); // 10
console.log(parseInt("k10")); // NaN
console.log(parseInt("10", 2)); // 2 (2진법)
console.log(parseInt("0xF")); // 15 (16진법)

✅tilde(~) 연산자, double tilde(~~) 연산자

  • tilde(~): NOT의 비트연산자
const a = 5;     // 0000000000000101
console.log(~a); // 1111111111111010
// expected output: -6

const b = -3;    // 1111111111111101
console.log(~b); // 0000000000000010
// expected output: 2
  • double tilde(~~): Math.floor()와 같은 역할
    - 속도측면에서 빠름 (~~> Math.floor> parseInt)
console.log(~~(-4.7)) // -4
console.log(~~(3.7))  // 3

✅최대공약수(gcd), 최소공배수(lcm) - 유클리드 호제법

유클리드 호제법: 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘

  • 최대공약수 (gcd)
    - 두 수 A와 B의 공통된 약수 중에 가장 큰 정수

방법1: 재귀 이용⭕

let getGCD = (num1, num2) => (num2 > 0 ? getGCD(num2, num1 % num2) : num1);

방법2: 재귀 이용❌

let getGCD2 = (num1, num2) => {
  
    while(num2 > 0){
        let r = num1 % num2;
        num1 = num2;
        num2 = r;
    } 

    return num1;
}

  • 최소공배수
    - 두 수, 혹은 그 이상의 여러 수의 공통인 배수 중 가장 작은 수
let getLCM = (num1, num2) =>{
  let lcm = 1;
   
  while(true){
    if((lcm % num1 == 0) && (lcm % num2 == 0)) break;
    lcm++;
  }
  return lcm
}

✅map, has, set, get

(추후 자세히 정리하여 올릴 예정)


✅문자열 역순 - 내장함수 / 반복

방법1. 내장함수 이용 - split(), reverse(), join()

function reverseString(str) {
    var splitString = str.split(""); 
    var reverseArray = splitString.reverse(); 
    var joinArray = reverseArray.join(""); 
    return joinArray; 
}
reverseString("hello"); // "olleh"

방법2. for문 이용

function reverseString(str) {
    var newString = "";
    for (var i = str.length - 1; i >= 0; i--) { 
        newString += str[i]; 
    }
    return newString; 
}
 
reverseString('hello');// "olleh"

👀풀이 코드 (20문제)

1. 두 수의 합

def solution(num1, num2):
    answer = -1
    
    answer = num1 + num2
    return answer

2. 두 수의 차

function solution(num1, num2) {
    var answer = 0;
    answer = num1 - num2
    return answer;
}

3. 두 수의 곱

function solution(num1, num2) {
    var answer = 0;
    answer = num1 * num2
    return answer;
}

4. 몫 구하기

function solution(num1, num2) {
    var answer = 0;
    answer = ~~(num1/num2)
    return answer;
}

5. 두 수의 나눗셈

function solution(num1, num2) {
    var answer = Math.floor(num1 / num2 * 1000)
    return answer;
}

6. 숫자 비교하기

function solution(num1, num2) {
    if (num1 == num2){
        return 1
    } else { return -1 }
}

7. ✔️분수의 덧셈

function cal_gcd(a, b) {
    return a % b === 0 ? b : cal_gcd(b, a % b)
}

function solution(denum1, num1, denum2, num2) {
    let denum = denum1 * num2 + denum2 * num1;
    let num = num1 * num2;
    let gcd = cal_gcd(denum, num);
    
    return [denum / gcd, num / gcd]
}

8. 배열 두 배 만들기

function solution(numbers) {
    var answer = [];
    for (let num of numbers){
        answer.push(num*2)
    }
    return answer;
}

9. 나머지 구하기

function solution(num1, num2) {
    var answer = num1 % num2;
    return answer;
}

10. 중앙값 구하기

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

11. ✔️최빈값 구하기

function solution(array) {
    let counting = new Map();
    let countArray = new Array;
    let maxKey;
    let maxValue = -1;
    let hasMultipleMaxValues = false;
    
    for (let i of array){
        if (!counting.has(i)){
            counting.set(i,1);
        }else if (counting.has(i)){
            counting.set(i, counting.get(i)+1);
        }
    }
    
    for (let [key, value] of counting) {
        if (value > maxValue) {
            maxValue = value;
            maxKey = key;
            hasMultipleMaxValues = false;
        }else if (value === maxValue) {
            hasMultipleMaxValues = true;
        }
    }
    return (hasMultipleMaxValues) ? -1: maxKey;
}

12. 짝수는 싫어요

  • n이하의 홀수가 오름차순으로 담긴 배열 출력
function solution(n) {
    var answer = [];
    for (i=0; i<=n; i++){
        if (i%2 != 0){
            answer.push(i)
        }
    }
    return answer;
}

13. 피자 나눠먹기(1)

  • 일곱조각의 피자를 n명이 나눠먹을때, 모든 사람이 한 조각 이상 먹기 위해 필요한 피자의 수
function solution(n) {
    return Math.ceil(n/7)
}

14. 피자 나눠먹기(2)

function solution(n) {
    let pizza = 6;
    while (pizza % n !== 0) {
        pizza += 6
    } return pizza / 6
}

15. 피자 나눠먹기(3)

  • 피자 조각 수 slice
  • 피자를 먹는 사람의 수 n
function solution(slice, n) {
    var answer = 0;
    return answer = Math.ceil(n/slice);
}

16. 배열의 평균값

function solution(numbers) {
    var num = 0;
    for (i = 0; i < numbers.length; i++){
        num += numbers[i]
    }
    return num/numbers.length;
}

17. 옷가게 할인 받기

  • 10만 원 이상 사면 5% 할인
  • 30만 원 이상 사면 10% 할인
  • 50만 원 이상 사면 20% 할인
function solution(price) {
    var answer = 0;
    if (price >= 500000){
        return Math.floor(price*0.8)
    }else if (500000 > price && price >= 300000){
        return Math.floor(price*0.9)
    }else if (300000 > price && price >= 100000){
        return Math.floor(price*0.95)
    }else{
        return price
    }
}

18. 아이스 아메리카노

  • 아이스 아메리카노: 한잔에 5,500원
  • money로 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈 출력
function solution(money) {
    var answer = [];
    answer.push(parseInt(money/5500))
    money = money - 5500 *(parseInt(money/5500))
    answer.push(money)
    return answer;
}

19. 나이 출력

  • 2022년을 기준 출생 연도 출력
function solution(age) {
    var answer = 0;
    answer = 2023 - age;
    return answer;
}

20. 배열 뒤집기

function solution(num_list) {
    var answer = [...num_list].reverse();
    return answer;
}

0개의 댓글