본문 바로가기
카테고리 없음

(javaScript) 콜라 문제

by 어뇨 2024. 2. 15.

 

 

문제를 읽고 생각난 방법은 2가지였다. 반복문을 쓰는것과 재귀함수를 쓰는방법 

그래서 처음 짠 코드는

 

function solution(a, b, n) {
    var answer = 0;
    while (n >= a){
        let cola = Math.floor(n /a);
        let bottle = n % a 
        answer += cola 
        n = (cola * b) + (bottle)
    }
    return answer;
}

이런식으로 while문을 이용하고 n 의값을 업데이트해서 남은 병의 수를 계산하고 또 반복하다가 n의값이 a보다 작아지면 반복문을 멈추게끔 했는데 왠지모르겠는데 안된다...

기본예시는 둘다 실행이되는데 제출을할려고하면 오류가떠서 

 

Math.floor가 잘못됐나? 싶어서 정수로 바꾸는 방법을 다른걸로 찾아야겠다 싶어서

parseInt를 써서 

 


function solution(a, b, n) {
    var answer = 0;
    while (n >=a){
        let cola = parseInt(n/a)*b
        let bottle = n % a
   
         answer += cola
        n= cola + bottle
    }
    return answer;
}

 

이런식으로 하니까 된다 

 

math.floor는 버림을하는거이므로 정수만 나오고 parseInt도 정수값만을 반환하는거니까 같은거 아닌가? 싶고 

음수의 값일땐 다른데 (ex: Math.floor(-10.7)을하면 낮은수가 나와야하므로 -11이나오고, parseInt는 정수값만을 반환이므로 -10이나옴) 근데 문제는 음수가 나오는 경우는 없다...

아무리생각해도 뭐가 잘못된건지 모르겠습니다. 내일 튜터님에게 물어보고 풀겠습니다.

 

// 수정

 

튜터님이랑 물어보니 math.floor와 parseInt의 차이가 아니라

그냥 * b 의 위치가 달랐다. 처음 math.floor를 짰을땐 *b가 밑에 n = cola * b + bottle 이런 식으로 짰었고, 문제가 있다 생각하여 지운뒤 parseInt를 쓸땐 * b 의 위치가 위로 cola 변수를 선언할때 했었다. 근데 둘의 차이점은 answer에 더해줄때 생기므로 math.floor와 parseInt의 차이가 아닌 그냥 코드를 짤때 실수가있었다. 코드실행때 둘다 정답 처리되던건 b의 값이 1이여서고 b의 값이 1이 아니라면 두 코드는 answer에 더해지는 값이 다르다.