카테고리 없음

[JS] 프로그래머스 코테 입문 Lv.0

bebeghi3356 2025. 5. 15. 18:37

아주 기초적인 연산부터 자바스크립트 코테 연습. 백준보다 프로그래머스가 자바스크립트 코테연습 환경이 더 편해보여서 프로그래머스로 연습을 해보려고 시작

 


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;
}
//오류 코드

 

문제점 ~> 잘못된 조건문

0 ≤ num1 ≤ 100;

이 코드는 조건문이 아닙니다. 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문이 더 낫다. 이러한 방법도 있다는 정도로 알아두자