세균증식
어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
입출력 예시
- 입출력 예 #1
처음엔 2마리, 1시간 후엔 4마리, 2시간 후엔 8마리, ..., 10시간 후엔 2048마리가 됩니다. 따라서 2048을 return합니다.
- 입출력 예 #2
처음엔 7마리, 1시간 후엔 14마리, 2시간 후엔 28마리, ..., 15시간 후엔 229376마리가 됩니다. 따라서 229,376을 return합니다.
| n | t | result |
|---|
| 2 | 10 | 2048 |
| 7 | 15 | 229,376 |
나의 풀이
#include <string>
#include <vector>
using namespace std;
int solution(int n, int t) {
for (int i = 0; i < t; i++){
n*=2;
}
int answer = n;
return answer;
}
풀고나서..
- 좀 바보 같았던 부분이 문제를 제대로 파악하지 못해서, 처음에 그저 거듭제곱 문제로 풀려고 했다는 것이다. 알고보니 그런 문제가 아니라, n의 값이 두배씩 늘어나는 문제였다. 그리고 다른 사람 풀이를 보니 쉬프트 연산을 사용한 풀이가 있었는데, 쉬프트 연산을 알고 있었다면 더 간단히 풀었겠구나 하는 생각이 들었다.
C언어 풀이방법(쉬프트 연산)
- c++로 풀고 난 뒤 보았던 다른 사람의 풀이대로 쉬프트 연산을 써보았다. 확실히 코드 길이도 짧고 편리했다. 몰랐던 쉬프트 연산을 알게 되어, 나한테 좋은 문제였다.
- << 연산자 뒤에 나오는 숫자만큼 비트가 왼쪽으로 이동하고 가장 오른쪽은 0으로 채워진다. 그리고 왼쪽으로 1칸 이동할때마다 정수의 값은 2배로 커지고 역으로 오른쪽으로 1칸 이동할때마다 정수의 값은 반이 된다.
- 이 풀이의 경우 n이 t만큼 왼쪽으로 이동하고, 그만큼 n의 값이 2배로 커지는 것이다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n, int t) {
int answer = n<<t;
return answer;
}
어떤 세균일까요..? 그 정체를 알아내면 빠르게 해결이 가능할텐데.. 프로그래머스에서 빠른 시일 내에 발표를 해주었으면 좋겠습니다!! ╰(°▽°)╯