Coding Review/programmers

[LV0] 세균 증식 - Python

다크미라클 2022. 10. 3. 13:30

[Lv. 1] 정수 제곱근 판별


문제 설명

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


제한 사항

1 ≤ n ≤ 10
1 ≤ t ≤ 15


입출력 예#1

처음엔 2마리, 1시간 후엔 4마리, 2시간 후엔 8마리, ..., 10시간 후엔 2048마리가 됩니다. 따라서 2048을 return합니다.


입출력 예#2

처음엔 7마리, 1시간 후엔 14마리, 2시간 후엔 28마리, 15시간 후엔 229376마리가 되며, 따라서 229,376을 return합니다.


입출력 예시 

n t result
2 10 2048
7 15 229,376

풀이 및 코드 리뷰

내가 제출한 답

def solution(n, t):
    return n * pow (2, t)
  • 처음 값(n)에 시간당 제곱이 되므로 pow(2, t), 즉 2의 t승을 하여 계산하였다. 

다른 사람의 풀이1

def solution(n, t):
    return n << t
  • 정수 1개를 받아 2배로 곱하거나 나누어 계산해 주는 문제는 비트단위시프트 연산자(<<, >>)를 이용하면 된다.

참고 자료

1. 비트 쉬프트 연산

  • 비프 쉬프트 연산 : 2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로 밀어주는 연산
      -   왼쪽 비트시프트(<<) : 오른쪽에 0이 주어진 개수만큼 추가되고,
      -   오른쪽 비트시프트(>>) : 왼쪽에 0(0 or양의 정수)이나 1(음의 정수)이 개수만큼 추가
 

3. 소스코드 예제

n = 10

print("n<<1 :", n<<1)    # 10을 2배 한 값인 20이 출력된다.

print("n>>1 :", n>>1)    # 10을 반으로 나눈 값인 5가 출력된다.

print("n<<2 :", n<<2)    # 10을 4배 한 값인 40이 출력된다.

print("n>>2 :", n>>2)    # 10을 반으로 나눈 후 다시 반으로 나눈 값인 2가 출력된다.

print("n<<10 :", n<<10)  # 10을 10번 거듭제곱한 값이 출력된다.

결과