[JS] 서비스로 받은 음료수 제외 총 값은?

김zunyange·2023년 6월 2일
0

알고리즘

목록 보기
2/7
post-thumbnail

문제 설명

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

**조건

  • 0 < n < 1,000
  • n / 10 ≤ k < 1,000
  • 서비스로 받은 음료수는 모두 마십니다.

내 풀이법

function solution(n, k) {
    var answer = 0;
    if (n < 10) {
        return answer= 12000*n + 2000*k;
    } else if (n =>10 && n <20) {
        return answer= 12000*n + 2000*k - 2000;
    } else if (n =>20 && n <30) {
        return answer= 12000*n + 2000*k - 2000*2;    
    } else {
        return answer= 12000*n + 2000*k - 2000*3;
    }
    return answer;
}

우선 조건문을 차근차근 생각해보았다.
그 후 조건문이 반복되니까 반복문을 써야된다고 생각했다.

function solution(n, k) {
    var answer = 0;
    for (let i=; i<100; i++) {
        if (n => i*10 && n < i*20) {
            return answer = 12000*n + 2000*k - 2000*i;
        } else {
            return answer = 12000*n + 2000*k;
        }
    }
    return answer;
}

*else는 (n< 10)일 때!
서비스로 받은 음료수가 없으니까 뺄 것도 없지.

그런데 자꾸 테스트 2 에서 값이 78000이 나온다는 것은 양꼬치를 아무리 먹어도 서비스로 받은 음료수 갯수(i)가 1개로 측정된다는 건데 반복문이 i=1 에서 멈춘다는 걸 알았다.

그래서 초기 값을 let i=parseInt(10/n) 로도 해봤는데 계속 테스트 2에서 같은 값이 나왔고, 이게 i=1일때 if문 동작하고 그다음 else 문으로 간 다음 종료돼서인 것 같았다. 왜냐면 return 문은 함수를 종료시키니까!! 자꾸 if 문 다음에 return 을 써가는 나쁜 손버릇이 생겨버림 😣

그래서,, return 을 없애줬는데

OMG!
아주 잘못되었다. 다시 생각해보자..
흠 처음부터 생각해보면 ? 반복문은 필요없다. 그냥 사칙연산 하나만 하면 되니까! 서비스로 받은 음료수 갯수는 양꼬치 먹은 갯수에서 계산하면 되니까 i자리 였던 곳에 parseInt(10/n) 를 넣었더니~~

최종 풀이법

휴. 간단한 문제였구나 😓 너무 어렵게 생각하지 말 것!

🤔 그렇다면 왜 return 을 지웠다고 값이 아예 달라지는건가?!
(스터디 팀원분께 물어봐야징)


다른 분들의 풀이(1)

function solution(n, k) {
    let drink = k;
    let event = Math.floor(n / 10)

    return (n * 12000) + ((drink - event) * 2000);
}

오옹 저렇게 먼저 생각할 수도 있구나!

다른 분들의 풀이(2)

function solution(n, k) {
    k-=~~(n/10);
    if (k < 0) k = 0;
    return n*12000+k*2000;
}

이 분은 틸드(tilde)? 틸트(tilt)문법을 썼다고 하는데.. 아직 요까지 알 필요가 없을 것 같다. 그래도 한번 보면 나쁠거 없지!
틸트 메서드가 무엇인고?

💎 k-=~~(n/10); 줄을 보면,
k 변수에 n을 10으로 나눈 후, ~~ 연산자(tilde)를 사용하여 소수점 이하를 버린 정수형으로 변환한 값을 빼는 연산이 수행된다. 이를 통해 k 값에서 n의 10분의 1을 뺀 결과를 얻는다.
즉, ~~ 연산자가 k 변수의 값을 n의 10분의 1만큼 감소시키는 데에 사용되었다. Math.floor() 과 비슷한 기능을 한다고 보면 된다. (양수에서는 결과가 같으나 음수에서 차이가 있긴하다.)


출처 :제이쿼리 물결 연산자 ( tilde 연산자 )

profile
배움은 즐거워 ~(*ૂ❛ᴗ❛*ૂ)

0개의 댓글