코딩/위코드 코딩학습

[위코드] TIL(Today I am learned) -05

카슈밀 2020. 6. 30. 10:36
반응형

for문.

 while과 같은 반복문이나 매우 어려움을 준다.

왜냐하면 반복문을 돌릴때 조건을 줘야하는데, 이러한 조건을 짜서 이를 작동하도록 유도하는 것이 어렵기때문에 그렇다.

한마디로 내가 원하는 것은 이 반복문이 특정 string이 출현되었을때 return하거나 아니면 continue하거나인데, continue는 이때 배우지 않으니 else를 써야하고 이러한 상황의 반대에서 이러한 조건을 찾도록 해야함에 따라 매우 어려운 난이도였다. 

 

 for 문의 구조는 이러하다.

 for (반복 조건) {

   // 반복 조건이 맞으면 실행할 코드 기입.

   }

 

  이때 반복 조건은 이러하다.

 for (var 또는 let =i; i<arr.length; i++) {

     return 0;

}

 

for (시작점; 끝낼조건; 증감분) {
 // 실행할 코드;

 } 

이때 증감분은 마이너스를 주어 거꾸로 작동되게 조건을 줄 수 도 있다.

위코드에서 이런 장난을 주어 예시만 보고 아무생각없이 코딩하다가 30분정도 날리는 게 허다하지만,

본문 내용에 거꾸로 로직을 짜라고 써있다. (왜 다들 이것을 못보고 헤맸을까? 이런 장난은 배열에서 나왔다.)

 

findSmallestElement 함수를 구현해 주세요.

findSmallestElement arr 인자는 숫자 값으로만 이루어진 array 입니다.

array 의 값들 중 가장 작은 값을 리턴해주세요.

 

만일 array가 비어있으면 0을 리턴해주세요.

 

예를 들어, 다음과 같은 array이 인자(input)으로 들어왔다면:

 

[20, 200, 23, 1, 3, 9]

 

1이 리턴되어야 합니다.

 

var min = 0;
function findSmallestElement(arr) {
 for (var i=0; i<arr.length; i++) {
  if ( min > arr[i] ) {
   min = arr[i]
   return min
  }
}
}



 

findSmallestElement();

를 작성해보았다. 여기서  array가 비어있다면 0을 리턴하라는데, 이부분은 빼고 작성하였다.

왜냐하면 for문을 설명하는데 있어서 해당부분을 약간의 힌트를 제공했기에.

 

배열조작하기.

아주 매우 어렵고 힘든 부분은 아닌데, 좀 조건문 짜기가 힘든 곳이다.

push/ unshift 를 알려주는데

push는 배열의 뒷부분에 인덱스를 집어넣는 함수라면

unshift는 그 배열 맨 앞부분에 인덱스를 집어넣는 함수이다.

pop은 그에 비해서 뒷부분을 빼고 없애는 함수.

 

간단히 설명하였다.

 

divideArrayInHalf 함수를 다음과 같이 구현해주세요.

 

divideArrayInHalf 함수의 인자인 array는 숫자 값으로만 구성되어 있으며 정확히 총 5개의 요소(element)로 구성되어 있습니다.

 

array의 요소들 중 10과 같거나 작은 값의 element들은 result의 맨 앞으로,

10보다 큰 값의 요소들은 result의 맨 뒤로 재구성된 배열을 리턴해주세요.

 

* 중요사항

이때, 순서는 array의 맨 뒤의 요소 부터 맨 앞의 요소까지 순차적으로 이루어저야 합니다.

 

예를 들어, 인자 array 값이 다음과 같을때

 

[1, 20, 10, 5, 100]

 

result 배열이 만들어 지는 순서는 다음과 같으며,

 

[100]

[5, 100]

[10, 5, 100]

[10, 5, 100, 20]

[1, 10, 5, 100, 20]

 

아래와 같은 result가 리턴 되어야 합니다.

 

[1, 10, 5, 100, 20]

 

이때 중요한 것은 10과 같거나 작은 값은 앞으로 가야하고

10보다 큰 요소는 맨뒤로 가야한다.

즉, 조건을 2개를 짜야한다.

처음에는 pop을 이용해서 예시 인덱스를 날려서 해야하는건가 고민했는데,

공배열을 만들어서 이를 해결하면 되고

공배열에다가 숫자를 앞으로 넣는 뒤로 넣으면 해결된다는 것을 깨닫고

조건문을 만들어 보았는데, 뭘 넣어야할지 찾는 게 어려웠다.

 

function divideArrayInHalf(array) {

    let result = [];

    for (i = arr.length -1; i>=0; i--) {

      let number= array[i];

      if ( number <= 10) { 

        result.unshift(number); 

        }

        else {

         result.push(number);

         }

     return result;

}

 

divideArrayInHalf([1, 20, 10, 5, 100]);

 

으로 구동해야한다.

 

 

데이터 타입

 

이제까지 type이라는 단어를 몇 번 언급했습니다.

이번 시간은 JavaScript에 있는 6가지 데이터 타입을 알아보겠습니다.

 

  • undefined

  • null

  • boolean (true/false)

  • 숫자

  • 문자열

  • 객체 (object)

 

이 중에 숫자(Number), 문자열(String)은 여러 번 다루었습니다.

 

 

typeof 연산자

각 데이터 타입을 자세히 알아보기 전에 typeof 연산자를 배우겠습니다.

typeof 연산자를 통해 이 값, 이 변수는 무슨 데이터 타입인지 알 수 있습니다.

 

typeof 연산자를 적용하면 다음 문자열 중 하나를 반환합니다.

 

  • "undefined": 정의되지 않은 변수

  • "boolean"

  • "string"

  • "number"

  • "object": 함수를 제외한 객체 또는 "object"

  • "function"

 

다음과 같이 사용합니다.

let msg = "message";

console.log(typeof msg);

console.log(typeof 100);

 

null 이라는 데이터 타입이 object로 반환되는 것이 헷갈릴 수 있지만, null은 빈 객체를 참조하고 있어서 그렇습니다. 이 내용은 뒤에서 추가로 학습하겠습니다!

 

그런데 6가지 데이터 타입 중 이전에 배운 Array가 없어서 궁금하실 것 같습니다.

console.log(typeof []);

 

배열의 type을 확인해보면 "object"입니다. 왜냐하면 사실 배열은 확장된 객체이기 때문입니다. (두둥!)

 

일단 typeof로 배열을 확인하면 "object"라고 나오는 것만 기억하시고 넘어가시면 됩니다.

 

 

 

undefined

undefined라는 값은 var, let, const를 사용해서 변수를 정의할 때,

초기화 하지 않았다면 변수에는 undefined가 할당됩니다.

let msg;

console.log(msg === undefined); //true

msg는 선언만 하고, 초기화 하지 않았습니다.

 

 

 

null

null 타입은 데이터 타입 중 하나입니다.

그런데 typeof로 확인해보면 "object"라고 나왔죠.

 

null은 말그대로 아무것도 아닌 빈 객체를 가리고 있어서 object라고 나옵니다.

 

 

boolean

boolean 타입에는 두 가지 값이 있습니다. true, false 입니다.

 

다른 데이터 타입이 boolean으로 변환되는 경우가 여러 개 있습니다.

 

true로 변환되는 값

  • 문자열: 비어 있지 않은 모든 문자열

  • 숫자: 0이 아닌 모든 숫자

  • 객체: 모든 객체 ({}, [] 모두 포함)

 

false로 변환되는 값

  • 문자열: "" (빈문자열)

  • 숫자: 0, NaN

  • 객체: null

  • undefined

 

흠... 이게 어디에 쓰일까요?

 

// if 조건문은 조건식 true/false로 판단하고 if문을 실행합니다.

let sam = 3;
if (sam === 3) { //sam === 3 이 true이면
// 실행
}

 

// 아래 코드를 보겠습니다.
let msg = "message";
if (msg) {
// 실행
}

 

해당 if 문은 비교나 검사할 조건 없이 msg만 들어가 있습니다. (오잉!)

 

그런데 자바스크립트에서 문자열은 "" 제외하고 모두 true라고 말씀드렸죠.

따라서 저 위의 (msg) 부분은 true가 되고, if문이 실행됩니다.

 

아래의 if문은 숫자 0이 false로 변환되는 예시입니다. if문이 실행되지 않습니다.

let number = 0;

if (number) {

// 실행 안됨

}

 

 

 

문자

문자열(String) 데이터 타입은 ""(쌍따옴표)나 ''(홑따옴표)로 감싼 모든 표현을 뜻합니다.

 

주의 : "' 이나 '"은 틀린 표현. 반드시 쌍따옴표로 열었으면 쌍따옴표로 닫고, 홑따옴표로 열었으면 홑따옴표로 닫아야 함.

 

 

숫자

숫자(Number) 데이터 타입은 따옴표 없이 숫자만을 쓰는 경우입니다. Number형입니다.

 

 

 

객체

마지막은 객체(Object) 데이터 타입입니다.

객체는 키와 값의 조합으로 이루어진 데이터입니다. 중괄호로 감싸진 key-value 쌍의 형태를 갖습니다.

ex. { key: value }

 

뒤에서 객체 타입에 대해 조금 더 자세히 배우겠습니다.

 

 

 

728x90