[프로그래머스 코딩테스트 연습문제] 치킨 쿠폰 문제 풀이 with 자바스크립트(Javascript) & 자바(Java)

Re_Go·2024년 6월 25일
0

코딩테스트연습

목록 보기
79/106
post-thumbnail

1. 첫번째 문제 풀이(2024-06-25)

해당 문제의 경우, 나누기(/)와 나머지(%) 연산자를 활용해 풀 수 있었는데요.오랜만에 푸는 코테 문제라 1시간 30분을 까먹었네요 ㅎ...

아무튼 제가 이해한 걸 사이클 순대로 설명드려보자면, 핵심은 다음과 같을 것입니다.

  1. 연산을 할 쿠폰 수가 10이 될때까지(10장이 있어야 치킨을 사먹을 수 있는데 10장 이하라면 사먹을 수 없으니 그 만큼 범위를 지정해줌.) while문을 반복
  2. 쿠폰 열 장에 치킨 한 마리 이므로 전체 쿠폰에서 나누기 10을 연산
  3. 얻어진 결과값을 result 변수에 저장 후
  4. 전체 다음으로 연산할 쿠폰 개수를 처음 전체 쿠폰을 10으로 나눈 몫(10장이 되어서 치킨 1마리를 시키고 받은 쿠폰 하나)과 10으로 나눈 나머지 값(10장이 안되서 남아있는 잔존 쿠폰)을 각각 더합니다.
  5. 더한 값으로 다음 사이클에 1번부터 4번까지의 과정을 쿠폰이 총 10장 미만일 때까지 실행한 후 while문이 종료되면 도출 된 result를 반환

음... 글로 설명하면 이해가 안가실테니 사이클 당 쿠폰 개수와 누적 개수를 상세히 말씀드려 보겠습니다.

  1. 첫번째 사이클 : 쿠폰이 1081개 이므로 OK
    전체 쿠폰 (1081) / 10 (10마리 상수) = 108 (쿠폰으로 사먹은 후 받은 쿠폰) | result = 0 + 108 & coupon = 108(받은 쿠폰) + 1 (1081 쿠폰을 쓸 때 다 쓰지 못하고 남아있던 쿠폰) = 109

  2. 두번째 사이클 : 쿠폰이 109개 이므로 OK
    전체 쿠폰 (109) / 10 (10마리 상수) = 10 (쿠폰으로 사먹은 후 받은 쿠폰) | result = 108 + 10 & coupon = 10(받은 쿠폰) + 9 (1081 쿠폰을 쓸 때 다 쓰지 못하고 남아있던 쿠폰) = 19

  3. 세번째 사이클 : 쿠폰이 19개 이므로 OK
    전체 쿠폰 (19) / 10 (10마리 상수) = 1 (쿠폰으로 사먹은 후 받은 쿠폰) | result = 118 + 1 & coupon = 1(받은 쿠폰) + 9 (1081 쿠폰을 쓸 때 다 쓰지 못하고 남아있던 쿠폰) = 10

  4. 네번째 사이클 : 쿠폰이 10개 이므로 OK
    전체 쿠폰 (10) / 10 (10마리 상수) = 1 (쿠폰으로 사먹은 후 받은 쿠폰) | result = 119 + 1 & coupon = 1(받은 쿠폰) + 0 (1081 쿠폰을 쓸 때 다 쓰지 못하고 남아있던 쿠폰) = 1

  5. 다섯번째 사이클 : 쿠폰이 1개 남았으므로 while문 조건에 부합하지 않아 종료 후 result를 반환

글로 정리를 하긴 했지만, 아래의 코드를 보시면 이해가 되실거라 생각합니다!

  1. 자바 버전
class Solution {
    public int solution(int chicken) {
        int coupon = chicken;
        int result = 0;

        while(coupon >=10){
        int temp = coupon/10;
        result += temp;
        coupon = (temp + (coupon%10));
        }
        return result;
    }
}
  1. 자바스크립트 버전
function solution(chicken) {
    let coupon = chicken;
    let result = 0;

    while(coupon >=10){
        let temp = Math.floor(coupon/10);
        result += temp;
        coupon = (temp + (coupon%10));
    }
    return result;
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글