코로 넘어져도 헤딩만 하면 그만

조건문 9문항 본문

CODE STATES 44/코플릿 문제풀이

조건문 9문항

꼬드리 2023. 3. 5. 22:02

1. isOldEnoughToDrink

문제- 나이를 입력받아 술을 마실 수 있는지(18세 이상) 여부를 리턴해야 합니다.

조건- return boolean 타입.

function isOldEnoughToDrink(age) {
  // if(age>=18){
  //   return true;  
  // } else {
  //   return false;
  // }
  return (age>=18 ? true : false)
}

처음 풀 때는 주석 내부와 같이 정직한 조건문으로 풀었지만, 삼항조건연산자를 써보고 싶어서 아래와 같이 수정했다.

 

 

 

2. fizzBuzz

문제: 수를 입력받아 3 그리고 5로 각각 나눈 뒤 나머지 값에 따라 알맞은 메시지를 리턴해야 합니다.

조건:

  • string 타입을 리턴해야 합니다.
  • 3으로 나누어 떨어지는 경우, 'Fizz'를 리턴해야 합니다.
  • 5으로 나누어 떨어지는 경우, 'Buzz'를 리턴해야 합니다.
  • 3과 5로 모두 나누어 떨어지는 경우, 'FizzBuzz'를 리턴해야 합니다.
  • 3이나 5로 나누어 떨어지지 않는 경우, 'No FizzBuzz'를 리턴해야 합니다.
function fizzBuzz(num) {
  //3과 5로 나눈다. 나머지값에 따라 나눈다.
 if(num%3===0 && num%5===0){
    return 'FizzBuzz'
  } else if (num %3 === 0) {
    return 'Fizz'
  } else if(num%5 === 0){
  return 'Buzz'
  } else {
    return 'No FizzBuzz'
  } 
}

 

 

3. miniCalculator

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

조건:

  • number 타입을 리턴해야 합니다.
function miniCalculator(num1, num2, operator) {
  // TODO: 여기에 코드를 작성합니다.
  // 각각의 연산 조건에 따라 나누어야 함.
  if (operator === '+'){
    return num1 + num2;
  } else if (operator === '-'){
    return num1 - num2;
  } else if (operator === '*') {
    return num1 * num2;
  } else {
    return num1/num2;
  }
}

 

4. convertScoreToGrade

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

조건:

  • string 타입을 리턴해야 합니다.
  • (100 - 90) --> 'A'
  • (89 - 80) --> 'B'
  • (79 - 70) --> 'C'
  • (69 - 60) --> 'D'
  • (59 - 0) --> 'F'
  • 만약 주어진 점수가 100을 초과하거나 0 미만이라면 문자열 INVALID SCORE를 리턴해야 합니다.
function convertScoreToGrade(score) {
  let grade;
 if (score>100 || score <0) {
   return 'INVALID SCORE'
 } else if (score <=100 && score >=90) {
   grade= 'A'
 } else if (score <=89 && score >=80) {
   grade ='B'
 }
 else if (score <=79 && score >=70) {
   grade= 'C'
 }
 else if (score <=69 && score >=60) {
   grade= 'D'
 }
 else if (score <=59 && score >=0) {
   grade= 'F'
 }
 return grade;
}

처음에 grade라는 변수를 선언 안 하고 그냥 줄마다 return 시켰는데, 난잡해보여서 grade를 생성한 뒤 바꿔주었다. 

 

05. checkAge

문제: 이름과 나이를 입력받아 나이별로 다른 메시지를 리턴해야 합니다.

조건:

인자 1 : name

  • string 타입의 알파벳 문자열
  • name.length는 10 이하

인자 2 : age

  • number 타입의 나이 (0보다 크고 100보다 작은 자연수)

출력

  • string 타입을 리턴해야 합니다.
  • 이름이 Adrian이고, 나이가 21살 이상이면, Welcome, Adrian! 을 리턴해야 합니다
  • 이름이 John이고, 만일 21살보다 적으면, Go home, John!을 리턴해야 합니다.
function checkAge(name, age) {
 if (age >= 21) {
   return `Welcome, ${name}!`
 } else {
   return `Go home, ${name}!`
}
}

if로 두 가지 조건으로 구분한 뒤, 백틱을 사용하여 하나의 문장 안에 변수를 넣어준다. 좀 더 명확하게 하기 위해서는 else if로 사용하여 age <21 조건도 붙여주는 게 좋을 듯 하다.

 

 

06_(advanced)convertScoreToGradeWithPlusAndMinus

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

조건:

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

주의 사항

  • 만약 주어진 점수가 100을 초과하거나 0 미만인 경우, 문자열 'INVALID SCORE'를 리턴해야 합니다.
  • 각 등급의 최고 점수보다 7점 이하인 경우, 등급과 함께 '-'를 리턴해야 합니다. (단, 93점의 경우에는 A를 리턴해야 합니다.)
  • 각 등급의 최저 점수보다 8점 이상인 경우, 등급과 함께 '+'를 리턴해야 합니다.
  • F+ 와 F- 는 존재하지 않습니다.
function convertScoreToGradeWithPlusAndMinus(score) {
  function plusOrMinus(score) {
    const extra = score % 10;
    if (extra <= 2) {
      return '-';
    } else if (extra >= 8) {
      return '+';
    } else {
      return '';
    }
  }

  if (score > 100 || score < 0) {
    return 'INVALID SCORE';
  }
  if (score === 100) {
    return 'A+';
  }
  let grade;
  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 < 60) {
    grade = 'F';
  }
  if (grade !== 'F') {
    return grade + plusOrMinus(score);
  } else {
    return grade;
  }
}

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

+와 -를 가름하는 함수를 하나 만들고, 나머지의 숫자로 if문을 이용하여 나눠준다. 이후 변수 grade를 만들어 등급을 매긴 뒤 F등급이 아닌 경우에만 +와 -를 붙여 완성해준다. 

 

 

7. addOneSecond

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

조건:

  • string 타입을 리턴해야 합니다.
  • 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}초 입니다`;
}
let output = addOneSecond(13, 15, 32);
console.log(output); // --> '1초 뒤에 2시 0분 0초 입니다'

가장 먼저 바뀌는 초를 기준으로 두고 변화의 구간에서 끊어주는 if문을 작성한다.

 

 

8. (advanced)findShortestOfThreeWords

문제: 차례대로 문자열 3개를 입력받아, 가장 짧은 문자열을 리턴해야 합니다.

조건:

  • string 타입을 리턴해야 합니다.
  • 동일한 길이의 문자열 중에서는 처음 입력받은 문자열을 리턴해야 합니다.
function findShortestOfThreeWords(word1, word2, word3) {
  // 길이 짧은 것을 리턴한다.
  //length로 서로 길이를 비교한다.
  //동일한 길이의 문자열 중에서는 처음 입력받은 문자열을 리턴
  let shortWord = word1;
  if (word1.length > word2.length) {
    shortWord = word2;
    if (word2.length > word3.length) {
      shortWord = word3;
    }
  } else {
    if (word1.length > word3.length) {
      shortWord = word3;
    }
    
  }return shortWord;
}

가장 짧은 문자열을 shortWord라는 변수로 두고, word1부터 차례로 길이를 비교해가며 걸러낸다.

 

 

9. makeLastSeenMsg ★

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

조건

  • string 타입을 리턴해야 합니다.
  • 미접속 시간이 1시간 보다 적을 경우, 분 단위로 표기합니다.
  • 미접속 시간이 1시간 보다 크고 24시간 보다 적을 경우, 시간 단위로 내림처리하여 표기합니다.
  • 미접속 시간이 24시간 보다 클 경우, 일 단위로 내림처리하여 표기합니다.
function makeLastSeenMsg(name, period) {
  // 시간에 따른 3가지 나눔 조건
  //1시간, 24시간에서 분기
  let time;
  if (period < 60) {
    time = period + `분`;
  } else if (period > 60 && period < 24 * 60) {
    time = Math.floor(period / 60) + `시간`;
  } else if (period > 24 * 60) {
    time = Math.floor(period / 1440) + `일`;
  }
  return name + ': ' + time + ` 전에 접속함`;
}

output = makeLastSeenMsg('mike', 5760);
console.log(output);

작성해서 풀었던 코드.

이보다는 원본 레퍼런스가 더 깔끔하다. day와 hour을 변수로 두고 처리해야겠다.

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}분 전에 접속함`;
  }
}

 

 

'CODE STATES 44 > 코플릿 문제풀이' 카테고리의 다른 글

알고리즘 재귀 문제 복습  (0) 2023.04.12
변수와 타입  (0) 2023.02.22
Comments