[문제 설명]
어떤 세균은 1시간에 두배만큼 증식한다고 합니다.
처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후
세균의 수를 return하도록 solution 함수를 완성해주세요.
[제한사항]
1 ≤ n ≤ 10
1 ≤ t ≤ 15
[입출력 예]
n t result
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합니다.
[나의 풀이]
def solution(n, t):
return n*2**t
> 규칙을 찾아 구했다.
[다른 사람 풀이]
def solution(n, t):
return n << t
> 비트 연산자를 사용하였다.
[비트 연산자]
- 2진수 문자열 피연산자에 대해 비트 단위의 연산 작업을 수행
[비트 연산자 종류]
<< : 비트 왼쪽 쉬프트
>> : 비트 오른쪽 쉬프트
& : 비트 AND
| : 비트 OR
<< : 비트 왼쪽 쉬프트
print(bin(16))
print(bin(16 << 2))
print(16 << 2)
Out[1]:
0b10000 -> 16을 2진수로 나타낸 것 (ob : 2진수라는 것을 알려주는 기호)
0b1000000 -> 16을 왼쪽으로 2번 밀면 00이 생겨서 1000000이 된다.
64 -> 위의 0b1000000을 10진수로 바꾸면 64가 된다.
-> 10진수로 계산하면 64 = 16*2*2
>> : 비트 오른쪽 쉬프트
print(bin(16))
print(bin(16 >> 2))
print(16 >> 2)
Out[2]:
0b10000 -> 16을 2진수로 나타낸 것 (ob : 2진수라는 것을 알려주는 기호)
0b100 -> 16을 오른쪽으로 2번 밀면 00이 사라지고 100만 남는다.
4 -> 위의 0b100을 10진수로 바꾸면 4가 된다.
-> 10진수로 계산하면 4 = (16/2)/2
& : 비트 AND
print(bin(14))
print(bin(7))
print(bin(14 & 7))
print(14 & 7)
Out[3]:
0b1110 -> 14를 2진수로 나타낸 것
0b111 -> 7을 2진수로 나타낸 것
0b110 -> 2진수로 나타낸 것 중에 겹치는 것
6 -> 위의 0b110을 10진수로 나타냄
| : 비트 OR
print(bin(14))
print(bin(7))
print(bin(14 | 7))
print(14 | 7)
Out[4]:
0b1110 -> 14를 2진수로 나타낸 것
0b111 -> 7을 2진수로 나타낸 것
0b1111 -> 2진수로 나타낸 값을 다 합하기
15 -> 위의 0b1111을 10진수로 나타냄
'Test > python' 카테고리의 다른 글
OX퀴즈 ( eval 함수) (0) | 2023.04.06 |
---|---|
문자열안에 문자열 (find, in, not in) (0) | 2023.04.05 |
문자열 정렬하기 (2) (sorted() 사용) (0) | 2023.04.04 |
7의 개수 ( join, count ) (0) | 2023.04.03 |
잘라서 배열로 저장하기 (filter) (0) | 2023.04.02 |