🔥 CodingTest/프로그래머스

[Lv.0] 세균 증식

김_수댕 2024. 3. 17. 16:54
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/120910

✅ 문제

어떤 세균은 1시간에 두 배만큼 증식한다고 합니다. 처음 세균의 마릿수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return 하도록 solution 함수를 완성해 주세요.

제한 사항

  • 1 ≤ n ≤ 10
  • 1 ≤ t ≤ 15

입출력 예

n t result
2 10 2048
7 15 229,376

🔎 풀이 방법

전에 풀어보려고 노력했을 때는 문제를 잘못 읽어서 바보같이 계속 거듭제곱의 늪에 갇혀있었다.

오늘 보니까 그냥 n의 2배를 t번 반복해 주는 문제라는 걸 알았고 바로 풀었다.

조금 더 효율적인 방식은 없을까 찾아봤는데 못 찾고 다른 분들의 코드를 봤다. 못 찾을만했다.

정처산기 때 만난 시프트 연산자(비트 연산자)를 여기서 볼 줄이야.

그래도 이번 기회에 어떻게 사용하는지 확실히 알 수 있었다.

💻 코드

function solution(n, t) {
    for(let i = 0 ; i < t; i++){
        n = n * 2;
    }
    return n;
}

👀 추가 공부

왼쪽 시프트 (<<) - JavaScript | MDN

임의의 숫자 x를 왼쪽으로 y비트 단위로 이동하면 x * 2 ** y입니다.

그래서 예를 들어 9 << 3은 9 * (2 ** 3) = 9 * (8) = 72으로 해석됩니다.

// 프로그래머스 다른 사람 풀이
function solution(n, t) {
  return n << t;
}

// MDN 예제
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010

console.log(a << b); // 00000000000000000000000000010100
// Expected output: 20

 

Math.pow() ⇒ 거듭제곱 함수 사용

// 프로그래머스 다른 사람 풀이
function solution(n, t) {
    return n*Math.pow(2,t);
}

 

반응형