[코딩 테스트 연습 입문] 세균 증식

2022. 12. 29. 10:22code/[프로그래머스] python

문제 

어떤 세균은 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합니다.

 

✔풀이

def solution(n, t):
    return n * (2**t)

📝설명

문제에서 세균 하나는 1시간에 두 배씩 증가한다고 한다.

만약, 세균 한 마리가 있다고 치면, 한 시간이 지나면 2배인 2마리, 두 시간이 지나면 한시간에 2배를 곱한, 즉 처음의 4배인 4마리가 되고, 3시간이 지나면 8마리가 된다. 

결론적으로 세균 하나는 시간마다 2의 제곱으로 증식한다.

따라서, 처음 세균의 마리수 n에 2의 t(경과한 시간) 제곱을 곱해주면 된다.

제곱을 나타내는 건 곱하기를 의미하는 *이 2개인 **이다.

따라서, return 값으로 n * (2**t)를 입력하면 문제에서 요구하는 정답이 도출된다.

 

👑모범 답안

🔎 난생 처음 보는 ... 그런 코드.

여기저기서 찾아보니 비트연산이라고 한다.<< 는 그 중 쉬프트 연산인데, << 한 번에 2배를 하는 효과가 있다고 한다.이해가 잘 안되니 한 번 제가 예를 들면서 이해해보겠습니다...(1) 십진법 숫자 2 ➡ 이진법 숫자 1 쉬프트 연산을 한 번 사용한다면? 0b1<<1 로 표기 ➡ 이진법 숫자 10 ➡ 십진법 숫자 4(2) 십진법 숫자 13 ➡ 이진법 숫자 1101 

쉬프트 연산을 한 번 사용한다면? 0b1101<<1 로 표기 ➡ 이진법 숫자 11010 ➡ 십진법 숫자 26

쉬프트 연산을 두 번 사용한다면? 0b1101<<2로 표기 ➡ 이진법 숫자 110100 ➡ 십진법 숫자 52

개 쩐 다.

참입니다.

 

👀느낀 점

: 나는 역시 쪼렙이다. 

비트연산자............기억하자.....

이거는 수학적 머리인 것 같아요 

 

💻 문제 출처

코딩테스트 연습 - 세균 증식 | 프로그래머스 스쿨 (programmers.co.kr)