[CodeStates-Section1]U3.JavaScript 기초 제어문

hameee·2022년 10월 25일
0

CodeStates_Frontend_42기

목록 보기
3/39

1.후기

 멘붕의 날이었다. 배울 때는 조건문은 조건식만 잘 세우고 반복문은 시작과 끝만 정해주면 되는데 뭐가 어려울까 싶었다. 하지만 어려웠다.

 인간의 언어를 컴퓨터 언어로 옮기는 것은 익숙해지면 되는 일이라고 생각한다. 그것보다 더 큰 문제라고 생각하는 것은 논리적 사고의 낯섦이다. "라면 끓이기 = 물, 수프, 면 넣고 후루룩 끓이면 되지"가 일상에서의 생각 흐름인데 "라면 끓이기 = 1. 냄비에 물을 받는다, 2. 물을 끓인다, ... ,n. 라면 완성" 이렇게 모든 과정을 빠짐없이 생각하고 그것을 순서대로 정리하는 것에 익숙하지 않았다.

 그래서 복습 때는 '무작정 코딩하기 금지, 우선 생각 정리하기'라고 되뇌며 수도 코드를 작성 후 풀었더니 훨씬 수월했다. 처음이라 쉬운 문제에도 수도 코드만 5줄이 나오지만 연습하면 2줄로 줄고 나중에는 문제만 보고도 풀 수 있지 않을까 하는 행복 회로를 돌려본다. 그렇게 되도록 노력해야지😭

2.새롭게 알게 된 것

Section1 Unit3 - [JavaScript] 기초 제어문
Chapter1. 조건문
Chapter2. 문자열
Chapter3. 반복문

<Chapter1. 조건문>

1)
==, !==: 엄격하지 않은 연산자
=: 할당
===: 같다(조건문에 주의)

2)
'true': string
true: boolean

3)! 활용
예시1.
학생이 아니면서, 여성일 때
!isStudent && isFemale

예시2.
console.log('hello' !== 'world')
true

4) falsy 값
false
null
undefined
0
NaN
'빈 문자열'

5) function 안에 if문

상황1. 변수를 받는 함수에 ~을 할당하라

조건1인 경우 -> a
조건2인 경우 -> b
조건3인 경우 -> c
그 외 -> d
(a, b, c, d의 범위가 parameters의 전 범위일 때)

function 함수이름(parameters) {
  if (조건1) {
    return 'a';
  }
  if (조건2) {
    return 'b';
  }
  if (조건3) {
    return 'c';
  }
return 'd'; // 그 외를 받음
}

위에서부터 조건 비교, true인 즉시 return값 반환하고 종료

상황2. 변수를 받는 함수에 ~경우에만 ~을 할당하고 그 외에는 언급 없음

조건1인 경우 -> a
조건2인 경우 -> b
조건3인 경우 -> c
조건4인 경우 -> d
(a, b, c, d의 범위가 parameters의 전 범위보다 작을 때)

function 함수이름(parameters) {
  if(조건1) {
    return 'a';}
  if(조건2) {
    return 'b';}
  if(조건3) {
    return 'c';}
  if(조건4) {
    return 'd';}
}

parameters에 이상한 거 들어가면 undefined 반환(return값이 정해지지 않았기 때문)

6) 조건의 순서
return으로 종료하는 if문을 여러 번 쓸 때, 경우의 수가 적은 것(=대분류)을 먼저 하는 것이 좋음(큰 거름망=>작은 거름망)

7) 제곱하는 방법 3가지

a ** 2;
a * a;
Math.pow(a, 2);

8)
return은 function 안에 들어가는 명령문임
function은 실행 시 return 뒤의 값을 할당받음
return이 숫자이면 숫자, 불리언이면 불리언을 할당받음

9) boolean만을 반환하는 함수 축약

//기본
function equalsTen(num) {
	if (num === 10) {
    	return true;
    }
    return false;
}

//축약
function equalsTen(num) {
  return num === 10;
}

10)
변수 값 합치기

let a;
let b;
let result = a + b;

함수 값 합치기

function a(){}
function b(){}
result = a() + b();

11) else, else if 없는 if문
상황1. return문 있는 경우

function 함수이름(parameters) {
  if () {
      return ~;
  }
  if () {
      return ~;
  }
  if () {
      return ~;
  }
}

함수로 묶여 있는 if문임
위에서부터 차례대로 조건 비교 후 true 나오는 즉시 함수 종료

상황2. return문 없는 경우

function 함수이름(a, b) {
  if () {
      a = 100;
  }
  if () {
      a = 200;
      b = 1;
  }
  if () {
      a = 0;
      b = 1000;
  }
}

위에서부터 차례대로 모든 조건 비교하면서 가장 마지막에 true였던 것이 할당됨

12) 자바스크립트로 시계 만들기
방법1.시계처럼 작동

function addOneSecond(hour, minute, second) {
  // 59초 미만 -> +1초
  // 59초 -> 0초로 바뀌고 +1분
  // 60분 -> +1시간, 0분
  // 24시 -> 0시

  if (second === 59) {
    second = 0;
    minute = minute +1;
  } else if (second < 59){
    second = second + 1;
  }

  if (minute === 60) {
    minute = 0;
    hour = hour + 1;
  }

  if (hour === 24) {
    hour = 0;
    minute = 0;
    second = 0; 
  }

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

방법2.대분류부터 분류

function addOneSecond(hour, minute, second) {
  // 23시 59분 59초 -> 0시.0분.0초
  // 59분 59초 -> +1시간.0분.0초
  // 59초 -> 그대로.+1분.0초
  // 그 외 -> 그대로.그대로.+1초

  if (hour === 23 && minute === 59 && second === 59) {
    hour = 0;
    minute = 0;
    second = 0;
  } else if (minute === 59 && second === 59) {
    hour = hour + 1;
    minute = 0;
    second = 0;
  } else if (second === 59) {
    minute = minute + 1;
    second = 0;
  } else {
    second = second + 1;
  }

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

13) 조건 안 맞으면 바로 리턴 -> 실행 시간 줄일 수 있음

function (원하지 않는 조건) {
	return;
}

<Chapter2. 문자열>

1) string + 다른 데이터 타입 = string
예시1.
'8' + 8 = 88

2) str.indexOf('찾고 싶은 값')
0부터 시작
찾는 것 없으면 -1
두 번 연속이면 처음만 출력
str.lastIndexOf('찾고 싶은 값'): 뒤에서부터

3)
string method: immutable(read only)
array method: immutable, mutable

4) str.length()는 1부터 시작

<Chapter3. 반복문>

1) for(초기화; 조건식; 증감문)

2) for문, while문

출처: https://slidesplayer.org/slide/16861654/

3) str.length 생략 가능

result = result.slice(0, result.length - 1)
result = result.slice(0, -1)

4) string.slice(start, end)

5) break 문
현재 반복문, switch 문, 또는 label 문을 종료하고, 그 다음 문으로 프로그램 제어를 넘김

문제. 2 이상의 자연수를 입력받아 2부터 해당 수까지의 소수(prime number)들을 리턴

입출력 예시.

output = listPrimes(6);
console.log(output); // --> '2-3-5'

해결.

function listPrimes(num) {
  let result = '2';
  for (i = 3; i <= num; i += 2) {
    let isPrime = true;
    for (j = 3; j <= Math.sqrt(i); j += 2) {
      if (i % j === 0) {
        isPrime = false;
        break;
      }
    }
    if (isPrime) {
      result = result + '-' + i;
    }
  }
  return result;
}  

참고. 소수판별
짝수를 배제했다면 홀수로만 나눠주면서 소수 판결 가능
(2의 배수가 아니면(짝수가 아니면) 4, 6, 8로도 나누어지지 않으므로)

Math.sqrt(num)을 사용하여 소수 판별 절차 줄이기 가능

0개의 댓글