알고리즘_Algorism/프로그래머스
[프로그래머스] lv.1 콜라 문제 (JAVA 자바)
Jye_647
2023. 8. 4. 16:04
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 로직
- 빈병 n개 % 줘야 할 빈병 a
- 빈병 n개 / 줘야할 빈병 a * 돌려주는 병 b
- 빈병 n개 = 1번 + 2번
- 만약 빈병(n) < 줘야 할 빈병(a)? break
실패한 풀이
public int solution(int a, int b, int n) {
int answer = 0;
while(true){
if(n < a) break;
answer += division(a, n);
n = division(a, n) + rest(a, n);
}
return answer;
}
public int division(int a, int n){ return n / a;}
public int rest(int a, int n){return n % a;}
돌려받는 병의 수가 1개일 때만 생각했기에 실패.
풀이
public int solution(int a, int b, int n) {
int answer = 0;
while(true){
if(n < a) break;
answer += division(a, n) * b;
n = division(a, n) * b + rest(a, n);
}
return answer;
}
public int division(int a, int n){ return n / a;}
public int rest(int a, int n){return n % a;}
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
객체지향언어답게 작성해보려 했지만 오히려 지저분해졌다.
다시 리팩토링 ↓
class Solution {
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;
}
}