본문 바로가기

카테고리 없음

2023.03.14

 

문제 1

머쓱이네 양꼬치 가게는 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) {
    let a = Math.floor(n/10) * 2000;
    return (n*12000) + (k*2000) - a
}

 

다른 풀이

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

 

배운 것

 

Tilt(~)를 두개 사용해서 비트 잘라내기

Tilt(~) 사용시 숫자의 소수점을 버리게 되며, ~ 연산을 두번 시킴으로써 결과적으로는 원래 상태로 되돌리게 된다.

양수에서는 Math.floor()와 동일하게 적용되어 결과값이 같으나, 음수에서는 결과값이 달라질 수 있다.

참고 : https://oper0116.tistory.com/40 

 

~~53.5; //53
Mate.floor(53.5); //53

~~-43.2; // -43
Math.floor(-43.2); //-44

 

 


문제 2

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

 

 

입출력 예 #1

  • 7명이 최소 한 조각씩 먹기 위해서 최소 1판이 필요합니다.

입출력 예 #2

  • 1명은 최소 한 조각을 먹기 위해 1판이 필요합니다.

입출력 예 #3

  • 15명이 최소 한 조각씩 먹기 위해서 최소 3판이 필요합니다.

 

 

나의 풀이

function solution(n) {
    answer = Math.ceil(n/7)
    return answer;
}

 

 

배운 것

Math.ceil() 소수점 이하의 숫자를 올림한다

const num1 = 1.1234;
const num2 = 12.5678;
const num3 = 123.5678;

console.log(Math.ceil(num1));   // 2
console.log(Math.ceil(num2));   // 13
console.log(Math.ceil(num3));   // 124

 


문제3

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

 

 

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

 

입출력 예

dot [2,4] > result 1

dot [-7,9] > result 2

 

 

 

나의 풀이

function solution(dot) {
    let x = dot[0]
    let y = dot[1]

    if (x>0 && y>0){
        return 1;
    } else if (x>0 && y<0){
        return 4;
    } else if (x<0 && y>0){
        return 2;
    } else if (x<0 && y<0){
        return 3;
    }
}

return을 {}안에 넣지 않고 if 조건문 옆에 바로 붙여 써도 좋았을 것 같다 // if (x>0 && y>0) return 1;

 

 

 

다른 풀이

function solution(dot) {
    const [num,num2] = dot;
    const check = num * num2 > 0;
    return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}

 

 


문제 4 

 

머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.

 

제한사항

 

  • 10 ≤ price ≤ 1,000,000
  • price는 10원 단위로(1의 자리가 0) 주어집니다.
  • 소수점 이하를 버린 정수를 return합니다.

 

 

나의 풀이

function solution(price) {
    if (price >= 500000){
        price *= 0.8
    } else if (price >= 300000){
        price *= 0.9
    } else if (price >= 100000){
        price *= 0.95
    } else{
        price *= 1
    }
    return ~~price;
}

50만원, 30만원, 10만원 순으로 적어야 함 (반대로 적을 경우 출력 오류)

price * 0.8이 아니라 price *= 0.8 이다

price 앞에 ~~를 붙여서 소수점 이하를 버린 정수를 return 해야 함

 

 

다른 풀이

function solution(price) {
    price = price>=500000?price*0.8:price>=300000?price*0.9:price>=100000?price*0.95:price;
    return ~~(price);
}

 

 

배운 것

 

삼항 연산자

불 표현식 ? 참일 때의 결과 : 거짓일 때의 결과

 

 

 


 

문제 5

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ n ≤ 1,000,000

 

나의 풀이

 

 

function solution(n) {
  return Math.sqrt(n) % 1 === 0 ? 1 : 2
}

 

 

배운 것

Math.sqrt() : 루트값 구하기

함수 인자로 값을 넘겨주면 루트 값을 반환한다.
만약 매개변수가 음수이면 NaN을 반환한다.