조건문 문제풀면서 느낀 것

1. 조건문의 기본 형태

function whatIsIf(parameter) {
  if (condition) {
    return true
  } else {
    return false
  }
}

2. 조건식에 들어가는 비교 연산자

링크 : https://www.codingfactory.net/10323

3. 함수 파라미터에 입력된 수가 짝수인지 홀수인지 판별할 때

새롭게 알게 된 연산자 : % 연산자

4. 조건식에 쓰이는 논리 연산자

하단 링크

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/%EB%85%BC%EB%A6%AC_%EC%97%B0%EC%82%B0%EC%9E%90(Logical_Operators)

5. fizzbuzz 문제

중고등학교 때 배웠던 집합 시간에 해봤던 벤 다이어 그램을 떠올린다.

조건문은 맨 윗줄에서부터 시작해 참이면 해당 코드블럭이 실행되고 return 할 시 아래 코드들은 실행되지 않고 그대로 빠져나오게 된다.

  1. 여기서 두 가지 조건을 만족하게 만드는 교집합 부분을 먼저 처리해 주고
  2. 교집합 옆에 여집합? 사이드 부분을 처리하게 하고
  3. 이도 저도 아닌 바깥 부분을 처리하게 하고

이러한 어떤 공통된 것을 찾는 문제를 해결할 때는 위와 같은 생각을 떠올려야 겠다.

6. 특정 달을 입력 받으면 그 달의 마지막 날짜를 리턴하기

1월부터 12월까지 끝에 마지막 날짜가 며칠인지 공책에 적어보았다.

끝 날짜가 불규칙하게 반복되어서 달을 홀수와 짝수로 분기를 하되 논리 연산자와 비교 연산자를 사용해서 가령 홀수 달이면서 8 미만인 달은 31을 돌려주고, 나머지 홀수 달은 30을 돌려주게 하는 식으로 진행해 보았다.

7. isEitherEvenAndLessThan9

두 개 수를 입력받아 아래의 2가지 조건을 모두 만족하는지 검사합니다.

  1. EitherEven: 적어도 하나의 수는 짝수이다.
  2. LessThan9: 두 수 모두 9보다 작다.

내가 처음에 푼 방법은 이중 if 문이였지만 이것은 다른 사람들이 내 코드를 봤을 때 좋은 방법은 아니라 했다.

좋은 방법은 조건을 하나 하나씩 쪼개서 만약 이러이러 했을 때 이 변수는 뭐가 된다 정도만 해놨다가, 마지막에 조건을 모두 만족한다면, true 를 리턴하게 하는 등의 방식을 스스로 해결해 보았다.

8. convertScoreToGradeWithPlusAndMinus

매개변수 score 를 10으로 나눈 몫을 10의 자리 수 라고 정의해 놓고 시작했는데, 사실 여기에서 오류가 났다. 가령 나는 9를 얻어서 십의 자리수가 9이면 A를 주고 싶었던 거였는데 실제로는 98 나누기 10 하면 9.8 이 나오니까 의도대로 되지 않았던 거 같다.

어떻게 하면 저 뒤에 .8 을 날릴 수 있을까 찾아보다가 자바스크립트에서 숫자를 정수형으로 바꿔주는 함수가 있다는 것을 알게 되었다.

let tensDigit = parseInt(score / 10)

자바스크립트에는 내림 역할을 하는 내장함수도 있는거 같아서 그거도 쓰면 될거 같다.

각 조건식에 조건에 맞게 비교 연산자와 논리 연산자 등을 적절히 잘 사용해서 작성해야 했다.

9. 피타고라스 정리

너무 오랜만에 보는 용어라서 인터넷 검색을 먼저 해봤다.

어떤 수를 제곱을 하는 방법은 총 3가지가 있다.

let squaredSide1 = Math.pow(side1, 2)
let squaredSide2 = side2 ** 2
let squaredSide3 = side3 * side3

10. 시 , 분, 초를 입력받아 1초를 더한 결과값을 특정 형태의 메시지로 리턴하는 함수

바로 키보드에 손부터 올려놓기보다 어떻게 해야 할까를 잘 고민해야 했다. 세가지 조건인 시, 분, 초 가 모두 변화하는 현재 문제에서 가장 “교집합 적인” 조건식을 먼저 작성했다.

벤 다이어 그램의 제일 하얀색 부분의 조건을 먼저 충족시켜 주고 그리고 그 옆의 교집합, 마지막으로는 검정색 바깥부분을 돌려주게끔 조건식을 작성해 나가는 느낌이구나 라는 것을 알았다.

그리고 문자열을 세련되게 표시하기 위해 기존처럼 문자열과 + , 그리고 변수 등을 나열하는 것이 아니라,

;`1초 뒤에 ${hour}${minute}${second}초 입니다.`

처럼 백틱과 $ 기호 등을 적절히 사용하는 것도 알게 되었다.

11. NaN (Not a Number)

NaN 은 어떤 변수와 비교하면 안되는구나. 대신 isNaN() 이라는 함수로 true / false 를 판별한다는 것을 알게 되었다.

하단 링크 참조

https://appletree.or.kr/blog/web-development/javascript/javascript%EC%9D%98-%EC%9D%B4%EB%9F%B0-%EC%A0%90%EC%9D%B4-%EB%92%A4%ED%86%B5%EC%88%98%EB%A5%BC-%EB%95%8C%EB%A6%AC%EB%8D%94%EB%9D%BC/


Written by@[DotoriMook]
프론트엔드 주니어 개발자 도토리묵의 기술개발 블로그 입니다.

GitHubMediumTwitterFacebook