콜라문제

이리·2024년 12월 9일
0
post-thumbnail

문제: https://school.programmers.co.kr/learn/courses/30/lessons/132267

문제설명

  • 주어진 파라미터: int a(빈병), int b(바꿔주는 콜라), int n(초기 빈병 값)
  • 반환값: 몇병 받을 수 있는지 int
  • 콜라 빈병 2개 → 콜라 1병
  • 빈병 20개 → 콜라 10병(빈병 10개) → 콜라 5병(빈병 5개) → 콜라 2병(빈병 2개 + 빈병 1개) → 콜라 1병(빈병 1개) → 콜라 1개
    ⇒ 19개
  • 보유 중인 콜라가 2개 미만이면 콜라를 받을 수 없다.

풀이방식

  1. a를 b로 나누었을때 몫과 나머지를 나누어서 생각해야함
    → 나머지를 저장해둬야할거같음
    → 다음에 바로 적용한다면?
  2. 나머지가 있는 경우와 없는 경우를 나눠서 계속해서 나눠가야함
    → 나눠준다면 a1 / b = 몫…나머지 → ( a2 + 나머지 ) / b
  3. 탈출 조건을 어떻게 해야하는가? ⇒ 총 개수가 더이상 나눠질 수 없을때까지 = n ≥ a

코드


class Solution {
    
    public int solution(int a, int b, int n) {
            
        int answer = 0;

        while (n >= a) { 
            int div = (n / a) * b; 
            answer += div;         
            n = (n % a) + div;     
        }
        
        return answer;
    }
}

회고

탈출 조건을 설정하는것이 매우 어려웠다…

재귀로도 다시 풀어 보았다!


class Solution {
    public int solution(int a, int b, int n) {
        return recur(a,b,n,0);
    }
    
    public int recur(int a, int b, int n, int cur){
        // finish
        if(n < a){
            return cur;
        }
        
        // repeat
        int div = (n/a)*b;
        cur += div;
        int rest = n%a;
        return recur(a,b,div+rest,cur);
    }
}

이제 재귀를 조금은 쓸줄 아는것같아 뿌듯하다! 참 쉽쥬잉~?~?

0개의 댓글