두 수의 나눗셈
정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.
- 0 < num1 ≤ 100
- 0 < num2 ≤ 100
function solution(num1, num2) {
const answer = Math.floor(num1 / num2 * 1000);
return answer;
}
// 다른 풀이 방법
function solution(num1, num2) {
return Math.trunc(num1 / num2 * 1000);
}
function solution(num1, num2) {
return ~~(num1 / num2 * 1000);
}
Day1의 다른 사람의 풀이에서 배운 Math.trunc()를 사용하면 정수 조건이 아닌 음수에서도 풀 수 있다.
- Math.trunc() : 소수점 이하는 버리기
- Math.floor() : 소수점 이하 내림 // (이 문제에서 조건이 음수까지 포함된다면, 틀린 문제가 된다)
~~연산은 가독성이 좋지 않기 때문에, 쓰지 않는 것을 권한다. 기능은 Math.floor()와 동일하다.
숫자 비교하기
정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.
- 0 ≤ num1 ≤ 10,000
- 0 ≤ num2 ≤ 10,000
// 1. num1 === num2이면 1을 리턴
// 2. num1 !== num2이면 -1을 리턴
// 3. 따라서, 조건이 '음수'였어도 동일한 결과
// 4. if문으로 쓴다.
function solution(num1, num2) {
let answer = 0;
if (num1 === num2) {
answer = 1;
} else {
answer = -1;
}
return answer;
}
// 다른 사람의 풀이
function solution(num1, num2) {
if(num1 === num2) {
return 1;
} esle {
return -1;
}
}
function solution(num1, num2) {
let answer = (num1 === num2) ? 1 : -1;
return answer;
}
function solution(num1, num2) {
return ((num1 == num2) - 0.5) * 2;
}
지금 돌아보면, let answer = null; 로 작성하는 게 더 적합했던 것 같다. 또한, return의 기능을 제대로 활용할 줄 몰라 이렇게 작성했었다.
<다른 사람의 풀이에 대한 이해>
return의 특성을 활용하여 깔끔하게 정리하면, 별로의 변수(answer)를 사용하지 않아도 된다.
삼항연산자를 활용하여 if - else를 한 줄로 처리
비교연산자의 truth, falsy 값을 활용한 접근
num1 == num2면, true가 되므로 형변환에 의해 1로 계산된다.
num1 != num2면, false가 되므로 형변환에 의해 0으로 계산된다.
분수의 덧셈
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
- 0 <numer1, denom1, numer2, denom2 < 1,000
// 1.분모의 덧셈 계산식 표현
// 2.분자분모의 최대공약수로 나누기
// 2-1.분자분모 중 작은 수 찾기
// 2-2.작은 수를 분자분모로 나누기
// 2-2-1.둘 다 나누어 떨어지면, 그 수가 최대공약수
// 2-2-2.안 나누어 떨어지면, 작은 수 -1 ==> (2-2)진행
function solution(denom1, numer1, denom2, numer2) {
let answer = [];
// 1.분모의 덧셈 계산식
const denom = denom1 * numer2 + denom2 * numer1; // 분자
const numer = numer1 * numer2;
// 2-1.분자분모 중 작은 수 찾기
let minNumber;
if (denom < numer) {
minNumber = denom;
} else {
minNumber = numer;
}
// 2-2-1.나누어 떨어지는 것 => 나머지가 0인 것
while(true) {
if(denom % minNumber === 0) {
if(numer % minNumber === 0) {
return [denom / minNumber, numer / minNumber];
}
}
minNumber--;
}
}
// 다른 사람의 풀이
function solution(denum1, num1, denum2, num2) {
const denum = (denum1 * num2) + (denum2 * num);
const num = num2 * num1;
let gd = 1; // 약분할 값
for(let i = 1; i <= num; i++);
if(denum % 1 === 0 && num % i === 0) {
gd = i;
}
}
return [denum / gd, num / gd];
}
<다른 사람의 풀이에 대한 이해>
간결해 보여서 가져와봤다. 풀이와 다른 접근방식이라 생각해보기 좋은 것 같다.
약분할 값을 분모값까지 1부터 1씩 증가시켜 해결하는 방법
- 약수는 최소한 1과 자기자신을 포함하므로 좋은 방법인 것 같다.
배열 두배 만들기
정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.
- -10,000 ≤ numbers의 원소 ≤ 10,000
- 1 ≤ numbers의 길이 ≤ 1,000
// 1. numbers에서 원소를 꺼낸다.
// 2. 원소를 꺼내 2배를 해준다.
// 3. 새 배열에 넣어준다.
function solution(numbers) {
let answer = [];
let i = 0;
while(i < numbers.length) {
answer.push(numbers[i] * 2);
i++;
}
return answer;
}
// 다른 사람의 풀이
function solution(numbers) {
let answer = [];
for(let i = 0; i < numbers.length; i++) {
answer[i] = numbers[i] * 2;
}
return answer;
}
function solution(numbers) {
return numbers.map((v) => v *2);
}
const solution = (numbers) => numbers.map((v) => v * 2);
function solution(numbers) {
return numbers.reduce((a, b) => [...a, b * 2], []);
}
<다른 사람의 풀이에 대한 이해>
직관적인 코드
배열 메소드, map()을 사용
- 매개변수로 넣은 값을 2배로 출력해 새 배열로 만들어준다.
reduce() 사용
-
참고
'코딩테스트 > 프로그래머스 0단계 - 입문' 카테고리의 다른 글
프로그래머스 0단계 - Day5 수학, 배열 (0) | 2024.03.15 |
---|---|
프로그래머스 0단계 - Day4 수학, 배열 (0) | 2024.03.14 |
프로그래머스 0단계 - Day3 사칙연산, 조건문, 배열 (0) | 2024.03.13 |
프로그래머스 0단계 - Day1 사칙연산 (0) | 2024.03.11 |
시작하기에 앞서 (0) | 2024.03.11 |
댓글