반응형
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);
}
반응형
'🔥 CodingTest > 프로그래머스' 카테고리의 다른 글
[Lv.0] 배열 만들기 1 (0) | 2024.04.03 |
---|---|
[Lv.0] 두 수의 연산값 비교하기 (0) | 2024.04.02 |
[Lv.0] n의 배수 고르기 (0) | 2024.03.23 |
[Lv.0] 짝수는 싫어요 (0) | 2024.03.20 |
[Lv.0] 제곱수 판별하기 (0) | 2024.03.18 |