🔥 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);
}
반응형