CodeStates/JavaScript

Section1 / Unit5 : JS 조건문

yeeendy 2023. 4. 19. 15:15

코드스테이츠 수업 7일차!

 

JS 조건문을 배웠고 조건문 코플릿을 풀어보았다.

어찌저찌 다 풀긴했지만 참조를 활용하여 다른 방식도 익혀보는 게 좋겠다.

 

 

converScoreToGradeWithPlusAndMinus

문제

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

출력

  • string 타입을 리턴해야 합니다.
  • 각 등급의 최저 점수는 아래와 같습니다. ('F'의 경우 최대 점수를 표기)
  • 90 이상 --> 'A'
  • 80 이상 --> 'B'
  • 70 이상 --> 'C'
  • 60 이상 --> 'D'
  • 60 미만 --> 'F'

주의 사항

  • 만약 주어진 점수가 100을 초과하거나 0 미만인 경우, 문자열 'INVALID SCORE'를 리턴해야 합니다.
  • 각 등급의 최고 점수보다 7점 이하인 경우, 등급과 함께 '-'를 리턴해야 합니다. (단, 93점의 경우에는 A를 리턴해야 합니다.)
  • 각 등급의 최저 점수보다 8점 이상인 경우, 등급과 함께 '+'를 리턴해야 합니다.

입출력 예시

let output = convertScoreToGradeWithPlusAndMinus(91);
console.log(output); // --> 'A-'

나의 풀이 

-> 일일이 세분화하여 점수마다 코드를 쳤다

function convertScoreToGradeWithPlusAndMinus(score) {
  // TODO: 여기에 코드를 작성합니다.
  if(score<=100 && score >= 98){return 'A+';}
  if(score<98 && score >=93){return 'A';}
  if(score<93 && score >=90){return 'A-';}
  if(score<90 && score >= 88){return 'B+';}
  if(score<88 && score >=83){return 'B';}
  if(score<83 && score >=80){return 'B-';}
  if(score<80 && score >= 78){return 'C+';}
  if(score<78 && score >=73){return 'C';}
  if(score<73 && score >=70){return 'C-';}
  if(score<70 && score >= 68){return 'D+';}
  if(score<68 && score >= 63){return 'D';}
  if(score<63 && score >= 60){return 'D-';}
  if(score<60 && score >= 0){return 'F';}
  else{return 'INVALID SCORE';}
}

 


 

Reference

-> A, B, C, D, F 구간을 큰 틀로 두고

->score를 10으로 나눈 나머지를 활용하여 +, -를 추가로 붙여 출력되게끔 한 코드

//처음에 참조를 보고 바로 이해되는 코드는 아니었지만 나눠서 분석하다 보니 이해가 되었다.

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;
}

addOneSecond

문제

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

출력

  • string 타입을 리턴해야 합니다.
  • 1초 뒤에 {hour}시 {minute}분 {second}초 입니다 형식으로 리턴해야 합니다.

입출력 예시

let output = addOneSecond(14, 17, 59);
console.log(output); // --> '1초 뒤에 14시 18분 0초 입니다'

output = addOneSecond(1, 59, 59);
console.log(output); // --> '1초 뒤에 2시 0분 0초 입니다'

output = addOneSecond(3, 24, 29);
console.log(output); // --> '1초 뒤에 3시 24분 30초가 입니다'

output = addOneSecond(23, 59, 59);
console.log(output); // --> '1초 뒤에 0시 0분 0초 입니다'

나의 풀이

->최대 59분 59초 미만 구간, 59분 미만이지만 59초 구간, 59분 59초 구간, 23시 59분 59초 구간으로 나눴다

function addOneSecond(hour, minute, second) {
  // TODO: 여기에 코드를 작성합니다.
  if(hour < 23 && 0 <= minute && minute < 59 && 0 <= second && second < 59){
    return `1초 뒤에 ${hour}시 ${minute}분 ${second+1}초 입니다`;
  }else if(hour < 23 && 0 <= minute && minute < 59 && second ===59){
    return `1초 뒤에 ${hour}시 ${minute+1}분 0초 입니다`;
  }else if(hour < 23 && minute === 59 && second === 59){
    return `1초 뒤에 ${hour+1}시 0분 0초 입니다`;
  }else if(hour === 23 && minute === 59 && second === 59){
    return `1초 뒤에 0시 0분 0초 입니다`;
  }
}

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 + '초 입니다';
}

makeLastSeenMsg

문제

사용자의 이름과 미접속 시간(분)을 입력받아 조건별로 다른 메세지를 리턴해야 합니다.

출력

  • string 타입을 리턴해야 합니다.
  • 미접속 시간이 1시간 보다 적을 경우, 분 단위로 표기합니다.
  • 미접속 시간이 1시간 보다 크고 24시간 보다 적을 경우, 시간 단위로 내림처리하여 표기합니다.
  • 미접속 시간이 24시간 보다 클 경우, 일 단위로 내림처리하여 표기합니다.

입출력 예시

let output = makeLastSeenMsg('mike', 40);
console.log(output); // --> 'mike: 40분 전에 접속함'

output = makeLastSeenMsg('mike', 121);
console.log(output); // --> 'mike: 2시간 전에 접속함'

output = makeLastSeenMsg('mike', 2887);
console.log(output); // --> 'mike: 2일 전에 접속함'

나의 풀이

->일, 시간 은 나머지를 활용하여 출력되게끔 작성하였다

function makeLastSeenMsg(name, period) {
  // TODO: 여기에 코드를 작성합니다.
  let day = Math.floor(period / (60*24));
  let hour = Math.floor(period / 60);
  let min = period;

  if(period >= 24*60){
    return `${name}: ${day}일 전에 접속함`;
  }else if(period >= 60 && period < 24*60){
    return `${name}: ${hour}시간 전에 접속함`;
  }else if(period < 60){
    return `${name}: ${min}분 전에 접속함`;
  }
}

Reference

-> 약간 비슷하지만 다른 작성법

function makeLastSeenMsg(name, period) {
  // TODO: 여기에 코드를 작성합니다.
  const day = 60 * 24;
  const hour = 60;
  if (period >= day) {
    return `${name}: ${Math.floor(period / day)}일 전에 접속함`;
  } else if (period >= hour) {
    return `${name}: ${Math.floor(period / hour)}시간 전에 접속함`;
  } else {
    return `${name}: ${period}분 전에 접속함`;
  }
}