2022. 12. 29. 10:22ㆍcode/[프로그래머스] 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)
'code > [프로그래머스] python' 카테고리의 다른 글
[코딩 테스트 연습 입문] 7의 개수 (0) | 2022.12.29 |
---|---|
[코딩 테스트 연습 입문] 문자열 정렬하기 (2) (0) | 2022.12.29 |
[코딩 테스트 연습 입문] OX 퀴즈 (0) | 2022.12.28 |
[코딩 테스트 연습 입문] 숫자 찾기 (0) | 2022.12.28 |
[코딩 테스트 연습] 콜라 문제 (0) | 2022.12.28 |