beepbeep

프로그래머스 콜라 문제 본문

코딩테스트 연습/기타

프로그래머스 콜라 문제

삑삑도요 2023. 2. 19. 09:25

한때 sns에서 유행했던 일명 콜라 문제를 풀어낼 수 있는 코드를 작성하는 문제이다.

 

n = 현재 가지고 있는 빈 병의 개수

a = 새 음료와 교환할 때 필요한 할 빈 병의 개수

b = 빈 병 a개와 교환할 수 있는 새 음료의 개수

 

 

처음에 푼 방법

int answer = 0;

int remain = 0;

while(n >= a){
    if(n % a != 0) {
        remain += n % a;
    }

    n = n / a * b;
    answer += n;

    if(remain >= a || a > n){
        n += remain;
        remain = 0;                
    }
}

return answer;

 

처음에 작성한 내용인데... 요구사항을 해결하긴 했지만 불필요한 부분이 많이 들어있다.

 

나머지 변수를 만든다던지, n의 나머지가 있을 때 나머지 변수에 누적한다던지, a가 n보다 클 때만 더한다던지 하는 부분은 필요하지 않다...

 

나머지를 따로 만들지 않고 계산 즉시 현재 가지고 있는 병의 개수인 n에 누적시켜도 된다. 너무 어렵게 생각했다...

 

 

다시 푼 방법

int answer = 0;

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

return answer;

 

불필요한 부분을 제거하기 위해서 다시 작성했다. 이번엔 나머지가 바로 n에 누적되게 했다.