코딩테스트 연습/기타
프로그래머스 콜라 문제
삑삑도요
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에 누적되게 했다.