[SEB FE] Section 1 unit3 (1) - 조건문 문제 풀기

동화·2022년 10월 6일
0

코드스테이츠

목록 보기
2/32

miniCalculator

두 개의 수와 기호를 입력받아 알맞게 계산한 값을 리턴해야 합니다.

function miniCalculator(num1, num2, operator) {
  if (operator === '+') {
    return num1 + num2;
  } else if (operator === '-') {
    return num1 - num2;
  } else if (operator === '*') {
    return num1 * num2;
  } else if (operator === '/') {
    return num1 / num2;
  }
}


daysInMonth

특정 달(month)을 입력받아 각 달에 몇 일이 있는지 리턴해야 합니다.
2월 29일은 없는 걸로.

function daysInMonth(month) {
  if (month === 2){
    return 28
    } else if (month === 4 || month === 6 || month === 9 || month === 11){
      return 30
    } else {
      return 31
      }
}


isEitherEvenAndLessThan9

두 개 수를 입력받아 아래의 2가지 조건을 모두 만족하는지 검사합니다.

  1. EitherEven: 적어도 하나의 수는 짝수이다.
  2. LessThan9: 두 수 모두 9보다 작다.
function isEitherEvenAndLessThan9(num1, num2) {
  if ((num1 % 2 === 0 || num2 % 2 === 0) && (num1 < 9 && num2 <9)){
    return true
  } else {
    return false
  }
}

내가 쓴 답. if 괄호 안에 괄호를 이용해서 답을 도출

function isEitherEvenAndLessThan9(num1, num2) {
  if (num1 < 9 && num2 < 9) {
    if (num1 % 2 === 0 || num2 % 2 === 0) {
      return true;
    }
    return false;
  }
  return false;
}

레퍼런스. if 안에 if의 범위를 넣어 먼저 지정해주고, 그 안에서 다시 가정




convertScoreToGradeWithPlusAndMinus

  • string 타입을 리턴해야 합니다.
  • 각 등급의 최저 점수는 아래와 같습니다. ('F'의 경우 최대 점수를 표기)
  • 90 이상 --> 'A'
  • 80 이상 --> 'B'
  • 70 이상 --> 'C'
  • 60 이상 --> 'D'
  • 60 미만 --> 'F'
  • 만약 주어진 점수가 100을 초과하거나 0 미만인 경우, 문자열 'INVALID SCORE'를 리턴해야 합니다.
  • 각 등급의 최고 점수보다 7점 이하인 경우, 등급과 함께 '-'를 리턴해야 합니다. (단, 93점의 경우에는 A를 리턴해야 합니다.)
  • 각 등급의 최저 점수보다 8점 이상인 경우, 등급과 함께 '+'를 리턴해야 합니다.


    문제부터 애먹었다.. 사실 이렇게 저렇게 (1의 자리를 이용하려고 노력..) 해봤으나
    도무지 답을 알 수 없어 일단 노가다 진행...
function convertScoreToGradeWithPlusAndMinus(score) {
  if (score < 0 || score > 100){
    return 'INVALID SCORE'
  } else if (score >= 98){
    return 'A+'
  } else if (score >= 93){
    return 'A'
  } else if (score >= 90){
    return 'A-'
  } else if (score >= 88){
    return 'B+'
  } else if (score >= 82){
    return 'B'
  } else if (score >= 80){
    return 'B-'
  } else if (score >= 78){
    return 'C+'
  } else if (score >= 72){
    return 'C'
  } else if (score >= 70){
    return 'C-'
  } else if (score >= 68){
    return 'D+'
  } else if (score > 62){
    return 'D'
  } else if (score >= 60){
    return 'D-'
  } else if (score < 60){
    return 'F'
  }
}

function plusOrMinus(score) {
  const extra = score % 10;
  if (extra <= 2) {
    return '-';
  } else if (extra >= 8) {
    return '+';
  } else {
    return '';
  }
}

function convertScoreToGradeWithPlusAndMinus(score) {
  let grade;
  if (score > 100 || score < 0) {
    return 'INVALID SCORE';
  }
  if (score === 100) {
    return 'A+';
  }
  if (score >= 90) {
    grade = 'A';
  } else if (score >= 80) {
    grade = 'B';
  } else if (score >= 70) {
    grade = 'C';
  } else if (score >= 60) {
    grade = 'D';
  } else if (score >= 0) {
    grade = 'F';
  }

  if (grade !== 'F') {
    grade = grade + plusOrMinus(score);
  }
  return grade;
}

지금 보니 나도 저런 1의 자리 구하는 방식을 이용했는데
저렇게 여러 변수들을 이용할 거라고 생각하지 못했다.. 심지어 함수가 두 개구나..

function PlusAndMinus(score) {
  const result = score % 10
  if (result <= 2){
    return '-'
  } else if (result >= 8){
    return '+'
  } else {
    return ''
  }
}

function convertScoreToGradeWithPlusAndMinus(score) {
  let final;
  if (score === 100){
    return 'A+'
  } else if (score < 0 || score > 100){
    return 'INVALID SCORE'
  } else if (score >= 90){
    final = 'A'
  } else if (score >= 80){
    final = 'B'
  } else if (score >= 70){
    final = 'C'
  } else if (score >= 60){
    final = 'D'
  } else if (score < 60){
    final = 'F'
  }

  if (final !== 'F'){
    grade = final + PlusAndMinus(score)
  } else {
    grade = final
  }

  return grade
}

겨우겨우 마무리 지었다. 59점 0점 2점일 때 F결과를 계속 D-로 도출해서 final 이 F라면 F를 도출하라고 else 를 넣었다.
근데 레퍼런스랑 비교해보니 F학점을 score >= 0 으로 했다. 나는 score < 60.
무슨 차이가 있나.. 한참 생각 중이다. 이유가 뭘까? ㅠ ㅠ




isPythagorean

  • 삼각형의 각 세 변은 무작위로 입력됩니다.
  • 자바스크립트에서 x의 제곱(x squared)을 구하는 방법은 3가지 입니다. 세 가지 방법을 모두 사용해야 합니다.

삼각형이 직각삼각형인지 판별해 내는 문제
난제는 side1,2,3이 어떤 부분이 빗변인지 높이인지 모른다는 것.
따라서 세개의 경우의 수를 구해야 한다

function isPythagorean(side1, side2, side3) {
  if ((side1 * side1 + side2 * side2 ==== side3 *side3) || (side1** + side3** === side2**) || (math.pow(side2,2)+Math.pow(side3,2)===math.pow(side1*2))){
    return true
  } else {
    return false
  }
}

처음에 적었던 건데, 제곱수를 구하는 세가지를 저런식으로 if 구문에 쑤셔넣었다


false 값만 출력이 안되는 일..
그래서 else if 에 ===를 !== 로 바꾸고 (||도 &&로 바꿔봤음) 그랬는데도 어림도 없었다.
그래서 약간 힌트를 얻었는데 약간 터무니 없이 무대뽀로 하던 나를 반성했음

function isPythagorean(side1, side2, side3) {
  const a2 = side1 * side1
  const b2 = side2**2
  const c2 = Math.pow(side3,2)
  if (a2+b2===c2 || a2+c2===b2 || b2+c2===a2) {
    return true
  } else {
    return false
  }

최종 답안




### or || 을 쓰지 않고 두 개의 값으로 or 효과 내는 작업
function or(expression1, expression2) {

  if (!expression1 && !expression2){
    return false
  } else {
    return true
  }
}

난 이렇게 적어서 통과 했는데 , 레퍼런스는 달랐따

function or(expression1, expression2) {
  if (expression1 === true && expression2 === true) {
    return true;
  } else if (expression1 === true && expression2 !== true) {
    return true;
  } else if (expression1 !== true && expression2 === true) {
    return true;
  } else if (expression1 !== true && expression2 !== true) {
    return false;
  }
}

||는 둘다 false인 경우에만 false로 출력되고 문자열은 기본적으로 true 값을 가지고 있던 게 아니었나?
그렇다고 생각해서 매개변수에 !만 붙여서 둘다 false일때만 false, 나머지는 true 라고 적었는데..



addOneSecond

시, 분, 초를 입력받아 1초를 더한 결과값을 특정 형태의 메시지로 리턴해야 합니다.

❌ 실패 1

function addOneSecond(hour, minute, second) {
 if (second === 59){
   minute += 1 
   second === 0
 }   else if (minute === 60){
   hour += 1
   minute === 0 
 } else {
   return '1초 뒤에' + hour + '시' + minute + '분' + second + '초 입니다'
 } 
}

❌ 실패 2

function addOneSecond(hour, minute, second) {
  if (second === 59){
    minute += 1 
    second = 0
  }  else if (minute === 60){
    hour += 1
    minute = 0 
  } else {
    second +=1
    return `1초 뒤에 ${hour}${minute}${second}초 입니다`
  } 
}

function addOneSecond(hour, minute, second) {
  if (second === 59){
    minute += 1
    second = 0
  } else {
    second += 1
  }

  if (minute === 60){
    hour += 1
    minute = 0
  } 

  if (hour === 24){
    hour = 0
  
  }
   return '1초 뒤에 ' + hour + '시 ' + minute + '분 ' + second + '초 입니다'
}

일단 second 부터 차근차근 다 다른 조건문을 만들어줘야했던 거였다
second가 59초일때, minute가 60분일때... 이런 것만 생각하다보니까 이런 일이 일어난 듯 ㅜㅜ




isFalsy

임의의 값을 입력받아 falsy 값인지 여부를 리턴해야 합니다.

function isFalsy(anything){
  return !Boolean(anything)}

0개의 댓글