관리 메뉴

공부기록용

JavaScript 문법 종합(연습02) 본문

✍️문제풀기✍️/JS_Programmers school

JavaScript 문법 종합(연습02)

과부하가즈아 2023. 5. 25. 21:42

Q1. 머쓱이네 양꼬치 가게는 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) {

    // 양고기1인분의 값(r)과, 음료값(d)을 상수로 지정
    const r = 12000;
    const d = 2000;
    
    // 양고기 10인분당 음료 1개 무료 값은 변수로 지정
    // 무료인 음료 갯수의 카운팅은 Math.floor로 
    // 총 양고기 인분/10의 몫을 무료 음료 갯수로 인지
    var s = Math.floor(n / 10);
    // var s = parseInt(n/10);

    // 최종 answer은 양고기인분*양고기가격+(섭취음료-무료음료)*음료값
    var answer = n * r + (k - s) * d; 

    // console.log(answer);

    return answer;
}

// solution(10, 3); 
// 124000

-> 다른건 몰라도 서비스 음료에 대한 변수는 설정하는 것이 필요한 것 같음.

 

-> ★Math.floor와 parseInt() 차이 복습

  • Math.ceil 은 소수값을 올리는 역활을 하는 함수이며,
  • Math.floor 는 소수값을 버리는 역활을 하는 함수이며,
  • Math.round 는 소수값에 따라 올리거나 버리는 역활을 하는 반올림 함수입니다.
  • parseInt() 는 나눈값 (실수가 될 수도 있는 값)에서 정수만을 취함

 

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

 

제한사항

  • 1 ≤ n ≤ 100
function solution(n) {
	
    // answr이 n명이 1조각이상의 피자를 먹어야 할때 필요한 피자의 수인것을 인지 
    var answer = Math.ceil(n / 7);

    // console.log(answer)

    return answer;
}

// solution(15);
// 3

-> 처음엔 나도 Math.floor과 parseInt하고 +1 하는 것도 생각했었는데 뭔가,, 짜맞추기 느낌이 들어서 변경했고 몫을 구하는게 많은 것같으니 몫에 알아봐야할것 같다.

//1. 
function solution(n) {
    return n % 7 === 0 ? Math.floor(n / 7) : Math.floor(n / 7) + 1;
}

//2. 
function solution(n) {
    return n % 7 === 0 ? n / 7 : parseInt(n / 7) + 1;

 

Q3. 머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

 

제한사항

  • 2 ≤ slice ≤ 10
  • 1 ≤ n ≤ 100
function solution(slice, n) {
    var answer = Math.ceil(n / slice);

    //console.log(answer)

    return answer;
}
// solution(7, 10);
// 2

 

Q4. 사분면은 한 평면을 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
  • dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
  • -500 ≤ dot의 원소 ≤ 500
  • dot의 원소는 0이 아닙니다.
function solution(dot) {
    let answer = 0;

    dot[0] > 0 && dot[1] > 0 ? answer = 1: null;
    dot[0] < 0 && dot[1] > 0 ? answer = 2: null;
    dot[0] < 0 && dot[1] < 0 ? answer = 3: null;
    dot[0] > 0 && dot[1] < 0 ? answer = 4: null;

    return answer;
}

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

 

Q5. 머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

function solution(money) {

    // 정해진 커피값을 상수로 지정
    const coffeePrice = 5500;

    // 주어진 money로 마시는 최대 잔수의 변수설정
    let cup = Math.floor(money / coffeePrice);

    // 최종 마실수있는 잔수와 잔돈
    var answer = [cup, (money-coffeePrice*cup)];
    // console.log(answer);
    return answer;
}
// solution(15000);
// [ 2, 4000 ]

 

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

 

제한사항

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

다시 해보기

function solution(price) {
    var answer = 0;

    if(price >= 100000) {
        answer = Math.floor(price - price * 0.05)
    } 
    if(price >= 300000) {
        answer = Math.floor(price - price * 0.1)
    } 
    if(price >= 500000) {
        answer = Math.floor(price - price * 0.2)
    };

    // console.log(answer);
    return answer;
}
// solution(150000);
function solution(price) {
    var answer = 0;

    if(price >= 100000) {
        answer = Math.floor(price - price * 0.05)
    } 
    else if(price >= 300000) {
        answer = Math.floor(price - price * 0.1)
    } 
    else if(price >= 500000) {
        answer = Math.floor(price - price * 0.2)
    } else {
        return price
    }

    return answer;
}
console.log(solution(150000));

 

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

function solution(n) {
	// Math.sqrt()를 이용해서 나온 값을 1로 나누었을 때
    // 나머지가 0이라면 정수인걸 이용 
    return Math.sqrt(n) % 1 === 0 ? 1 : 2;
}

Math.sqrt(), Math.pow()알아보기

  • Math.sqrt(9); // 3
  • Math.sqrt(2); // 1.414213562373095
  • Math.sqrt(1); // 1
  • Math.sqrt(0); // 0
  • Math.sqrt(-1); // NaN

function solution(n) {

  // 나아가 isInteger를 통해 정수인지 아닌지를 판별
  return Number.isInteger(Math.sqrt(n)) ? 1 : 2;
}
  • Number.isInteger()

주어진 값이 정수인지 판별한 뒤 boolean(True, False)으로 값을 반환한다. 주어진 매개변수의 값이 NaN(Not of Number)이거나 Infinity(무한)이여도 false를 반환한다.

 

조원분의 다른 답안지

question
function solution(n) {
    1. 사실 무식하게 해결하거나 Math.sqrt를 쓰면 걍 풀리는 문제이긴한데 , 
      for문을 얼마나 덜 돌리는 로직을 짤 수 있는지로 접근해본다.
    2. 나는 여기서 매개변수 n을 2으로 나눈것의 몫만큼 돌아가는 포문을 만들고
    (최소 제곱수인 4를 통과하기 위해 최대 2로까지밖에 못나눈다.)
    3. 내부 로직에 두 조건문을 준다.
    	3-1 i의제곱이 매개변수 n과 일치할때 (즉 , 제곱근을 발견했을때) return 1;
  		3-2 i의제곱이 매개변수 n을 넘어섰을때 (즉 , 제곱근을 발견못하고 n보다 커져버렸을때) return 2;
}
my solution
function solution(n) {
    for(let i=1; i<=Math.floor(n/2) ; i++){
        if(i*i===n)return 1;
        if(i*i>=n)return 2;
    } 
}
Comments