이번 글은 연습문제 풀이입니다. 이전 글에서 연습문제를 풀어 보신 분들만 아래 내용을 확인하시길 바랍니다.






12-2 풀이

var count = 1;

while(count<=100){
  if(count%3 == 0 && count%5 ==0){
    console.log("FizzBuzz");
  }
  else if (count%3 == 0){
    console.log("Fizz");
  }
  else if (count%5 == 0){
    console.log("Buzz");
  }
  else {
    console.log(count);
  }
  
  count++;
}

반복문, 조건문, 각종 연산자가 들어있는 굉장히 좋은 연습 예제입니다. 이 예제를 완전히 이해할 수 있으면 프로그래밍의 기본을 이해했다고 볼 수 있습니다.

Hello World를 3번 출력하는 코드를 만들어 봅시다.

console.log("Hello World");
console.log("Hello World");
console.log("Hello World");

Hello World를 100번 출력하는 코드를 만들려면? console.log("Hello World");를 100번 작성할 수도 있지만 반복문을 사용하면 console.log("Hello World");를 단 한번만 써서 만들 수 있습니다.

이번 강의에서는 while 반복문을 사용해서 코드를 반복시키는 법에 대해 알아봅니다.

while 문

while(조건){
  조건이 참인 경우 이곳의 코드가 반복 실행 됨
}

조건이 참인 경우 괄호({}) 안의 코드를 실행합니다. 여기까지만 보면 if와 똑같지만 while은 {} 코드를 실행한 후 다음코드로 넘어가기 전에 while 문을 다시 반복합니다. while의 조건이 거짓인 경우에만 다음 코드로 넘어갈 수 있습니다.

예제를 살펴봅시다.

var count = 0;

while(count < 10){
  console.log(count);
  count = count+1;
}
  1. count라는 변수를 선언하고 0을 대입하였고, while문은 count가 10보다 작은 경우 반복됩니다. count<10이 true이므로 while문 괄호 안 코드를 실행합니다.
  2. count를 출력합니다. 0이 출력됩니다.
  3. count에 1을 더하여 결과값을 count에 다시 대입합니다. count는 1이됩니다.
  4. {}안의 코드를 모두 실행하였으므로 다시 조건(count<10)을 확인합니다. 조건이 true이므로 다시 while문 {} 안 코드를 실행합니다.
  5. count를 출력합니다. 1이 출력됩니다.
  6. count에 1을 더하여 결과값을 count에 다시 대입합니다. count는 2이됩니다.
  7. {}안의 코드를 모두 실행하였으므로 다시 조건(count<10)을 확인합니다. 조건이 true이므로 다시 while문 {} 안 코드를 실행합니다.
  8. ...
이런 식으로 count가 10이 될 때까지 진행된 후 count가 10이되면 조건(count<10)이 이 false 되므로 {} 안 코드를 건너뛰고 while 문이 종료됩니다.
즉 0부터 9까지 숫자가 출력되게 됩니다.

증감연산자

위 강의에서 count = count +1;은 count++;로 바꿔 쓸 수 있습니다. ++는 증가연산자로 숫자인 변수의 값을 1 증가 시키는 역할을 하고, 반대로 --는 감소연산자 숫자인 변수의 값을 1 감소시키는 역할을 합니다 이를 둘을 증감연산자라고 합니다. ++나 --를 앞에 붙이느냐 뒤에 붙이느냐에 따라 약간의 차이가 있습니다. ++, --를 앞에 붙이면(이것을 '전치'라고 합니다) 해당값이 먼저 증가된 후 증가된 값을 반환하고, 뒤에 붙이면(이것을 '후치'라고 합니다.) 먼저 값을 반환한 후에 증가됩니다.

 연산자  이름  위치  형태 설명
 ++  증가연산자  전치  ++number number의 값을 1 증가시키고 그 값을 반환함
 후치  number++ number의 값을 반환하고 number의 값을 1 증가시킴
 --  감소연산자  전치  --number number의 값을 1 감소시키고 그 값을 반환함
 후치  number-- number의 값을 반환하고 number의 값을 1 증가시킴

var num1 = 10;
var added1 = ++num1;

console.log(num1, added1);

위 코드를 실행하면 11, 11이 출력됩니다. 최초 num1은 10이였고, ++num1를 통해 num1의 값이 1 증가된 후 이 값이 added1에 대입된 것이죠.

반면,

var num2 = 10;
var added2 = num2++;

console.log(num2, added2);

위 코드를 실행하면 11, 10이 출력됩니다. 최초 num2는 10이였고, num2++를 통해 num2의 값이 증가되기 전 값이 added1에 대입되고, 그 후에 num2의 값이 증가된 것입니다

-- 역시 같은 식으로 숫자를 1 감소시킬 수 있습니다.

아래는 첫번째 예제를 증감연산자를 사용하여 표현한 코드입니다.

var count = 0;

while(count < 10){
  console.log(count);
  count++;
}

사실 이 경우 ++count;로 쓰든 count++; 이 예제는 변화가 없습니다. 어떻게 쓰든 간에 값이 증가된 후에 다시 while문 조건 확인으로 돌아가기 때문이죠. 

무한반복

만약 while문의 조건이 계속하여 참이라면 이 반복문은 무한히 반복됩니다. 이 경우 프로그램이 멈추고 시스템이 다운 될 수도 있으므로 무한반복이 되는 코드는 작성하지 않도록 해야 합니다. 실수로 코드가 무한반복된 경우 빨리 tab을 종료하도록 합시다.

정리 및 요약

  • while 문:
    while(조건){
      조건이 참인 경우 이곳의 코드가 반복 실행 됨
    }
  • 증감연산자:
     연산자  이름  위치  형태  설명
     ++  증가연산자  전치  ++number number의 값을 1 증가시키고 그 값을 반환함
     후치  number++ number의 값을 반환하고 number의 값을 1 증가시킴
     --  감소연산자  전치  --number number의 값을 1 감소시키고 그 값을 반환함
     후치  number-- number의 값을 반환하고 number의 값을 1 증가시킴


이번 글은 연습문제 풀이입니다. 이전 글에서 연습문제를 풀어 보신 분들만 아래 내용을 확인하시길 바랍니다.






11-1 풀이

function fileExtensionSwitch(fileExtension){
  var type;

  switch(fileExtension){
    case "jpg":
    case "jpeg":
    case "png":
    case "gif":
      type = "그림파일";
      break;

    case "wav":
    case "mp3":
    case "mid":
      type = "음악파일";
      break;

    case "mp4":
    case "avi":
    case "mkv":
      type = "영상파일";
      break;

    default:
      type = "알수 없는 파일";
  }

 return type;
}

실전이라면 파일 타입에 따라 각각 다른 일을 하는 코드가 들어갈 겁니다. 예를들어 그림파일이라면 그림을 출력하는 코드, 음악파일이라면 음악을 재생하는 코드, 영상 파일이라면 영상을 재생하는 코드, 알수 없는 파일이라면 오류를 표시하는 코드 등..

11-2 풀이

//연습문제 9-2에서 가져온 윤년 구하는 함수
function checkLeapYear(year){
  var isLeapYear;

  if(year%4 != 0){
    isLeapYear = false;
  }
  else if(year%100 != 0){
    isLeapYear = true;
  }
  else if(year%400 != 0) {
    isLeapYear = false;
  }
  else {
    isLeapYear = true;
  }

  return isLeapYear;
}

//연습문제 11-2 함수
function getNumOfDate(year, month){
  var numOfDate;

  switch(month){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      numOfDate = 31;
      break;

    case 2:
      if(checkLeapYear(year)){
        numOfDate = 29;
      }
      else {
        numOfDate = 28;
      }
      break;

    case 4:
    case 6:
    case 9:
    case 11:
      numOfDate = 30;
      break;
  }

 return numOfDate;
}

위 코드를 if문으로 나타내면 아래와 같습니다.

function getNumOfDate(year, month){
  var numOfDate;

  if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
    numOfDate = 31;
  }
  else if(month == 2){
    if(checkLeapYear(year)){
      numOfDate = 29;
    }
    else {
      numOfDate = 28;
    }
  }
  else if(month == 4 || month == 6 || month == 9 || month == 11){
    numOfDate = 30;
  }

 return numOfDate;
}

어떤가요? switch가 좀 더 덜 복잡해 보이지 않나요?

연습문제(11-1)

switch 문을 사용하여 컴퓨터 파일의 확장자를 구별하는 함수를 만들어 봅시다.

파일의 확장자를 구별하여 다른 일을 하는 하는 코드는 실제 프로그램을 만들 때 종종 쓰입니다. 반드시 알아둡시다.

  • 함수는 한가지 문자열을 파라메터로 받습니다.
  • 받은 문자열이 "jpg", "jpeg", "png", "gif" 인 경우 "그림파일"이라는 문자열을 return합니다.
  • 받은 문자열이 "wav", "mp3", "mid"인 경우 "음악파일"이라는 문자열을 return합니다.
  • 받은 문자열이 "mp4", "avi", "mkv"인 경우 "영상파일"이라는 문자열을 return합니다.
  • 이 외의 문자열인 경우 "알수 없는 파일"이라는 문자열을 return합니다.

연습문제(11-2)

연습문제 9-2에서 년도를 입력받아 윤년이면 true를 return하는 함수를 만들어 보았습니다. 그 함수와 switch문을 사용하여 입력받은 년, 월의 날짜 수를 구하는 함수를 만들어 봅시다.

  • 함수는 년, 월 두가지 수를 파라메터로 받습니다.(예: 2020년 3월 이라면 2020과 3을 파라메터로 받음)
  • 해당 년, 월의 전체 날짜 수를 return합니다.(2020, 3을 받으면 31을 return)
  • 각 월의 날짜수는 다음과 같습니다:
    1월 - 31일,
    2월 - 윤년이면 29일 아니면 28일,
    3월- 31일,
    4월- 30일
    5월- 31일
    6월- 30일
    7월- 31일
    8월- 31일
    9월- 30일
    10월- 31일
    11월- 30일
    12월- 31일

+ Recent posts