저장을 습관화

프로그래머스 LV.0 양꼬치 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 양꼬치

ctrs 2023. 8. 11. 23:49

프로그래머스 LV.0 양꼬치

https://school.programmers.co.kr/learn/courses/30/lessons/120830

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

1. 문제 명

양꼬치


2. 문제 설명

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


3. 제한 사항

0 < n < 1,000

n / 10 ≤ k < 1,000

서비스로 받은 음료수는 모두 마십니다.


4. 예시

n k result
10 3 124,000
64 6 768,000


5. 기본 제공 코드

function solution(n, k) {
  var answer = 0;
  return answer;
}


6. 제출한 내 답

const solution = (n, k) => {
  if (n < 10) {
    return (answer = n * 12000 + k * 2000);
  } else {
    let a = n / 10;
    a = Math.floor(a);

    k -= a;

    return (answer = n * 12000 + k * 2000);
  }
};

 

6-2. VSC에 작성한 내용

const solution = (n, k) => {
  // n이 10보다 작을때
  if (n < 10) {
    return (answer = n * 12000 + k * 2000);
  } else {
    // n이 10보다 클 경우
    // n/10 한 값(a)을 k에서 빼고 k-=a
    let a = n / 10;
    a = Math.floor(a);

    k -= a;

    return (answer = n * 12000 + k * 2000);
  }
};

// 양꼬치는 1인분 12,000원
// 음료수는 1개에 2,000원
// 양꼬치 10인분 주문 시 음료수 하나 서비스
// 양꼬치 n인분 음료수 k개

// n보다 k가 큰 경우도 생각해야됨

// 테스트
// console.log(solution(10, 3));
console.log(solution(64, 6));


7. 특이사항

양꼬치보다 음료수를 더 많이 먹은 겨우를 생각안했음(n<k)

const solution = (n, k) => {
  // n/10 한 값(a)을 k에서 빼고 k-=a
  k -= n / 10;
  console.log(k);

  if (k < 0) {
    k += 1;
  }
  k = Math.floor(k);
  console.log(k);

  answer = n * 12000 + k * 2000;

  return answer;
};

n:10, k:3 인 경우처럼 n이 k보다 크다면 문제 없겠지만

양꼬치 2인분 시켜서 술 3병 먹었을 수도 있잖아

 

되게 간단한건데 너무 오래 잡고 있었다..

거의 35분 정도 보고 있었던것 같은데..

예시에만 맞추지 말고 경우의 수를 더 생각하자..

에러처리 해야지..

 


8. 다른 사람이 작성한 답

8-1. 틸드(~), 더블 틸드(~~)

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

 

틸드(~)는 비트 부정 연산자

0101을 1010으로 바꾸는 기능을 한다.

 

더블 틸드(~~)는 비트 부정 연산을 두번 반복한다.

0101을 1010, 다시 1010을 0101로 바꾸는데

이 과정에서 소수점은 탈락하게 된다.

 

Math.floor 메소드와의 차이

 

예를 들어 -3.14 같은 음수의 소수가 있을 경우

Math.floor는 더 작은 수로 내려가 -4가 되지만

 

더블 틸드(~~)는 정말 소수점 이하를 제거하게 되어 -3이 된다.

 

 

8-2. 

function solution(n, k) {
    return n*12000 + k*2000 - parseInt(n/10)*2000
}

 

 

8-3.

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

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

아 이거 진짜 좋다..

나는 너무 못하고..