Coding Review/programmers
[LV0] 세균 증식 - Python
다크미라클
2022. 10. 3. 13:30
문제 설명
어떤 세균은 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번 거듭제곱한 값이 출력된다.
결과