저장을 습관화

코딩 테스트 LV.0 몫 구하기 본문

코딩 테스트/프로그래머스 - 자바스크립트

코딩 테스트 LV.0 몫 구하기

ctrs 2023. 5. 25. 00:23

프로그래머스 LV.0 몫 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/120805

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

몫 구하기

문제 설명 
정수 정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

제한 사항
0 < num1 ≤ 100
0 < num2 ≤ 100

예시
num1: 10, num2: 5, answer: 2;

num1: 7, num2: 2, answer: 3;

기본 제공 코드

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

 

제출한 내 답

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

 

VSC에서 작성 했던 것

function solution(num1, num2) {
    var answer;

    if (num1 < num2) {
        console.log(num1,"이 ",num2,"보다 작아 나눌 수 없습니다.");
        return answer = "error";
    } else {
        answer = Math.floor(num1/num2);
    };
   
    return answer;

};


// 테스트를 위한 함수 호출

// console.log(solution(10, 5));
// console.log(solution(7, 2));

// 하고 싶은 것

// num1보다 num2가 크다면 'num1보다 num2가 크므로 나눌 수 없습니다.' 출력
// num1보다 num2가 작다면 나눈 몫을 answer에 전달


1. 애로사항

if문 까지 써서 num1보다 num2가 크면 '그거 못나눠요!' 라는 메시지를 출력하고 싶었다.

근데 제출해서 내니까 스무개 정도 검사 결과 중 둘 정도 틀리다고 나오더라

왜인지는 말 안해주대

 

그래서 if문은 빼고

answer = Math.floor(num1/num2); // 이것만 남겨놓고 제출했다. 당연히 통과

2. 헷갈렸던 부분

2-1. / 나누기 연산자와 % 나머지 연산자

/ 연산자는 나눈 값, %연산자는 나누고 남은 값
ex) 5/2 = 2, 5%2 = 1

      6/3 = 2, 6%3 = 0

 

문제 기본 제공 코드에 %있길래 그대로 썼다가 안돼서 뒤늦게 고쳤다.


2-2. 예시에서 7/2의 값으로 3 처럼 정수 결과를 원한다고 써놨다.
해결방법: 검색해서 소수점을 내리는 메소드 Math.floor()를 찾아 적용했다.


그런데 이 메소드를 어디에 넣어야 하는지 몰라 버벅였다.
answer = Math.floor.answer; 같은 것도 해봤다. 안되더라.

 

이외에도 소수값을 올림하는 Math.celi()나, 

소수값을 반올림하는 Math.round()도 있다는걸 알았다.


참고: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

 

 

3. 다른 사람이 작성한 답

3-1. 

function solution(num1, num2) {
  return parseInt(num1 / num2);
}

이 사람은 문자열에서 숫자를 추출하는 parseInt를 사용하였다.

 

찾아보니 아래와 같은 방식으로 쓰인다고한다.

const myNumber = '3';
console.log(2 + parseInt(myNumber));
// returns 5

문자열로 작성된 myNumber도 숫자로 변경되었다.

 

단 "큰 수에서는 type number에 string이 들어가는 경우도 있기 때문에, 소수점 이하를 절삭하여 정수 값을 return하려는 목적으로 Math.floor 대신에 parseInt를 사용해서는 안 됩니다." 라는 댓글이 달려있었다.

 

parseInt는 문자열에서 숫자 추출 용도 Math.floor가 소수점 내리는 용도기억하자

 

3-2. 

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

화살표 함수를 멋지게 사용하셨다. 세련되어 보인다.

 

3-3.

function solution(num1, num2) {
    return Math.trunc(num1 / num2);
}

가장 일반적인 답이다.