알고리즘

프로그래머스 - 콜라 문제

Heidong 2022. 11. 4. 10:50
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

내 풀이

public class P_44 {
	
	static int ans = 0;
	
	public int solution(int a, int b, int n) {
		if(n < a) { 
			return ans; 
		}
        
		int minus = (n / a) * a;
                int plus = (minus / a) * b; 
                int empty = n - minus + plus;
                ans += plus;
        	return solution(a, b, empty);
    	}

	public static void main(String[] args) {
		// 콜라문제
		int a = 3;
		int b = 2;
		int n = 20;
		
		P_44 p = new P_44();
		int result = p.solution(a, b, n);
		
		System.out.println(result);
	}

}

 

답을 구하기 위해서는 빈병을 줄여가면서 받았던 콜라들을 구해야 하기 때문에 재귀를 이용해서 풀었다.

재귀 탈출의 조건은 빈병 n 이 교환 가능한 콜라의 갯수 a 보다 작아질 때 이다.

더 이상 콜라를 교환할 수 없을때까지 !

 

다른 사람 풀이

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

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

        return answer;
    }
}

 

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

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

        return answer;
    }
}

 

반복문을 이용해서 풀 수 도있다.

 

n % a 나머지를 더하는 이유는 새로 받은 콜라들 + 기존에 나누어 떨어지지 못했던 나머지 빈병들을 합쳐야 현재 가지고 있는 빈병의 총 갯수를 알 수 있기 때문이다.

반응형