코로 넘어져도 헤딩만 하면 그만
조건문 9문항 본문
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 |