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://dojang.io/mod/page/view.php?id=2460
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
programmers) 숨어있는 숫자의 덧셈 (1) (0) | 2022.11.06 |
---|---|
programmers) 순서쌍의 개수 (0) | 2022.11.06 |
programmers) 문자 반복 출력하기 (0) | 2022.11.06 |
programmers) 배열의 유사도 (0) | 2022.11.06 |
programmers) 자릿수 더하기 (0) | 2022.11.06 |
reply