[프로그래머스] "치킨 쿠폰": JS - 변수를 직접 업데이트하는 것보다 새 변수를 도입하는 것이 더 효율적인 이유

신혜린·2023년 6월 22일
0

알고리즘(javascript)

목록 보기
14/21
post-thumbnail

프로그래머스 level 1에 '치킨 쿠폰' 문제를 풀다가 실행 시간이 길어 작동이 되지 않는 내 코드를 갖고 끙끙대다가.. 알고리즘 시간을 단축시키기 위한 방법에 대해 알게 되었다

프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.

위 문제를 해결하기 위해 내가 짠 코드는 다음과 같다

function solution(chicken) {
    let coupon = 0;

    while (chicken >= 10) {
        coupon += parseInt(chicken / 10);
        chicken = coupon + (chicken % 10);
    }

    return coupon;
}

의도한 바

  • 조건 : 치킨 10마리를 시킬 때마다 쿠폰 1장씩 받음
  • 쿠폰의 값을 저장할 coupon 이라는 변수를 생성
  • 매개변수 chicken의 값이 10보다 큰 동안은 계속해서 coupon 변수에 parseInt(chicken / 10) 의 값을 누적해서 합산하도록 함 (10마리 시킬 때마다 1장씩 받으니까 - 예) chicken = 180 -> 180 / 10 = 18)
  • chicken의 값은 10마리당 1장씩 받는 coupon의 값 + 10마리를 시켜서 쿠폰을 받고 남은 나머지 값 을 합산해서 할당해준다 (10보다 작아질 때까지)
    - 여기서 couponcoupon 1장으로 chicken 1마리를 시킬 수 있으니까 = chicken 1마리로 침)
    • 예) chicken = 181 -> 181 % 10 = 1 => coupon 10장 받고,chicken 시켜먹은 기록 1마리 남음)

그런데 실행 시간이 너무 길어서 최적화하는 방법을 찾아보니 coupon 값에 반복적으로 값을 할당하는 것보다 새로운 변수를 도입하는 게 더 낫다는 것..!


수정 코드

function solution(chicken) {
    let coupon = 0;

    while (chicken >= 10) {
        const newCoupon = parseInt(chicken / 10);
        coupon += newCoupon;
        chicken = newCoupon + (chicken % 10);
    }

    return coupon;
}

coupon이라는 값을 while문 안에 넣어서 반복적으로 값을 대입하는 것보다 newCoupon이라는 새로운 변수를 생성해서 값을 할당하는 게 더 효율적이라는 것. 근데 이유를 잘 모르겠어서 찾아보니 다음과 같다.

💡 두 코드의 주요한 차이점은 변수 업데이트 부분

  • 원래 코드coupon 변수를 직접 업데이트하고 chicken 변수를 계산하여 다시 대입한다.
  • 수정된 코드에는 newCoupon이라는 새로운 변수를 도입하여 쿠폰의 발급 개수를 계산하고, coupon변수에 누적시킨다. 그리고 chicken 변수를 업데이트할 때는 newCoupon 값과 chicken의 남은 개수를 더한다.


    -> 수정된 코드에서 newCoupon 변수를 사용하여 쿠폰의 발급 개수를 계산하고 누적시키므로, coupon 변수를 직접 업데이트하는 것보다 연산이 간단해진다.
    -> chicken 변수의 값이 매번 바뀌면서 반복분의 횟수가 증가하는 것을 방지할 수 있다. 즉, chicken 변수의 값이 적절하게 업데이트되면서 불필요한 반복을 줄일 수 있게 되는 것.
    -> 또한, 원래 변수를 직접 업데이트하는 방식은 변수를 잘못 사용하거나 계산 실수를 할 수 있는 가능성을 고려하지 않기 때문에 오류에 취약하는 점도 있다.

요약하면, 새로운 변수를 도입하여 원래 변수의 값을 누적시키는 것은 코드의 가독성, 단순성, 실행 횟수, 오류 방지 측면에서 효율적인 방법! 이를 통해 코드의 성능과 실행 시간을 개선할 수 있다. 📝

profile
개 발자국 🐾

0개의 댓글