[문제 설명]
어떤 세균은 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

+ Recent posts