세균 증식
문제 설명
어떤 세균은 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합니다.
코드
class Solution {
public int solution(int n, int t) {
int answer = 0;
return answer;
}
}
풀이
class Solution {
public int solution(int n, int t) {
// 세균의 수를 n으로 초기화
int answer = n;
// t 시간 동안 세균의 수를 두 배로 증식
for(int i = 0; i < t; i++) {
// answer 변수에 2(시간당 두배)를 곱하는 연산을 t번 반복
answer *= 2;
}
return answer;
}
}
t 시간 후 세균의 수 = n*2^t
풀이 2
class Solution {
public int solution(int n, int t) {
int answer = 0;
// 비트 연산자 : 숫자 n의 비트를 왼쪽으로 t 만큼 이동
answer = n << t;
return answer;
}
}
- 2진수 : 모든 값을 0과 1로 표현하는 수 체계
- 10진수 : 모든 값을 0부터 9까지 표현한느 수 체계
- 비트 연산자 : 정수를 이진수로 표현했을 때 각 이진수(비트)에 대해 연산을 수행하는 연산자
& | 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산) |
<< | 지정한 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산) |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산) |
따라서 n << t = 숫자 n의 비트를 왼쪽으로 t만큼 이동힐 때마다 수가 두 배씩 증가
(1 << 0) - [10진수] 1 = [2진수] 0001
(1 << 1) - [10진수] 2 = [2진수] 0010
(1 << 2) - [10진수] 4 = [2진수] 0100
(1 << 2) - [10진수] 8 = [2진수] 1000
n << t = n * 2^t
https://school.programmers.co.kr/learn/courses/30/lessons/120910