devlog_owen
[프로그래머스] DAY 2 두수의 나눗셈, 숫자비교하기, 분수의 덧셈, 배열 두배 만들기 본문
[프로그래머스] DAY 2 두수의 나눗셈, 숫자비교하기, 분수의 덧셈, 배열 두배 만들기
developer_owen 2023. 10. 19. 11:55
1.두수의 나눗셈
1)내가 쓴 풀이
const solution = (num1,num2) => Math.floor((num1/num2)*1000)
2)남이 쓴 풀이
function solution(num1, num2) {
return Math.trunc(num1 / num2 * 1000);
}
Math.trunc:소수점 이하의 숫자를 잘라내어 정수 부분만 남기는 연산
Math.trunc():
Math.trunc() 함수는 주어진 숫자의 소수점 아래를 버림하여 가장 가까운 작은 정수를 반환합니다. 즉, 소수점 이하를 버리고 정수 부분만을 반환합니다. 양수에 대해서는 내림이 되고, 음수에 대해서는 올림이 되지 않습니다.
예시:
Math.trunc(3.14)는 3을 반환합니다.
Math.trunc(-5.78)는 -5를 반환합니다.
Math.floor():
Math.floor() 함수는 주어진 숫자보다 작거나 같은 가장 큰 정수를 반환합니다. 즉, 소수점 이하를 버리고 바로 아래의 정수를 반환합니다. 항상 내림을 수행합니다.
예시:
Math.floor(3.14)는 3을 반환합니다.
Math.floor(-5.78)는 -6을 반환합니다.
따라서 주요 차이점은 음수에 대한 처리입니다. Math.trunc()는 단순히 소수점 이하를 버리고 반환하지만, Math.floor()는 항상 내림을 수행하여 더 작은 정수를 반환
2. 숫자비교하기
1)내가 쓴 풀이
const solution = (num1, num2) =>{
if (num1===num2){
return 1
} else { return -1 }}
console.log(solution)
2)남이 쓴 풀이
function solution(num1, num2) {
var answer = num1 === num2 ? 1 : -1;
return answer;
}
사실 내가 쓴 풀이도 좀 오래 걸렸다. 계속 if문에 console.log()를 넣어서 결과값이 undefined가 나와서 왜이러지 했는데 답은 if 절 안에 return문을 넣고 마지막에 console.log()을 쓰는 거였다.
그러고 남이 쓴 풀이를 봤는데 삼항연산자를 쓴 걸 보고 와우. 이게 더 적절한것같다.
삼항 연산자(ternary operator): 조건에 따라 값을 반환하는 간단한 조건부 연산자
일반적으로 if-else 문을 간단하게 표현할 때 사용
일반적인 구문: 조건 ? 값1 : 값2
조건이 참이면 값1을 반환합니다.
조건이 거짓이면 값2를 반환합니다.
삼항 연산자는 if-else 문을 간단하고 간결하게 표현할 수 있습니다. 아래는 예시를 보여줍니다:
const age = 20;
const isAdult = age >= 18 ? '성인입니다.' : '미성년자입니다.';
console.log(isAdult); // 출력: '성인입니다.' (age가 20이므로 조건이 참)
위의 예시에서, age가 18 이상이면 isAdult에는 '성인입니다.'가 할당되고, 그렇지 않으면 '미성년자입니다.'가 할당됩니다.
또한, 삼항 연산자를 중첩하여 복잡한 조건을 처리할 수 있습니다:
const score = 75;
const grade = score >= 90 ? 'A' : (score >= 80 ? 'B' : 'C');
console.log(grade); // 출력: 'C' (score가 75이므로 조건이 거짓)
3.분수의 덧셈
1)내가 쓴 풀이
못품.
2)남이 쓴 풀이
function fnGCD(a, b){
return (a%b)? fnGCD(b, a%b) : b;
}
function solution(denum1, num1, denum2, num2) {
let denum = denum1*num2 + denum2*num1;
let num = num1 * num2;
let gcd = fnGCD(denum, num); //최대공약수
return [denum/gcd, num/gcd];
}
거의 한시간 넘게 이 문제만 잡고있었다...아니 잡혀있었다...그러나 나 풀지못했다...
const solution =(numer1,denom1,numer2,denom2) =>{
const resultNumer = denom1*denom2
const resultDenom = denom2*numer1+denom1*numer2
return [resultDenom,resultNumer];
}
여기까지는 만들었는데 결과가 기약분수여야 했다. 만 28세에 기약분수 몰라서 구글링한 내 심정, 이해가는가?
초5과정에 기약분수가 나오더군요.
fnGCD라는 함수는 두 정수 a와 b의 최대공약수(Greatest Common Divisor, GCD)를 재귀적으로 계산하는 함수입니다. 최대공약수는 두 수가 가장 큰 공통으로 나눌 수 있는 양의 정수를 나타냅니다. 이 함수는 유클리드 알고리즘(Euclidean algorithm)을 사용하여 최대공약수를 찾습니다.
다음은 fnGCD 함수의 동작을 설명합니다:
- fnGCD 함수는 두 개의 인수를 받습니다: a와 b.
- 함수 내부에서 a % b를 계산합니다. 이것은 a를 b로 나눈 나머지를 나타냅니다.
- 만약 a % b가 0이면, b로 나누어 떨어진다는 것을 의미하므로 b가 최대공약수입니다. 따라서 b를 반환합니다.
- 그렇지 않으면, a % b가 0이 아니라면 fnGCD 함수를 재귀적으로 호출하고, 이번에는 a에는 b를 대입하고, b에는 a % b를 대입합니다. 이렇게 반복하여 최대공약수를 찾습니다.
유클리드 알고리즘은 두 수의 최대공약수를 효율적으로 찾는 방법 중 하나로, 재귀적인 방식으로 작동하며 매우 효율적입니다. 이 알고리즘은 많은 수학적 및 알고리즘 문제에서 사용됩니다. 함수 fnGCD는 이 알고리즘을 구현한 것이며, 두 수의 최대공약수를 계산하는 데 사용됩니다.
4.배열 두배 만들기
1)내가 쓴 풀이
못품
2)남이 쓴 풀이
function solution(numbers) {
return numbers.reduce((a, b) => [...a, b * 2], []);
}
const solution = (numbers) => numbers.map((number) => number * 2)
나의 무능함을 보아라. 앞 문제는 그래도 반은 코드 작성할 수 있었는데 이거는 거의 감도 못잡음.
위에 reduce, map, gcd는 따로 정리해야겠음
'algorithm > (js)프로그래머스' 카테고리의 다른 글
[프로그래머스] DAY4 배열의 평균값 (0) | 2023.10.24 |
---|---|
[프로그래머스] DAY4 피자나눠먹기(3) (0) | 2023.10.24 |
[프로그래머스] DAY 4 피자나눠먹기(1) (1) | 2023.10.23 |
[프로그래머스] DAY 3. 나머지 구하기, 중앙값 구하기 (0) | 2023.10.20 |
[프로그래머스] DAY 1 두수의합, 차,곱,몫 구하기 (1) | 2023.10.18 |