코딩테스트-알고리즘/프로그래머스

[프로그래머스/Lv.1] 콜라 문제

닉네임생각즁 2023. 12. 22. 06:29

 

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

 

프로그래머스

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

programmers.co.kr

 

class Solution {
    public int solution(int a, int b, int n) {
        int answer = 0;
        
        
        while(n >= a) {
            answer += n / a * b;
            n = n / a * b + n % a;  
        }
        
        return answer;
    }
}

 

 

2병을 1병으로 바꿔주는거 생각해보면

20 → 10 → 5 → 2(나눠떨어지는 4병으로 바꿈) + 1 → 1(나눠떨어지는 2병으로 바꿈) + 1 → 1

이런식이다

바꿔주는 단위의 병 개수로 나눠주면서 몫은 answer와 남아있는 병 개수에 넘겨주고, 나머지는 남아있는 병 개수에 넘겨주면서 더이상 바꿀 수 없을 때까지 진행하면 된다

answer는 계속 더해져야하니까 answer += n/a, 남아있는 병 개수 n은 새롭게 업뎃되어야하니까 n = n/a + n %a 

 

이렇게 해서 맞을 줄 알았더니 테스트 일부만 통과했다 생각해보니 b를 전혀 고려하지 않았고 b가 1일때만 생각한셈,,

만약 5병을 3병으로 돌려준다고 하면 같은 방식으로 하되 * 3 만 해주면 되었다

그래서 * b를 넣어줬고 정답 !!

 

 

더 꼼꼼하게 풀어야겠다