코딩 공부/코딩테스트

자바스크립트 코딩테스트 입문 (2)

천서리 2023. 5. 17. 21:25
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

코딩테스트 입문 Day 2 사칙연산, 조건문, 배열

출처 : https://programmers.co.kr/

 

프로그래머스

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

programmers.co.kr

 


두 수의 나눗셈

문제

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

 

 

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100

 

입출력 예

num1 num2 result
3 2 1500
7 3 2333
1 16 62

 

 

입출력 예 설명

 

입출력 예 #1

  • num1이 3, num2가 2이므로 3 / 2 = 1.5에 1,000을 곱하면 1500이 됩니다.

입출력 예 #2

  • num1이 7, num2가 3이므로 7 / 3 = 2.33333...에 1,000을 곱하면 2333.3333.... 이 되며, 정수 부분은 2333입니다.

입출력 예 #3

  • num1이 1, num2가 16이므로 1 / 16 = 0.0625에 1,000을 곱하면 62.5가 되며, 정수 부분은 62입니다.

 

solution.js

function solution(num1, num2) {
    var answer = Math.floor((num1 /num2)*1000);
    return answer;
}
  1. Math.floor() 함수는 주어진 숫자를 소수점 아래로 버림한 정수를 반환합니다. 여기서는 num1 / num2의 결과에 1000을 곱하기 전에 버림을 수행합니다.
  2. (num1 / num2) * 1000은 num1을 num2로 나눈 후, 그 결과에 1000을 곱한 값을 나타냅니다. 소수점 아래의 값은 버리고 정수만 남게 됩니다.
  3. answer 변수에 위에서 계산한 값을 할당합니다.

 


숫자 비교하기

문제

정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • 0 ≤ num1 ≤ 10,000
  • 0 ≤ num2 ≤ 10,000

 

입출력 예

num1 num2 result
2 3 -1
11 11 1
7 99 -1

 

 

입출력 예 설명

 

입출력 예 #1

  • num1이 2이고 num2가 3이므로 다릅니다. 따라서 -1을 return합니다.

입출력 예 #2

  • num1이 11이고 num2가 11이므로 같습니다. 따라서 1을 return합니다.

입출력 예 #3

  • num1이 7이고 num2가 99이므로 다릅니다. 따라서 -1을 return합니다.

 

solution.js

function solution(num1, num2) {
    if (num1 === num2){
        return 1;
    } else {
        return -1;
    }
}
  1. 두 분수의 분자와 분모를 더하여 resultNumerresultDenom 변수에 저장합니다.
  2. gcd 함수를 사용하여 resultNumerresultDenom의 최대공약수를 구합니다.
  3. 최대공약수를 이용하여 분자와 분모를 나누어 기약 분수로 만든 뒤, [simplifiedNumer, simplifiedDenom] 형태의 배열로 결과를 반환합니다.

분수의 덧셈

문제

첫 번째 분수의 분자와 분모를 뜻하는 numer1denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

 

제한사항

  • 0 <numer1, denom1, numer2, denom2 < 1,000

 

입출력 예

numer1 denom1 numer2 denom2 result
1 2 3 4 [5, 4]
9 2 1 3 [29, 6]

 

입출력 예 설명

 

입출력 예 #1

  • 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.

입출력 예 #2

  • 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.

 

solution.js

function solution(numer1, denom1, numer2, denom2) {
  const resultNumer = numer1 * denom2 + numer2 * denom1;
  const resultDenom = denom1 * denom2;
  const gcdValue = gcd(resultNumer, resultDenom);
  return [resultNumer / gcdValue, resultDenom / gcdValue];
}

function gcd(a, b) {
  if (b === 0) return a;
  return gcd(b, a % b);
}
  1. solution 함수는 네 개의 매개변수 numer1, denom1, numer2, denom2를 받습니다. 이 매개변수는 각각 첫 번째 분수의 분자, 분모와 두 번째 분수의 분자, 분모를 의미합니다.
  2. resultNumer 변수에는 첫 번째 분수의 분자와 두 번째 분수의 분자를 각각 분모와 곱한 값을 더하여 저장합니다.
  3. resultDenom 변수에는 첫 번째 분수의 분모와 두 번째 분수의 분모를 곱하여 저장합니다.
  4. gcdValue 변수에 gcd 함수를 호출하여 resultNumer와 resultDenom의 최대공약수를 구합니다. gcd 함수는 재귀적으로 호출하여 최대공약수를 계산하는 함수입니다.
  5. resultNumer / gcdValue는 resultNumer를 최대공약수로 나눈 값을, resultDenom / gcdValue는 resultDenom을 최대공약수로 나눈 값을 의미합니다.
  6. [resultNumer / gcdValue, resultDenom / gcdValue] 형태의 배열을 반환하여 분자와 분모를 순서대로 담은 결과를 출력합니다.

배열 두배 만들

문제

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • -10,000 ≤ numbers의 원소 ≤ 10,000
  • 1 ≤ numbers의 길이 ≤ 1,000

 

입출력 예

numbers result
[1, 2, 3, 4, 5] [2, 4, 6, 8, 10]
[1, 2, 100, -99, 1, 2, 3] [2, 4, 200, -198, 2, 4, 6]

 

 

입출력 예 설명

 

입출력 예 #1

  • [1, 2, 3, 4, 5]의 각 원소에 두배를 한 배열 [2, 4, 6, 8, 10]을 return합니다.

입출력 예 #2

  • [1, 2, 100, -99, 1, 2, 3]의 각 원소에 두배를 한 배열 [2, 4, 200, -198, 2, 4, 6]을 return합니다.

 

solution.js

function solution(numbers) {
  var answer = numbers.map(function(number) {
    return number * 2;
  });
  return answer;
}
  1. map 메소드는 배열의 각 원소에 대해 주어진 콜백 함수를 실행하고, 그 반환값을 사용하여 새로운 배열을 생성합니다.
  2. numbers.map은 numbers 배열을 순회하면서 각 원소에 대해 콜백 함수를 실행합니다. 이때, number 매개변수는 각 원소의 값이 됩니다.
  3. 콜백 함수는 number * 2를 반환하며, 이는 현재 순회 중인 원소를 두 배로 만든 값입니다.
  4. answer 변수에 numbers.map의 결과인 새로운 배열을 할당합니다.
  5. 마지막으로 answer 배열을 반환하여 두 배로 만들어진 배열을 출력합니다.
반응형
Adventure Time - BMO