프로그래머스 코딩테스트 연습 입문단계 '세균 증식' 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120910
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓문제 설명
어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.
⚠️ 제한사항 및 입출력 예
- 1 ≤ n ≤ 10
- 1 ≤ t ≤ 15
n (입력) | t (입력) | result (출력) |
2 | 10 | 2048 |
7 | 15 | 229,376 |
✏️ 직접 구현한 코드
class Solution {
public int solution(int n, int t) {
int i = 1;
int res = n;
while(i <= t) {
res = res * 2;
i++;
}
return res;
}
}
🗣️ 코드 설명
- res변수에 매개변수 n의 값을 넣었습니다.
- i가 t보다 작을 때까지 반복하는 while문을 만들고, 그 안에서 res가 반복할 때마다 2씩 곱해지도록 했습니다.
🔥다른 사람의 코드
class Solution {
public int solution(int n, int t) {
int answer = 0;
answer = n << t;
return answer;
}
}
이 사람은 비트 이동 연산자(시프트 연산자)를 이용해 반복문도 사용하지 않고 문제를 풀었네요..
아래에서 비트이동 연산자에 대해 더 자세히 알아보겠습니다!!
⭐ 새롭게 알게 된 점
비트 이동 연산자(시프트 연산자)
간단하게 말하면, 피연산자의 비트열을 이동시키는 연산자입니다.
java에는 총 세 가지의 비트 이동 연산자가 있습니다.
- << : 피연산자의 비트열을 왼쪽으로 이동시키고, 이동으로 생긴 빈 공간은 0으로 채운다.
- >> : 피연산자의 비트열을 오른쪽으로 이동시키고, 이동으로 생긴 빈 공간은 음수면 1, 양수면 0으로 채운다.
- >>> : 피연산자의 비트열을 오른쪽으로 이동시키고, 이동으로 생긴 빈 공간은 0으로 채운다. (음수와 양수 상관없이.)
사용 예를 들어보자면,
int num = 2 << 1; ( 2의 비트열 오른쪽으로 1칸 이동 )
00000010의 비트열을 오른쪽으로 1칸 이동시키면, 00000100 == 4
비트열을 오른쪽으로 1칸 이동시키는 것과 2를 1번 곱하는 것은 같습니다.
다시 말해, 2진수의 특성을 이용해 곱셈과 나눗셈을 할 수 있는 것 입니다.
왼쪽으로 한 칸씩 비트열을 움직이면 2의 배수곱, 오른쪽으로 한 칸씩 비트열을 움직이면 2의 배수 나눗셈이 되는 것이죠.
answer = n << t ;
n의 비트열을 오른쪽으로 t칸 이동시킨 값을 answer변수에 넣는 것입니다. 즉, 2의 배수곱을 t번 반복시킨 값을 answer에 넣는 것이라는 거죠!!
( n * 2 = 2n, n * 4 = 4n, n * 8 = 8n ... ) ◀ t번 반복
💦 어려웠던 점
이번에도 또 문제를 제대로 읽지 않았습니다.
계속 2씩 곱해지는 것인데, 자기자신을 곱하도록 코드를 구현해 시간이 좀 걸렸던 것 같습니다.
정말 이제부터는 문제를 정확히 이해한 후 코드를 구현해나가기 시작할 것 입니다. :(
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 프로그래머스 - 배열의 평균값 (0) | 2023.02.14 |
---|---|
[JAVA] 프로그래머스 - 중복된 숫자 개수 (0) | 2023.02.10 |
[JAVA] 프로그래머스 - 삼각형의 완성조건(1) (0) | 2023.02.01 |
[JAVA] 프로그래머스 - 배열 자르기 (0) | 2023.02.01 |
[JAVA] 프로그래머스 - 문자열 뒤집기 (0) | 2023.01.31 |