코린이에서 코른이로..(조건문)

양선우·2022년 12월 20일
0

조건문에 관하여

3일차는 이론 실습
4일차는 페어와 같이 알고리즘 문제를 푸는 시간을 가졌다.
대부분의 문제가 생소하다 보니 어려워서 정답을 보고 싶었지만, 되도록이면 혼자 풀어보고자 하였고
문제를 결국 다 풀긴 했다.
오늘은 문제를 풀었던 것들에 대해서 써내려 가보려 한다.
길이가 긴 관계로 3일차는 조건문 , 4일차는 반복문을 쓰려 한다.

조건문의 기본은 if(조건){ 조건이 성립되면 반환 될 값} return 조건이 성립되지 않았을 때 반환 될 값
더 쉽게 축약할 수도 있다 후에 서술할 수도 있지만
if(조건) => {조건이 성립되면 반환 될 값}``else 조건이 성립되지 않았을때 반활 될 값
으로 간단하게 만들 수 있다.
이를 화살표 함수라고 한다.

Q.문제

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

입력
인자 1 : age
number 타입의 나이 (0 이상의 정수)
출력
boolean 타입을 리턴해야 합니다.

function isOldEnoughToDrink(age) {
  // TODO: 여기에 코드를 작성합니다.
  if (age >=18){ //나이가 18과 같거나 그 이상이면
 return true; // 리턴은 true다
  } else { // 그렇지 않다면
    return false; // 리턴은 false다
  }
}

if(조건문)을 활용한 첫 문제였다.
비교적 쉽게 해결했던 문제였던 것 같다.

Q.문제

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

입력
인자 1 : num
number 타입의 정수 (num >= 1)
출력
string 타입을 리턴해야 합니다.
3으로 나누어 떨어지는 경우, 'Fizz'를 리턴해야 합니다.
5으로 나누어 떨어지는 경우, 'Buzz'를 리턴해야 합니다.
3과 5로 모두 나누어 떨어지는 경우, 'FizzBuzz'를 리턴해야 합니다.
3이나 5로 나누어 떨어지지 않는 경우, 'No FizzBuzz'를 리턴해야 합니다.

function fizzBuzz(num) {
  // TODO: 여기에 코드를 작성합니다.
  if ( num % 3 === 0 && num % 5 === 0){ // 입력값을 3으로 나눈 나머지가 0이면서 5로 나눈값 나머지가 0일때
    return "FizzBuzz"; // return "FizzBuzz"
  } else if (num % 3 === 0){ // 둘다 해당되지 않고 3으로 나눈값이 0이라면
    return "Fizz"; // return "Fizz"
  } else if (num % 5 === 0){ // 둘다 해당되지 않고 5로 나눈 값이 0이라면
    return "Buzz"; //return "Buzz"
  }
  return "No FizzBuzz"; // 모두 해당되지 않는다면  return "No FizzBuzz"
}

이것 또한 조건문을 활용하여 쉽게 풀어냈다.

Q.문제

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

입력
인자 1 : num1
number 타입의 정수
인자 2 : num2
number 타입의 정수
인자 3 : operator
string 타입의 기호 ('+', '-', '*', '/')
출력
number 타입을 리턴해야 합니다.

function miniCalculator(num1, num2, operator) {
  // TODO: 여기에 코드를 작성합니다.
  if (operator === '+'){ // operator값이 + 라면
    return num1 + num2; // num1 과 num2를 합하고
  } else if (operator === '-'){ // operator값이 - 라면
    return num1 - num2; // num1 과 num2를 빼고
  } else if (operator === '*'){ // operator값이 * 라면
    return num1 * num2; // num1 과 num2를 곱하고
  } else if ( operator === '/'){ // operator값이 / 라면
    return num1 / num2; // num1 과 num2를 나누고
  }
  return false; // 그렇지 않다면 false
}

마찬가지로 조건문과 비교 연산자를 활용하였다.

Q.문제

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

입력
인자 1 : score
number 타입의 정수
출력
string 타입을 리턴해야 합니다.
(100 - 90) --> 'A'
(89 - 80) --> 'B'
(79 - 70) --> 'C'
(69 - 60) --> 'D'
(59 - 0) --> 'F'

function convertScoreToGrade(score) {
  // TODO: 여기에 코드를 작성합니다.
  if (score > 100 || score < 0){
    return 'INVALID SCORE';
  }else if (score >= 90){
    return 'A';
  }else if (score >= 80){
    return 'B';
  }else if (score >= 70){
    return 'C';
  }else if (score >= 60){
    return 'D';
  }return 'F';
}

조건문을 많이 걸었지만 비교적 쉽게 해결하였고 비교 연산자를 활용하였다.

Q.문제

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

입력
인자 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) {
  // TODO: 여기에 코드를 작성합니다.
   if(name.length<=10 && age >= 21){ // 이름의 길이가 10과 같거나 이하고, 나이가 21과 같거나 이상이면
  return `Welcome, ${name}!`; // 출력값
} else if (name.length<=10 && age < 21){ // 이름의 길이가 10과 같거나 이하고, 나이가 21보다 어리다면
  return `Go home, ${name}!`; // 출력값
} return false; // 그 외엔 false
}

Q.문제

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

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

function convertScoreToGradeWithPlusAndMinus(score) {
  // TODO: 여기에 코드를 작성합니다.
  if(score > 100 || score < 0){
    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 >= 83){
    return 'B';
  } else if(score >= 80){
    return 'B-';
  } else if( score >=78){
    return 'C+';
  } else if(score >= 73){
    return 'C';
  } else if(score >= 70){
    return 'C-';
  } else if( score >=68){
    return 'D+';
  } else if(score >= 63){
    return 'D';
  } else if(score >= 60){
    return 'D-';
    

} return 'F';
}

푸는 방법은 있지만.. 몰라서 노가다 했던 문제다..ㅠㅠ

Q.문제

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

입력
인자 1 : hour
number 타입의 정수 (0 <= hour && hour < 24)
인자 2 : minute
number 타입의 정수 (0 <= minute && minute < 60)
인자 3 : second
number 타입의 정수 (0 <= second && second < 60)
출력
string 타입을 리턴해야 합니다.
1초 뒤에 {hour}시 {minute}분 {second}초 입니다 형식으로 리턴해야 합니다.

function addOneSecond(hour, minute, second) {
  // TODO: 여기에 코드를 작성합니다.
  if(second === 59){
    minute = minute + 1;
    second = 0;
} else {
    second = second + 1;
} if (minute === 60 ){
    minute = 0;
    hour = hour + 1;

} if (hour === 24 ){
    hour = 0;
}
return `1초 뒤에 ${hour}${minute}${second}초 입니다`;
}

많이 헤맸었던 문제다. 내 방식대로 풀었지만,예상 답안과는 달랐었다.

Q.문제

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

입력
인자 1 : word1
string 타입의 문자열
word1.length는 10 이하
인자 2 : word2
string 타입의 문자열
word2.length는 10 이하
인자 3 : word3
string 타입의 문자열
word3.length는 10 이하

function findShortestOfThreeWords(word1, word2, word3) {
  // TODO: 여기에 코드를 작성합니다.
  let w1 = word1.length;
  let w2 = word2.length;
  let w3 = word3.length;
  if(w1 === w2 && w1 === w3){
    return word1;
  }
if(Math.min(w1,w2,w3) === w1){
  return word1;
} else if(Math.min(w1,w2,w3) === w2){
return  word2;
} else if(Math.min(w1,w2,w3) === w3){
return word3;
}
}

이것 또한 지정해서 비교 연산자로 비교해가며 문제를 풀었다.

Q.문제

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

입력
인자 1 : name
string 타입의 이름
인자 2 : period
number 타입의 미접속 시간 (분 단위)
출력
string 타입을 리턴해야 합니다.
미접속 시간이 1시간 보다 적을 경우, 분 단위로 표기합니다.
미접속 시간이 1시간 보다 크고 24시간 보다 적을 경우, 시간 단위로 내림처리하여 표기합니다.
미접속 시간이 24시간 보다 클 경우, 일 단위로 내림처리하여 표기합니다.

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

함수를 지정해서 시 분 초를 나눴어야 했는데, 그냥 조건문 자체에 집어 넣었다..
풀이를 보니 지정하는 거였고, 그게 재사용하기에 편할 것 같아 다음부턴 그렇게 할 생각이다.

조건문으로 푼 알고리즘은 여기까지다.
비교적 쉬웠지만 어려웠던 부분도 있었다.

profile
코딩이 하고 싶은 사람

0개의 댓글