2021.06.05 Coplit 조건문(2)

양윤호·2021년 6월 8일
0
post-thumbnail

10._followingDay

문제: 요일을 입력받아 해당 요일의 다음 요일을 리턴해야 합니다.

주의:

  1. string 타입을 리턴해야 합니다.
  2. 올바른 요일을 입력받은 경우, 다음 요일을 리턴해야 합니다.
  3. 올바른 요일이 아닌 경우에는 '올바른 요일이 아닙니다' 라는 문구를 리턴해야 합니다.
//본인 작성 코드
function followingDay(day) {
  // TODO: 여기에 코드를 작성합니다.
  if (day === '월요일'){
    return '화요일'
  } else if (day === '화요일'){
    return '수요일'
  } else if (day === '수요일'){
    return '목요일'
  } else if (day === '목요일'){
    return '금요일'
  } else if (day === '금요일'){
    return '토요일'
  } else if (day === '토요일'){
    return '일요일'
  } else if (day === '일요일'){
    return '월요일'
  } else {
    return '올바른 요일이 아닙니다'
  }
}
//Reference 코드
function followingDay(day) {
  if (day === '월요일') {
    return '화요일';
  } else if (day === '화요일') {
    return '수요일';
  } else if (day === '수요일') {
    return '목요일';
  } else if (day === '목요일') {
    return '금요일';
  } else if (day === '금요일') {
    return '토요일';
  } else if (day === '토요일') {
    return '일요일';
  } else if (day === '일요일') {
    return '월요일';
  } else {
    return '올바른 요일이 아닙니다';
  }
}
//처음으로 같은 답을 냄

11._isEitherEvenAndLessThan9

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

  1. EitherEven: 적어도 하나의 수는 짝수이다.
  2. LessThan9: 두 수 모두 9보다 작다.

주의:

  1. boolean 타입으로 리턴해야 합니다.
//본인 작성 코드
function isEitherEvenAndLessThan9(num1, num2) {
  if (num1 < 9 && num2 < 9) {
    if (num1 % 2 === 0 || num2 % 2 === 0) {
      return true
    } else {
      return false
    }
  } else {
    return false
  }
}
//if문 안에 if문을 넣는다는 생각을 해본적이 없어서 공부의 부족함을 느낌, 같이 풀어줬던 Pair가 아니었다면 풀지 못했을 것 같다.
//Reference 코드
function isEitherEvenAndLessThan9(num1, num2) {
  if (num1 < 9 && num2 < 9) {
    if (num1 % 2 === 0 || num2 % 2 === 0) {
      return true;
    }
    return false;
  }
  return false;
}
//else문의 사용정도의 차이가 있음. if와 else문에 대해 조금 더 공부해봐야 할 필요성이 커짐.

12._convertScoreToGrade

문제: 점수를 입력받아 점수에 해당하는 등급을 리턴해야 합니다.

주의:

  1. string 타입을 리턴해야 합니다.
  2. (100 - 90) --> 'A'
  3. (89 - 80) --> 'B'
  4. (79 - 70) --> 'C'
  5. (69 - 60) --> 'D
  6. (59 - 0) --> 'F'
  7. 만약 주어진 점수가 100을 초과하거나 0 미만이라면 문자열 'INVALID SCORE'를 리턴해야 합니다.
//본인 작성 코드
function convertScoreToGrade(score) {
  // TODO: 여기에 코드를 작성합니다.
  if (score > 100 || score < 0){
    return 'INVALID SCORE'}
  if (score === 100 || score >= 90 ) {
    return 'A'
  } else if (score >= 80) {
    return 'B'
  } else if (score >= 70) {
    return 'C'
  } else if (score >= 60) {
    return 'D'
  } else if (score >= 0) {
    return 'F'
  } else {
    return 'INVALID SCORE'
  }
}
//Reference 코드
function convertScoreToGrade(score) {
  let grade;
  if (score > 100 || score < 0) {
    return 'INVALID SCORE';
  }
  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';
  }

  return grade;
}

//처음에 let으로 grade를 선언했기 때문에 마지막에 grade로 반환한 것을 제외하고, 마지막 줄 코드를 빼고는 일치한다. 내가 마지가에 한번 더 'INVALID SCORE'를 넣은 것은 혹시나 다른 값이 나오면 무조건 작동이 안되게 한번 더 강조한 느낌으로 한 것인데 불필요하다는 느낌이 든다. 왜냐하면 JS는 왼쪽에서 오른쪽으로, 위에서 아래로 실행되는데 첫 줄에서 이미 정의를 해버렸기 때문에 마지막 줄이 중복되더라도 별로 의미가 없다고 생각했기 때문이다.

13._convertScoreToGradeWithPlusAndMinus

문제: 점수를 입력받아 해당하는 등급을 리턴해야 합니다.

주의:

  1. string 타입을 리턴해야 합니다.
  2. 각 등급의 최저 점수는 아래와 같습니다. ('F'의 경우 최대 점수를 표기)
    90 이상 --> 'A'
    80 이상 --> 'B'
    70 이상 --> 'C'
    60 이상 --> 'D'
    60 미만 --> 'F'
  3. 만약 주어진 점수가 100을 초과하거나 0 미만인 경우, 문자열 'INVALID SCORE'를 리턴해야 합니다.
  4. 각 등급의 최고 점수보다 7점 이하인 경우, 등급과 함께 '-'를 리턴해야 합니다.
  5. 각 등급의 최저 점수보다 8점 이상인 경우, 등급과 함께 '+'를 리턴해야
    합니다.
//본인 작성 코드
function convertScoreToGradeWithPlusAndMinus(score) {
  // TODO: 여기에 코드를 작성합니다.
  if (score > 100 || score < 0){
    return 'INVALID SCORE'}
  if (score === 100) {
    return 'A+'
  } else if (score >= 98 && score < 100){
    return 'A+'
  } else if (score >= 94 && score < 98) {
    return 'A'
  } else if (score >= 90 && score < 94) {
    return 'A-'
  }  else if (score >= 88 && score < 90) {
    return 'B+'
  }  else if (score >= 84 && score < 88) {
    return 'B'
  }  else if (score >= 80 && score < 84) {
    return 'B-'
  }  else if (score >= 78 && score < 80) {
    return 'C+'
  }  else if (score >= 74 && score < 78) {
    return 'C'
  }  else if (score >= 70 && score < 74) {
    return 'C-'
  }  else if (score >= 68 && score < 70) {
    return 'D+'
  }  else if (score >= 64 && score < 68) {
    return 'D'
  }  else if (score >= 60 && score < 64) {
    return 'D-'
  }  else if (score >= 0 && score < 60) {
    return 'F'
  }  else {
    return 'INVALID SCORE'
  }
}
//처음엔 10의 자리가 9면 A로 고정시켜둔 상태에서 1의 자리 숫자를 구해서 등급을 부여하는 방법을 생각해보았는데 아직 나의 수준으로는 어떻게 해야할지 구상이 되지않아서 이런 저런 방법을 해보다가 일단 하나씩 코딩을 해보았다. 조금 더 공부가 필요한 부분인 것 같다.
//Reference 코드
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;
}

//Reference코드를 보니 내가 생각으로만 했던 방법보다 더욱 쉬운 방법이었다. 일단 '+', ' ', '-'를 일의 자리로 먼저 정의해 놓고 시작하여서 붙이기만 하면 되니까 훨씬 간단하게 생각할 수 있었다. 함수를 작성하라는 말을 들으면 모두 한 함수에 넣어보려고 하는게 그 것 역시 고정관념이 아닐까 생각해보게 되었다.

14._isPythagorean

문제: 삼각형의 세변을 입력받아 직각삼각형(pythagorean)인지 여부를 리턴해야 합니다.

주의:

  1. boolean 타입을 리턴해야 합니다.
  2. 삼각형의 각 세변은 무작위로 입력됩니다.
  3. 자바스크립트에서 x의 제곱(x squared)을 구하는 방법은 3가지 입니다. 세 가지 방법을 모두 사용해야 합니다.
  4. arr.sort 사용은 금지됩니다.
  5. 제곱을 구할 때는 입력으로 주어지는 변수를 그대로 사용해야 합니다.
//본인 작성 코드
function isPythagorean(side1, side2, side3) {
  // TODO: 여기에 코드를 작성합니다.
  if ( Math.pow(side1, 2) + side2 **2 === (side3 * side3)) {
    return true
  } else if ( Math.pow(side1, 2) + side3 **2 === (side2 * side2)) {
    return true
  } else if ( Math.pow(side2, 2) + side3 **2 === (side1 * side1)) {
    return true
  } else {
    return false
  }
}
//먼저 제곱을 구하는 방법을 몰라서 mdn을 통해 알아보고 값을 구해봤다. 하지만 테스트를 통과하지 못하는 부분이 발생했다. 확인해 보니 각 세변은 무작위로 입력된다는 부분을 통과하지 못했다. 처음에는 무작위로 들어간다는 게 무슨 의미인지 몰랐기 때문에 고민해보다, 12, 15, 2라는 값이 들어갈 때 어떤 숫자가 어떤 side로 들어가든지 전부 작동하게라는 의미인 것같아서 경우의 수로 3가지 방법을 이용해서 구하기로 했다.
//Reference 코드
function isPythagorean(side1, side2, side3) {
  const pow1 = side1 * side1;
  const pow2 = side2 ** 2;
  const pow3 = Math.pow(side3, 2);

  if (pow1 === pow2 + pow3 || pow2 === pow1 + pow3 || pow3 === pow1 + pow2) {
    return true;
  }

  return false;
}
//Reference 코드를 보면 처음에 계산식을 선언해두고 각 자리에 대입해서 사용하여서 보기에도 편한 코드가 완성되어 있는 것을 보고 처음부터 if를 넣고 시작하지 말고 좀 더 고민해보고 let, const를 좀 더 활용해보는 방안이 필요하겠다는 점이 절실했다.

15. or

문제: 두 개의 boolean 값을 입력받아 or 연산을 적용한 것과 같은 결과를 리턴해야 합니다.

주의:

  1. boolean 타입을 리턴해야 합니다.
  2. || 연산자 사용은 금지됩니다.
//본인 작성 코드
function or(expression1, expression2) {
  // TODO: 여기에 코드를 작성합니다.
 if ( expression1 === true && expression2 !== true) {
  return true
 } else if (expression2 === true && expression1 !== true) {
  return true
 } else if ( expression1 === true && expression2 === true) {
  return true
 } else {
  return false
 }
}
//Reference 코드
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이거나 둘 다 true인 경우를 정의 했으니 나머지 둘 다 false인 경우는 정의할 필요가 없다고 생각해서 else문으로 마무리 했고, Reference코드의 경우는 전부 정의해놨다. 무슨 차이가 있는지 모르겠다.

16._addOneSecond

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

주의:

  1. string 타입을 리턴해야 합니다.
  2. "1초 뒤에 {hour}시 {minute}분 {second}초 입니다" 형식으로 리턴해야 합니다.
//본인 작성 코드
function addOneSecond(hour, minute, second) {
  // TODO: 여기에 코드를 작성합니다.
  if (second === 59){
    minute += 1;
    second = 0
  } else {
    second = second + 1;
  }
  if (minute === 60) {
    hour = hour + 1;
    minute = 0;
  } 
  if ( hour === 24) {
    hour = 0;
  }
  return '1초 뒤에 '+hour+'시 '+minute+'분 '+second+'초 입니다'
}

//추가 되는 부분이 초이기 때문에 초부터 하나씩 올려가기로 하고 초가 올라간다 -> 분이 올라간다 -> 시가 올라간다. 순으로 코드를 작성해봤다. 
//Reference 코드
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 + '초 입니다';
}
//처음에는 테스트가 실패해서 무엇이 잘 못 됐나 오랫동안 고민했다. 알고보니 초 입니다.에 .을 찍은 것이 문제가 된 것이라 다행이라고 생각했다. 실제로 코드는 거의 같았기 때문에 접근방식에 어느정도 익숙해져 가고 있다고 생각했다.

17._isFalsy

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

주의:

  1. boolean 타입을 리턴해야 합니다.
//본인 작성 코드
function isFalsy(anything) {
  // TODO: 여기에 코드를 작성합니다.
  if (Boolean(anything) === false){
    return true
  } else {
    return false
  } 
}
//코드를 작성함에 있어서 Pair의 도움이 컸다. 나는 if 문으로 값을 전부 넣어야하나 생각하고 있었는데 같이 푸시던 Pair께서 이런 방법으로 풀어보는 것은 어떠냐고 하셔서 작성해보니 이 편이 훨씬 간단한 방법이었다.
//Reference 코드
function isFalsy(anything) {
  return !Boolean(anything);
}
//작성 코드가 틀렸다는 것은 아니라 나는 !Boolean이라는 것은 생각도 못해봤기 때문에 새로운 느낌이었다. 이러는 편이 훨씬 간단하긴 하지만 이제 안 것이므로 별로 아쉽지는 않았고 연산자에 대해 좀 더 공부해봐야겠다는 생각이 들었다.
profile
안녕하세요! 주니어 개발자가 되기 위해 준비중인 양윤호라고 합니다.

0개의 댓글