본문 바로가기
코딩테스트/프로그래머스 0단계 - 입문

프로그래머스 0단계 - Day1 사칙연산

by 학습하는 청년 2024. 3. 11.

두 수의 합

정수 num1과 num2가 주어질 때, num1과 num2의 합을 return하도록 soltuion 함수를 완성해주세요.

  • -50,000 ≤ num1 ≤ 50,000
  • -50,000 ≤ num2 ≤ 50,000
function solution(num1, num2) {
  const = num1 + num2;
  return sum;
}

// 다른 사람의 풀이
function solution(num1, num2) {
  var answer = -1;
  answer = parseInt(num1) + parseInt(num2);
  return answer;
}

 

<다른 사람의 풀이에 대한 이해>

var는 재할당이 가능하므로

answer에 -1이 할당되어 있지만 새롭게 식을 작성하여 재할당

-> var는 호이스팅 문제가 있으므로 쓰지 않는 것을 권장한다.

 

let을 사용했어도 동일하게 접근할 수 있다.

'정수'라는 조건이 있으므로, 사실상 parseInt를 사용하지 않아도 해결 가능한 문제


두 수의 차

정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.

  • -50000 ≤ num1 ≤ 50000
  • -50000 ≤ num2 ≤ 50000
function solution(num1, num2) {
  const = num1 - num2;
  return sum;
}

// 다른 사람의 풀이
const solution = (num1, num2) => num1 - num2;

 

<다른 사람의 풀이에 대한 이해>

와.. 문제 푸는 데에만 급급했지, 화살표 함수로 간결하게 만들어볼 생각은 못했다.


두 수의 곱

정수 num1, num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 return 하도록 solution 함수를 완성해주세요.

  • 0 ≤ num1 ≤ 100
  • 0 ≤ num2 ≤ 100
const solution = (num1, num2) => num1 * num2;

// 다른 사람의 풀이
functtion solution(num1, num2) {
  return Math.floor(num1 * num2);
}

화살표 함수로 해결하는 풀이를 보고, 곧장 적용했다.

 

<다른 사람의 풀이에 대한 이해>

'정수'라는 조건이 있기 때문에, Math.floor()를 사용하지 않고도 해결할 수 있는 문제였다.


몫 구하기

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

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100
const solution = (num1, num2) => Math.floor(num1 / num2);

// 다른 풀이 방법
function solution(num1, num2) {
  const answer = Math.floor(num1 / num2);
  return answer;
}

// 다른 사람의 풀이
function solution(num1, num2) {
  return parseInt(num1 / num2);
}

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

function solution(num1, num2) {
  reutrn (num1 /num2) << 0;
}

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

몫을 구하는 문제이므로, 계산하고 남은 값의 정수를 구하기 위해 Math.floor()를 사용하였다.

 

<다른 사람의 풀이에 대한 이해>

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

--> Math.floor()와 parseInt()의 차이

  • parseInt()
    - 문자열을 인자로 받기 때문에, 불필요한 계산 절차를 거친다.
    1) number로 받은 변수를 string으로 변경하고
    2) 10진수 추론을 위해, string 앞 2글자가 0x나 0X인지 비교

  • Math.floor()
    - 소수점 이하 '내림'
    - 조건이 정수이기 때문에, Math.floor()를 사용해도 정답!
    그러나 '음수' 조건이었다면 틀리게 된다.

    만약 음수일 경우,
    Math.floor() 함수는 -1.xxx일 경우 -2를 반환한다.
    parseInt()는 -1.xxx일 경우 -1을 반환한다.

 

Math.trunc()

-> 소수점 이하 '버림'을 나타낸다.

<< 0

 

틸트 연산자( ~~ )

-> double tilde: not의 기능을 하는 비트 연산자 - Math.floor()과 동일한 역할
-> 특정 브라우저에서 Math.floor()나 parseInt보다 빠른 결과를 나타낼 수 있다.
그러나 유지보수하는 사람의 입장에서 가독성이 떨어지므로 추천하지 않는다.


참고

https://youtu.be/-KeKNNTL4ps?si=_UxA5xviwYBRFV1p

댓글