View

문제 설명

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


제한사항
  • 1 ≤ n ≤ 10
  • 1 ≤ t ≤ 15

입출력 예ntresult
2 10 2048
7 15 229,376

입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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

나의 풀이

시간이 지날때마다 n-> n*2 -> 2(n*2) -> 2(2(n*2))
즉, n*2**0  -> n*2**1 ->  n*2**2 -> n*2**3  인 것을 알 수 있다.
결과적으로 우리는 n*2**t를 구하면 된다.

def solution(n, t):
    while t > 0:
        n = n * 2
        t -= 1
    return n


다른 풀이

다른 풀이중에 특히 비트 쉬프트 연산자를 이용한 아래의 풀이가 인상깊어 블로그에 기록해본다.

def solution(n, t):
    return n << t

사용의 예

n = 10
print(n<<1)  #10을 2배 한 값인 20 이 출력된다.
print(n>>1)  #10을 반으로 나눈 값인 5 가 출력된다.
print(n<<2)  #10을 4배 한 값인 40 이 출력된다.
print(n>>2)  #10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.

정수 10의 2진수 표현은 ... 1010 이다.
10 << 1 을 계산하면 ... 10100 이 된다 이 값은 10진수로 20이다. -> 자리를 왼쪽으로 한칸 옮긴것(뒤에 0이 생겼다.)
10 >> 1 을 계산하면 ... 101 이 된다. 이 값은 10진수로 5이다. -> 자리를 오른쪽으로 한칸 옮긴것(뒤에  0 이 사라졌다.)

 

 

 

Reference

https://heestory217.tistory.com/81#%EC%A-%--%EC%--%--%---%EA%B-%-C%EB%A-%BC%--%EC%-E%--%EB%A-%A-%EB%B-%-B%EC%--%--%---%EB%B-%B-%--%EA%B-%B-%ED%--%B-%--%EC%B-%-C%EB%A-%A-%ED%--%B-%EB%B-%B-%EC%-E%---

https://dojang.io/mod/page/view.php?id=2460

 

 

 

 

 

Share Link
reply
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31