아주 기초적인 연산부터 자바스크립트 코테 연습. 백준보다 프로그래머스가 자바스크립트 코테연습 환경이 더 편해보여서 프로그래머스로 연습을 해보려고 시작
1. 두 수의 합 구하기
나의 풀이
function solution(num1, num2) {
var answer = num1 + num2;
return answer;
} console.log(solution(2, 3));
console.log(solution(100, 2));
가장 표준적인 풀이
const solution = (num1, num2) => num1 + num2
- 자바스크립트 코드를 쓸 때 var 보다는 const를 쓰는 것이 좋다
- const 예약어는 한 번만 선언 가능하며 재선언도 불가능하다.
2. 두 수의 차 구하기
문제 제시에서 num1에서 num2를 뺀다는 전제가 있으므로 두 수의 차가 음수가 나올 수 도 있다.
나의 풀이
function solution(num1, num2) {
let answer = 0;
answer = num1 - num2;
return answer;
}
다른 사람의 풀이
//1
const solution = (num1, num2) => num1 - num2
//2
function solution(num1, num2) {
var answer = 0;
-50000 <= num1 <= 50000;
-50000 <= num2 <= 50000;
answer = num1 - num2;
return answer;
}
solution(2,3);
solution(100,2);
-let 예약어는 한번 선언하면 다시 선언할 수 없습니다.
3. 두 수의 곱 구하기
function solution(num1, num2) {
let answer = 0;
0 ≤ num1 ≤ 100;
0 ≤ num2 ≤ 100;
answer = num1 * num2
return answer;
}
//오류 코드
문제점 ~> 잘못된 조건문
이 코드는 조건문이 아닙니다. JavaScript에서는 이렇게 쓸 수 없고 아무 의미도 없습니다. 만약 조건을 확인하고 싶다면 다음과 같이 조건문을 사용해야 한다.
if (num1 < 0 || num1 > 100 || num2 < 0 || num2 > 100) { throw new Error("num1과 num2는 0 이상 100 이하이어야 합니다."); }
근데 조건문 넣어도 안되길래 그냥 조건문 빼버림 ㅂㄷㅂㄷ (지피티는 잠시 꺼두기로 햇다..)
function solution(num1, num2) {
let answer = 0
answer = num1 * num2
return answer
}
ㅉ 다른사람은 어케햇는지 봐볼까요?
function solution(num1, num2) {
var answer = 0;
if((0 <= num1 && num1 <=100) && (0 <= num2 && num2 <=100))
answer = num1 * num2
return answer;
}
아 깔끔해 이거지
4. 몫 구하기
나누기
우리가 흔히 아는 나누기는 /을 사용한다.
const num = 10 / 3 ;
console.log(num) // 3.3333...
몫
몫만을 구하고 싶을 땐 나머지를 제거해주는 내림함수 Math.floor() 를 활용한다.
파이썬의 //문법과 헷갈리지 않도록 주의한다.
const num = Math.floor(10 / 3) ;
console.log(num) // 3
나머지
나머지를 구하고 싶을 땐 %을 사용한다. 짝수와 홀수를 구분할때 자주 활용된다.
const num = 10 % 3 ;
console.log(num) // 1
5. 두 수의 나눗셈
function solution(num1, num2) {
const result = num1 / num2;
const answer = Math.floor(result * 1000);
return answer;
}
- Math.floor()
자바스크립트에서, 'Math.floor()' 함수는 기존의 수에서 적거나 같은 가장 가까운 정수로 내림하여 반올림하는 데 사용된다. 음수일 때도 더 작은쪽으로 내림함.
소수점에 상관없이 무조건 truncate해서 정수만 남긴다.
따라서 반올림하고 싶으면, 'Math.round()'함수를 사용하고, 무조건 올림하고 싶으면 'Math.ceil()' 함수를 사용해라
- 다른 사람이 쓴 메소드 중 Math.trunc()를 봤다
이 메소드는 소수점을 그냥 잘라버림(truncate). 소수점 이하를 제거하고 정수 부분만 반환한다. 음수이든 양수이든 소수점을 그냥 잘라버림
입력값 | floor | round | ceil | trunc |
4.7 | 4 | 5 | 5 | 4 |
4.3 | 4 | 4 | 5 | 4 |
-4.7 | -5 | -5 | -4 | -4 |
-4.3 | -5 | -4 | -4 | -4 |
- double tlide( ~~ )
double tilde: not의 기능을 하는 비트 연산자이다. 10진수 5(16비트 2진수 0000000000000100)에 tilde를 적용하면 -6(16비트 2진수 1111111111111011) 이며 이 과정에서 소수점은 버려지게 된다. -6에 다시 tilde를 적용하면(double tilde, ~~5라고 표기) 다시 정수 5로 돌아오게 되어 결과적으로 Math.trunc()와 같은 기능을 하게 된다. 이는 특정 브라우저에서 Math.floor()나 parseInt보다 빠른 퍼포먼스를 보여줄 수 있으나, 유지보수하는 사람의 입자에서 문맥의 이해에 어려움이 있을수 있다.
function solution(num1, num2) {
return ~~(num1/num2*1000);
}
🔧 ~ (Bitwise NOT) 연산자에 대한 정확한 설명
- ~는 비트 단위 NOT 연산자로, 모든 비트를 반전시킵니다.
- JavaScript에서 숫자는 64비트 부동소수점이지만, 비트 연산을 할 경우 32비트 정수로 변환됩니다.
- 즉, ~x는 -(x + 1)과 같습니다.
~5 // == -(5 + 1) == -6
~~5 // == ~(-6) == -(-6 + 1) == 5
✅ ~~의 실제 용도
~~는 종종 소수점을 없애고 정수로 만드는 트릭으로 사용됩니다.
~~4.7 // 4
~~-4.7 // -4
이것은 Math.trunc()와 같은 동작을 합니다, Math.floor()가 아니라요.
✅ 성능 관련
- ~~x는 매우 빠르며, 과거에는 Math.floor()보다 성능이 좋은 경우가 많았습니다.
- 그러나 최신 브라우저에서는 JIT 컴파일 덕분에 Math.floor()도 최적화되어 속도 차이가 거의 없습니다.
⚠️ 가독성 측면
- ~~x는 간단하지만 의도를 파악하기 어려워 유지보수 측면에서 권장되지 않는 경우가 많습니다.
- 대신 Math.trunc(x)를 사용하는 것이 더 명확하고 안전합니다.
6. 숫자 비교하기
function solution(num1, num2) {
if(num1 == num2)
return 1;
else return -1;
}
다른사람풀이
//1
function solution(num1, num2) {
var answer = num1 === num2 ? 1 : -1;
return answer;
}
-삼항연산자
기본문법 => 조건식 ? 참일 때 값 : 거짓일 때 값;
그럼 삼항연산자와 if문의 차이는 어떻게 될까?
삼항연산자는 중첩되는 경우 코드가 중복되며 헷갈리는 경우가 생기므로 가독성을 위해 if-else문이 더 낫다. 이러한 방법도 있다는 정도로 알아두자