Level 0 ) 사칙연산, 조건문, 배열

Doozuu·2022년 10월 14일
0

프로그래머스 (JS)

목록 보기
2/183

📌 문제 1 : 두 수의 나눗셈

두 변수를 나눈 값에 1000을 곱한 후 정수 부분 return

내 코드

const solution = (num1, num2) => Math.floor(num1 / num2 * 1000);


📌 문제 2 : 숫자 비교하기

두 수가 같으면 1, 다르면 -1을 return

내 코드

const solution = (num1, num2) => num1 == num2 ? 1 : -1;

개념

비교 연산자

== & != : 값이 같은지 비교
=== & !== : 값 & 타입까지 같은지 비교(더 엄격함)

⭐️ 삼항연산자

if else문의 대체재로 빈번히 사용됨.
true = 1, false = 0이라는 특성을 활용한 풀이가 자주 보임.(ex.문제3 참고)

condition ? exprIfTrue : exprIfFalse

ex) isMember ? "welcome" : "sign Up";



📌 문제 3 : 분수의 덧셈 (어려움)

설계

최소공배수&최대공약수 구하기 -> 최소공배수로 통분 -> 최대공약수로 나눠줌

실제 풀이 : 최대공약수만 구하면 풀 수 있다!

최대공약수 구하기 -> 두 분모의 곱으로 분수 통분 -> 최대공약수로 나눠줌

💡 최대공약수 알고리즘ㅣ 유클리드 호제법

두 수를 나누어서 나머지가 0이 되면 최대공약수는 나눈 수가 된다.
0이 아닌 경우에는 더 작은 수와 두 수를 나눈 나머지를 다시 함수에 넣어 계산한다.

계산 과정

// ex) 4/15 + 6/50
// 15 & 50의 최대공약수 : 5
// 분자 : 50*4 + 15*6 = 290
// 분모 : 15*50 = 750
// 290 & 750의 최대공약수 : 10
// 290 / 10 = 29
// 750 / 10 = 75
// [29,75]

내 코드

function solution(denum1, num1, denum2, num2) {
    // 최대공약수 구하는 함수
    function GCD(num1, num2){
        if(num1 >= num2){
            if(num1 % num2 == 0){
                return num2;
            }else{
                return GCD(num2, num1 % num2);
            }
        }else if(num1 < num2){
             if(num2 % num1 == 0){
                 return num1;
            }else{
                 return GCD(num1, num2 % num1);
            }    
        }
    }
    // 분자 & 분모 구하기
    let denum = denum1 * num2 + denum2 * num1; // 분자
    let num = num1 * num2; // 분모

    // 분자 & 분모의 최대공약수 구하기
    let num_gcd = GCD(denum, num); 

    // 기약분수 만들기
    let answer = [denum/num_gcd, num/num_gcd];
    
    return answer;
}

참고) 최대공약수 구하는 함수 단축

  • 삼항연산자의 특성을 활용한 풀이!
    두 수를 나눈 나머지가 0(=false)일 경우 b, 0이 아닐 경우(=true) 다시 함수에 넣어서 계산.
function fnGCD(a, b){
    return (a%b)? fnGCD(b, a%b) : b;
}

유클리드 호제법 참조: https://velog.io/@corone_hi/158.-분수-합



📌 문제 4 : 배열 두 배 만들기

정수 배열 numbers가 매개변수로 주어질 때, numbers의 각 원소에 두 배한 원소를 가진 배열을 return하기.

내 코드

function solution(numbers) {
    let answer = numbers.map(function(num) {
        return num * 2;
    })        
    return answer;
}

코드 단축해보기

const solution = (numbers) => numbers.map(num => num *2)

참고) 다른 풀이방식

function solution(numbers) {
    return numbers.reduce((a, b) => [...a, b * 2], []);
}

개념

⭐️ 배열 안의 원소를 활용해 계산하기

map( ) , forEach( ) , reduce( )

  1. map()
    arr.map(실행할 함수)
  2. forEach()
    arr.forEach(실행할 함수)
  3. reduce()
    arr.reduce((acc, cur) => 연산, 초기값)

단순한 문제인데 엄청 헤맸다..

  • 이유 : 문제를 제대로 안읽음!
    주어진게 정수 '배열'인데, '숫자열'이라고 생각함. -> push해서 빈 배열에 담음 -> 출력하니 [[1,2,3,4,5]] 배열이 중첩되서 나옴. 애초에 배열로 주어진거라 다시 배열에 담을 필요가 없는데...
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글