본문 바로가기

프로그래머스 코딩(자바)/Level 0

Programmers Level 0 - 세균 증식

728x90

문제 설명

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

[ 풀이 1 ]

1
2
3
4
5
6
7
class Solution {
    public int solution(int n, int t) {
        int answer = n;
        while(t-->0) answer *= 2 ;
        return answer;
    }
}
 
 

 

 t를 1개씩 감소하면서 2를 곱해주면 됩니다.

 

[ 풀이 2 ]

1
2
3
4
5
class Solution {
    public int solution(int n, int t) {
        return n * (int)Math.pow(2,t);
    }
}
 

 

 결국 2의 t승을 곱해주면 됩니다. 누승을 구하는 Math.pow()메서드를 이용해도 되는데 이 메서드의 반환값이
 double이므로 int로 형변환해서 곱해주면 됩니다.
 
[ 풀이 3 ]
 
1
2
3
4
5
class Solution {
    public int solution(int n, int t) {
        return n << t;
    }
}
 

 

 Shift 연산자를 이용하면 아주 간단하게 풀어집니다.
 n >> m 은 n / 2의 m승이되고
 n << m 은 n * 2의 m승이됩니다.

 즉, n << t는 n * 2의 t승으로 원하는 결과가 됩니다.

 

 

 

728x90