-
[프로그래머스] 콜라 문제 자바코딩테스트 2025. 4. 2. 16:39반응형
https://school.programmers.co.kr/learn/courses/30/lessons/132267
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
마트에 a병의 빈 병을 가져다 주면 b병의 콜라를 준다.
총 가진 빈 병의 수가 n개 일 때, 마트에서 받을 수 있는 콜라 병 수를 구하시오.
제한사항
1 ≤ b < a ≤ n ≤ 1,000,000
접근
처음에 가져다 줘야할 병 수와 받을 병 수를 먼저 계산하고,
반복문을 통해 다음 차수 계산들을 진행하여 answer에 추가하여 반환하는 코드를 작성했다.
public int solution(int a, int b, int n) { int remain = n; int give = (n / a) * a; int take = (n / a) * b; int answer = 0; while(remain > 1 && give > 0 && take > 0) { if(n == remain){ remain = remain - give + take; } else { give = (remain / a) * a; take = remain / a; remain = remain - give + take; } answer += take; } return answer; }
발견된 문제
1.초기 조건 오류
give와 take 계산이 잘못되었습니다.give = (n / a) * a → 맞는 계산이지만, take는 (n / a) * b여야 합니다.현재 코드는 take = n / a로 되어 있어 b를 고려하지 않습니다.
2.루프 조건 문제
remain > 1 조건은 부적절합니다.a ≥ 2인 경우, remain이 1이 되어도 더 이상 교환할 수 없으므로 remain >= a로 수정해야 합니다.
3.변수 업데이트 오류
remain = remain - give + take에서 take가 b를 곱하지 않아 잘못된 값이 계산됩니다.
4.무한 루프 위험
give와 take가 0이 되지 않는 한 루프가 종료되지 않을 수 있습니다.수정
1. 다시 콜라를 가져다 주려면 남은 병 수 >= a가 되어야 한다.
2. 새 콜라 병 수는 가져다 준 병 수 * b 로 수정하여 정확하게 계산할 수 있도록 하였다.
3. 남은 빈 병 수 계산방식을 기존 수 % a + 새 콜라 병 수로 계산하도록 변경하였다.public int solution2(int a, int b, int n) { int answer = 0; int remain = n; while(remain >= a) { int give = remain / a; // 전달 갯 수 int take = give * b; // 받은 새 콜라 수 answer += take; remain = ( remain % a ) + take; // 남은 병 수 = 나머지 + 새 콜라 } return answer; }
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 숫자 짝꿍 (0) 2025.04.02 [프로그래머스] 삼총사 자바 (0) 2025.04.02 [프로그래머스] 옹알이 자바 substring (0) 2025.04.02 [프로그래머스] 햄버거 만들기 자바 : 스택 (0) 2025.04.01 [프로그래머스] 푸드 파이트 대회 자바 (0) 2025.04.01