코딩테스트 회고록/코테_Java

[JAVA] 프로그래머스 - 세균 증식

2023. 2. 4. 12:05
목차
  1. ❓문제 설명
  2. ⚠️ 제한사항 및 입출력 예
  3. ✏️ 직접 구현한 코드
  4. 🗣️ 코드 설명
  5. 🔥다른 사람의 코드
  6. ⭐ 새롭게 알게 된 점
  7. 💦 어려웠던 점

프로그래머스 코딩테스트 연습 입문단계 '세균 증식' 문제입니다.

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;
    }
}

🗣️ 코드 설명

  1. res변수에 매개변수 n의 값을 넣었습니다.
  2. 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
  1. ❓문제 설명
  2. ⚠️ 제한사항 및 입출력 예
  3. ✏️ 직접 구현한 코드
  4. 🗣️ 코드 설명
  5. 🔥다른 사람의 코드
  6. ⭐ 새롭게 알게 된 점
  7. 💦 어려웠던 점
'코딩테스트 회고록/코테_Java' 카테고리의 다른 글
  • [JAVA] 프로그래머스 - 배열의 평균값
  • [JAVA] 프로그래머스 - 중복된 숫자 개수
  • [JAVA] 프로그래머스 - 삼각형의 완성조건(1)
  • [JAVA] 프로그래머스 - 배열 자르기
iamjisu
iamjisu
글 솜씨는 없지만 한 글자 한 글자 정성을 다해, 새롭게 배운 것을 정리하고 공부하는 코딩 성장 일기!!
iamjisu
지수의 코딩 발자국
iamjisu
전체
오늘
어제
github 링크
  • 카테고리
    • 개념정리
      • CS
      • MySQL
      • JavaScript
      • Kotlin
      • Java
      • NodeJS
      • Android
    • 코딩테스트 회고록
      • 코테_Java
      • 코테_C언어
    • 오류해결

최근 글

최근 댓글

hELLO · Designed By 정상우.
iamjisu
[JAVA] 프로그래머스 - 세균 증식
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.