[JAVA] [LEVEL1] 프로그래머스 - 콜라 문제

반응형

프로그래머스 programmers Level1 콜라 문제 - java

[문제]

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

 

프로그래머스

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

programmers.co.kr

 

[풀이]

문제의  입출력 예 #2 를 분석했다.

a = 3 , b = 1 , n = 20 , result = 9

 

  • 가지고 있는 빈 병 20개에서 교환가능 병 수 3개로 계산하면 총 18(= 3 x 6)개 들고가서 콜라 6개를 받는다.
    이때 상빈이가 가지고 있는 콜라 병의 수는 8(20 – 18 + 6 = 8)개 입니다.
    ⇒ 전체 빈 병 중 교환못하고 남은 병 수 2병빈 병으로 교환후 받은 콜라 병 수 6병 = 8병
  • 가지고 있는 빈 병 8개에서 교환가능 병 수 3개로 계산하면 6(= 3 x 2)개를 들고가서 콜라 2개를 받는다.
    이때 상빈이가 가지고 있는 콜라 병의 수는 4(8 – 6 + 2 = 4)개 입니다.
    ⇒ 현재 빈 병 중 교환못하고 남은 병 수 2병 + 빈 병으로 교환후 받은 콜라 병 수 2병 = 4병
  • 가지고 있는 빈 병 4개에서 교환가능 병 수 3개로 계산하면 3개를 들고가서 콜라 1개를 받는다.
    이때 상빈이가 가지고 있는 콜라 병의 수는 2(4 – 3 + 1 = 2)개 입니다.
    ⇒ 현재 빈 병 중 교환못하고 남은 병 수 1병 + 빈 병으로 교환후 받은 콜라 병 수 1병 = 2병
  • 이제 2병을 가지고 있어 더이상 교환불가능하다. 따라서 교환으로 받은 총 콜라 병 수는 9병 (= 6 + 2 + 1)

 

남은 빈 병은 가지고 있는 빈병 (n) 을 교환 가능한 병 수 (a) 로 나눈 나머지이며,

빈 병으로 교환후 받은 콜라 병 수는 남은 빈 병 중 교환 가능한 병 수 (n / a) 당 받는 b 병 이다.

이를 정리하면, 빈 병을 교환할 수 없을 때까지 아래의 식이 반복 수행된다.

⇒  (n % a) + ((n / a) * b

 

 

[java 코드]

/**
* 콜라 문제
* @param a 콜라를 받기 위해 마트에 주어야 하는 병 수
* @param b 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수
* @param n 가지고 있는 빈 병의 개수
* @return 받을 수 있는 총 콜라 병 수
*/
public int solution(int a, int b, int n) {
    int answer = 0;
    while (n >= a) {
        answer += (n / a) * b;
        n = (n % a) + ((n / a) * b);
    }
    return answer;
}

 

반응형