잉?

[프로그래머스] lv.1 콜라 문제 (JAVA 자바) 본문

알고리즘_Algorism/프로그래머스

[프로그래머스] lv.1 콜라 문제 (JAVA 자바)

Jye_647 2023. 8. 4. 16:04
 

프로그래머스

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

programmers.co.kr


풀이 로직

  1. 빈병 n개 % 줘야 할 빈병 a
  2. 빈병 n개 / 줘야할 빈병 a * 돌려주는 병 b
  3. 빈병 n개 = 1번 + 2번
  4. 만약 빈병(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;
    }
}
Comments