[C/F TIL] 7일차 - JavaScript 조건문, 기초 문제 풀이

mu-eng·2023년 4월 19일
1

TIL (in boost camp)

목록 보기
8/53
post-thumbnail

Code States
Front-end boost camp
Today
I
Learned

☀️ 아니 오늘 날씨 왜이렇게 좋아?! 4월 19일 조건문 시작 >_<


☀️ IF문

  • 가장 대표적인 조건문
  • 주어진 조건식의 참(true)/ 거짓(false)여부에 따라 실행이 결정됨
  • if 뒤에 소괄호에 조건식을 넣으면, 조건식이 참으로 평가된 경우 코드블럭 내부의 코드가 실행됨
  • 조건식을 상황에 맞게 작성하면 특정 상황에만 코드가 실행
동치연산자 ===, !==
비교연산자 >, <, >=, <=
논리연산자 &&, ||
부정연산자 !

☀️ else문

  • 조건식이 true일 때만 코드가 실행되는 것은 if문, 조건이 true일 때와 false일 때 각각 다른 코드가 실행되도록 하기 위해서는? else문!
let num = 5;
if (num % 2 === 0) {
	console.log('짝수입니다.');
} else {
	console.log('홀수입니다.'); // '홀수입니다.'
}
  • 독립적으로 사용 할 수 없음, if문 바로 뒤에 작성!
  • 조건을 더 추가 하고 싶다면? else if
let name = 'kimcoding';
let course = 'seb be'

if(name === 'kimcoding' && course === 'seb fe') {
	console.log('정보가 일치합니다.')
} else if (name === 'kimcoding' && course !== 'seb fe') {
	console.log('코스를 확인하세요.') // '코스를 확인하세요.'
} else {
	console.log('일치하지 않는 정보입니다.')
}
  • if문과 else문은 두 번 이상 사용할 수 없지만 else if문은 여러번 사용 가능
let age = 15;
if (age < 8) {
  console.log('미취학아동입니다.');
} else if (age >= 8 && age < 14) {
  console.log('초등학생입니다.');
} else if (age >= 14 && age < 17) {
  console.log('중학생입니다.'); // '중학생입니다.'
} else if (age >= 17 && age < 20) {
  console.log('고등학생입니다.');
} else {
  console.log('성인입니다.');
}
  • 삼항 조건 연산자 : if문과 else문을 삼항 조건 연산자로 바꿔 쓸 수 있다./ 실행할 코드가 간단하다면 이를 쓰는 것이 더욱 편리하고 가독성이 좋음
let num = 5;
num % 2 === 0 ? console.log('짝수') : console.log('홀수'); // '홀수'

==> 조건식을 먼저 작성, '?'를 입력, '?'뒤로 참/거짓일 때 실행할 코드 각각 입력, 코드는 ':'로 구분

==> 위와 같은 코드 예시)
let num = 5;
if (num % 2 === 0) {
	console.log('짝수입니다.');
} else {
	console.log('홀수입니다.'); // '홀수입니다.'
}

☀️ 조건문 문제풀기

  • 1번 : 나이를 입력받아 술을 마실 수 있는지 (18세 이상) 여부를 티런하시오. / 인자1: age - number 타입의 나이 (0 이상의 정수)/ 출력 : boolean 타입을 리턴해야함
function isOldEnoughToDrink(age) {
    if (age >= 18) {
        return true;
    } else {
        return false;
    }
}
  • 2번 : 수를 입력받아 3 그리고 5로 각각 나눈 뒤 나머지 값에 따라 알맞은 메시지를 리턴해야 합니다. / 입력1 : num - number타입의 정수 (num >= 1) / 출력 : string 타입을 리턴해야 합니다. / 3으로 나누어 떨어지는 경우, 'Fizz'를 리턴해야 합니다. / 5으로 나누어 떨어지는 경우, 'Buzz'를 리턴해야 합니다. / 3과 5로 모두 나누어 떨어지는 경우, 'FizzBuzz'를 리턴해야 합니다. / 3이나 5로 나누어 떨어지지 않는 경우, 'No FizzBuzz'를 리턴해야 합니다.
function fizzBuzz(num) {
    if (num % 3 === 0 && num % 5 === 0) {
      return "FizzBuzz";
    } else if (num % 3 === 0) {
        return "Fizz";
    } else if (num % 5 === 0) {
        return "Buzz";
      }
    if (num % 3 !== 0 && num % 5 !==0) {
      return "No FizzBuzz";
    }
}

-- 알아야 할 정보 : 나머지 값 구하기 %

  • 3번 : 두 개의 수와 기호를 입력받아 알맞게 계산한 값을 리턴해야 합니다. / 인자 1 : num1 - number 타입의 정수, 인자 2 : num2 - number 타입의 정수, 인자 3 : operator - string 타입의 기호 ('+', '-', '*', '/')
function miniCalculator(num1, num2, operator) {
  if (operator === "+") {
    return num1 + num2;
  } else if (operator === "-") {
    return num1 - num2;
  } else if (operator == "*") {
    return num1 * num2;
  } else {
    return num1 / num2;
  }
}
  • 4번 : 점수를 입력받아 점수에 해당하는 등급을 리턴해야 합니다. / 인자 1 : score - number 타입의 정수 / 출력 : string 타입을 리턴해야 합니다. (100 - 90) --> 'A', (89 - 80) --> 'B', (79 - 70) --> 'C', (69 - 60) --> 'D', (59 - 0) --> 'F' / 주의사항: 만약 주어진 점수가 100을 초과하거나 0 미만이라면 문자열 INVALID SCORE를 리턴해야 합니다.
// 1) && 를 쓰고, 2) 2중 중첩문을 사용하고 싶었음

function convertScoreToGrade(score) {
  if (score <= 100 && score > 0) {
    if (score < 60) {
      return "F";
    } else if (score < 70) {
      return "D";
    } else if (score < 80) {
      return "C";
    } else if (score < 90) {
      return "B";
    } else {
      return "A";
    }
  }
  return "INVALID SCORE";
}
// 1) || 를 쓰고도 해결 가능

function convertScoreToGrade(score) {
  if (score > 100 || score < 0) {
    return "INVALID SCORE";
  }
  if (score < 60) {
    return "F";
  } else if (score < 70) {
    return "D";
  } else if (score < 80) {
    return "C";
  } else if (score < 90) {
    return "B";
  } else {
    return "A";
  }
}
  • 5번 : 이름과 나이를 입력받아 나이별로 다른 메시지를 리턴해야 합니다. / 인자1: name, 인자2: age / 출력 : string 타입을 리턴해야 합니다. 이름이 Adrian이고, 나이가 21살 이상이면, Welcome, Adrian! 을 리턴해야 합니다. 이름이 John이고, 만일 21살보다 적으면, Go home, John!을 리턴해야 합니다.
function checkAge(name, age) {
  if (age > 20) {
    return `Welcome, ${name}!`;
  } else {
    return `Go home, ${name}!`;
  }
}
  • 6번 : 점수를 입력받아 점수에 해당하는 등급을 리턴해야 합니다.
    -- 인자1 : score - number 타입의 정수 / 출력 : 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) {
  let grade;

  if (score <= 100 && score >= 0) {

    if (score < 60) {
      return "F";
    }

    if (score === 100) {
      return "A+";
    }

    if (score < 70) {
      grade = "D";
    } else if (score < 80) {
      grade = "C";
    } else if (score < 90) {
      grade = "B";
    } else {
      grade = "A";
    }

    if (score % 10 <= 2) {
      return grade + "-";
    } else if (score % 10 >= 8) {
      return grade + "+";
    } else {
      return grade;
    }
  }
  return "INVALID SCORE";
}
  • 7번 : 시, 분, 초를 입력받아 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) {

  if (hour === 23 && minute === 59 && second === 59) {
    return `1초 뒤에 0시 0분 0초 입니다`
  }

  if (minute !== 59 && second === 59) {
    return `1초 뒤에 ${hour}${minute + 1}분 0초 입니다`;
  } else if (minute === 59 && second === 59) {
    return `1초 뒤에 ${hour + 1}시 0분 0초 입니다`;
  } else {
    return `1초 뒤에 ${hour}${minute}${second + 1}초 입니다`;
  }
}
// 레퍼런스 코드 : 이게 더 깔끔하긴 하다. ㅠㅠ
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 + '초 입니다';
}
  • 8번 : 차례대로 문자열 3개를 입력받아, 가장 짧은 문자열을 리턴해야 합니다.
    -- 인자1, 2, 3 = word1, 2, 3
    -- 출력 : string 타입 리턴
    -- 주의 : 동일한 길이의 문자열 중에서는 처음 입력받은 문자열을 리턴
function findShortestOfThreeWords(word1, word2, word3) {
  let shortestWord = word1;

  if (word1.length > word2.length) {
    shortestWord = word2;
    if (word2.length > word3.length) {
      shortestWord = word3;
    }
  } else if (word1.length > word3.length) {
      shortestWord = word3;
  }
  
  return shortestWord;
}
  • 9번 : 사용자의 이름과 미접속 시간(분)을 입력받아 조건별로 다른 메세지를 리턴해야 합니다.
    -- 입력 : 인자1 - name - string타입 / 인자2 : period - number타입(분 단위)
    -- 출력 : string 타입을 리턴해야 합니다. / 미접속 시간이 1시간 보다 적을 경우, 분 단위로 표기합니다. / 미접속 시간이 1시간 보다 크고 24시간 보다 적을 경우, 시간 단위로 내림처리하여 표기합니다. / 미접속 시간이 24시간 보다 클 경우, 일 단위로 내림처리하여 표기합니다.
// 내 코드 
function makeLastSeenMsg(name, period) {
  let hour = 60; // const 로 변경 해야함
  let day = 60 * 24;

  if (period < hour) {
    return name + `: ` + period + `분 전에 접속함`;
  } else if (period >= hour && period < day) {
    return name + `: ` + Math.floor(period / hour) + `시간 전에 접속함`;
  } else { // Math.floor(num/num2) : num를 num2로 나눈 몫 구하기 or 나눠서 내림처리
    return name + `: ` + Math.floor(period / day) + `일 전에 접속함`;
  }
}
// 답안 코드
function makeLastSeenMsg(name, period) {
  
  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}분 전에 접속함`;
  }
}

☀️ 7일차 수업을 마치며...

일단 업로드 먼저 해놓고 코플릿으로 푼 9개의 문제를 리뷰할 것이다. 이따 저녁에. ㅎㅎ 어렵다. 어렵고! 어려운데 아직 할만하다. 반복문이랑 반복문+조건문이 어려울 것 같아서 8일차 TIL을 땡겨서 반복문 먼저 이론정리할 것임.

또,

오늘 방과후 저녁의 목표는 코플릿 문제 코드 정리/ 깃허브 손에 익히고 프로그래머스 (아주 쉬운) 알고리즘 풀이 1개 업로드하기 => 금주 내로 시작하기

profile
[무엥일기] 무엥,,, 내가 머쨍이 개발자가 될 수 이쓰까,,,

0개의 댓글