Coding (164)

05
25

1. 배열에 유용한 메서드

  • console.table(arr) : console.log의 진화판. 이제 index와 값을 표로 보여준다!
  • arr.push('배열에 넣고 싶은 엘리먼트') : 배열의 가장 뒤에 엘리먼트를 추가한다.
     (값은 엘리먼트를 하나 넣은 후의 length를 반환!)
  • arr.pop () : 배열의 가장 뒤의 엘리먼트를 빼버린다. 그래서 빈칸으로 쓴다.
     (값은 빠지는 엘리먼트를 반환!)
  • arr.unshift('배열에 넣고 싶은 엘리먼트') : 배열의 제일 앞의 엘리먼트를 추가한다.
     (값은 엘리먼트를 하나 넣은 후의 length를 반환!)
  • arr.shift() : 배열의 제일 앞의 엘리먼트를 빼버린다.
     (값은 빠지는 엘리먼트를 반환!)
    • 깔끔한 정리 => 앞에 넣고(unshift), 앞에 빼고(shift), 뒤에 넣고(push), 뒤에 빼고(pop)
    • 반환할 때의 값을 주의해라! 그대로 retrun 하면 length나 빠질 엘리먼트 하나만 나온다. 계산 후에 원래 배열만 리턴하자!
  • indexOf('찾고자 하는 엘리먼트의 이름') : 배열 안에 있는 엘리먼트를 찾을 수 있다.
    • 결과 값으로는 그 엘리먼트가 있는 index값이 나오고, 만약 없으면 -1이 나온다.
    • Tip : indexOf('찾고자 하는 엘리먼트의 이름')!== -1 하면 블리언 값으로도 찾을 수 있다.
       있다면 index값을 반환하고, 없으면 -1을 반환하기 때문!
  • word.includes('찾고자 하는 엘리먼트 이름') : indexOf 써서!== -1 하는 것과 같은 결과를 준다. 블리언 값으로 나온다.
  • str.concat(배열 그대로 더할 배열) : 배열 + 배열이면 string 타입 그대로 더해 주지만, 이것으로 배열 그 자체로 더 해서 배열들의 배열을 만들 수 있다.
  • Math.max.apply(null, arr) : 배열 중에, 가장 큰 요소를 반환한다.
  • arr.splice(arr, arr에서 빼 버릴 index) : 특정 index의 엘리먼트만 뺀다. 앞뒤 말고 중간에서도 가능!
    • arr.splice(넣을 index, 그 뒤로 몇 개를 빼고 넣을 것인지, 넣을 엘리먼트) : 심지어 중간에 엘리먼트를 넣을 수 도 있다.
  • arr.join('기준으로 합쳐줄 문자열') : 기준을 하나 정해서 그 기준을 다 없애고 하나의 문자로 만들어 버린다.

2. 피보나치의 수열

 현재 항의 값이 이전 2개의 항의 합으로 계산되는 수열.

  • 이라고는 하나... 식으로 보는 게 이해가 빠르다.
    f(n) = {0, 1, F(n - 1) + F(n - 2)···}
    • 그 전전의 숫자부터 영향을 받는다고 생각하면 쉽다. 정말 단순하게 예시를 들자면,
        아침에 먹은 밥이 소화가 덜되서 위장에 남아 있는데 다시 점심을 먹어서 채운다!
      • (이해가 안되면 정상이다. 이해하려 하지 마라)
    • 이걸 자바스크립트로 가져오면?

function fibonacci(num) { let result = [0, 1] //0과 1일 때는 0과 1을 그대로 반환해야 하기 때문에 처음부터 넣어 둔다.
	if(num === 0) { //하지만 num가 0인 경우, [0, 1]을 반환하기 때문에 따로 조건문을 설정했다.
    	return [0]; }
    for(let i = 2; i <= num; i++) { //for문으로 2부터 num전까지 index의 모든 숫자를 얻을 수 있다.
    	result.push(result [i - 1] + result[i - 2]) //피보나치의 수열의 식을 그대로 사용! 그 후 배열에 더해준다. }
        	return result; 
            }

3. 객체

  • 여러 개의 변수가 자주 교체되어야 하는 경우 매우 화가 난다! 심지어 변수의 변화 속에서 관계성도 전혀 없다면??
  • 배열을 쓸 경우, 마찬가지, 각 index 값이 어떤 정보를 담고 있는지 알 수 없다.
    이럴 때 사용하는 것이 '객체'이다.
  • let 책상 위 물건 = { 컴퓨터 관련: '노트북'... 음악 관련: '이어폰'... 환경 관련: '선풍기'... };
  • 중괄호로 객체를 만들어준다!
  • '컴퓨터 관련'은 키(key)가 된다.
  • :(콜론) 뒤에 오는 것이 '노트북', '충전기' 등이 값(value)이 된다.

4. 객체의 값을 사용하는 법

  1. Dot motaion :
    • 객체 이름을 적고,.(Dot)점을 찍어서 값을 반환한다.
  2. 책상 위 물건. 음악 관련; => '이어폰'
  3. Bracket notation :
    • 객체 이름을 적고, ''대괄호와 그 안에 ' '를 쳐서 값을 반환한다.
    • ' '따옴표를 놓치면 큰일 난다! 따옴표가 없다면, '키'가 아니라 '변수'로 받아들이기 때문에,
       이 전에 변수 지정을 해주지 않아서 값을 찾을 수 없다고 에러가 뜰 거다.
    • 이 귀찮은걸 왜 쓰나? Dot notation 만 쓰면 안 되나?? : 안된다. 키값이 변화할 수 있으면, 무조건 bracket 써야 한다.
       정해진 키가 있을 경우에만 dot notation을 사용한다.
  4. 책상 위 물건['환경 관련'] => '선풍기'

5. 객체에 사용할 유용한 메서드

  • 이건 메서드는 아니지만... dot/bracket notation을 이용해 값을 추가할 수 있다. Ex:
  • 책상 위 물건['잡동사니'] = '커피통', '먼지'... 책상위 물건.보이지 않는것 = ['희망', '공부의 끝', '잠'...] //배열도 상관없다! 물론 블리언이나 숫자 뭐든지 다 된다!
  • delete : 삭제도 가능하다.
  • delete 책상위 물건. 잡동사니; //잡동사니 키와 값 모두 삭제한다.
  • in : 키의 존재 유무를 알 수 있게 됨. Ex :
  • '보이지 않는 것' in 책상 위 물건; //true; '놀 시간' in 책상위 물건; //false;

배열을 어찌 저지 끝냈다. 나쁘지 않은 것 같다.
오타가 여전히 많다. 페어 아니었으면 하루 종일 걸렸을 것 같다. 천천히 쓰자.
검색을 자주자주자주 더 자주 사용하자.

COMMENT
 
05
24

1. 여러 명이 동시에 작업을 할 때 주의할 점

  • pull, push 하기 전에 항상 add 하고 commit 해야 한다. 잊기 쉽다.
  • 즉, 어디 overflow에 파일이 있는지를 계속 알고 있어야 한다. 자꾸 pull만 하면 파일 날아갈 수도 있다!
  • Remote Repository의 링크를 잘 확인 해야 한다. 같은 파일을 다시 올리게 된다면 링크 뒤에 -1이 붙거나 한다.
     이때 각자 다른 Remote Repository에서 놀고 있다면 서로의 변경 사항이 반영되지 않는 기적을 볼 수 있다.
  • 가장 중요한건, pull과 push를 신중하게 해라. 그러기 위해서는 계속 status를 해보면 될 것이다!
  • 일단 충돌이 나면, 한쪽에서 충돌 수정을 끝마친 후, 다시 pull 해서 안정된 상태로 만든 다음 작업하는 것이 낫다.
  • 결론 : 마스터 브렌치를 하나 관리하며, 기능마다 branch를 만들고
     (그래서 대부분 branch 이름이 기능이다.) 완성되면 merge 하게 되는 것이다!!

2. 별다른 사항

  • GUI 툴도 있다. '소스트리'(우분투에서 안됨)나 '스마트 깃'(유료화됨) 도 있다. 그냥 CLI가 낫겠다.
  • 깃 헙에서 Insights -> Network 창을 보면 어떤 상황으로 연결되어 있는지 알 수 있다.
COMMENT
 
05
23

1. 맨 뒤 콤마를 지울 수 있다!?

  • 함수 str.replace(이전 문자열, 바꿀 문자열)를 사용한다. 이 함수는 문자열에서 원래 문자열을 찾아서 내가
    설정한 바꿀 문자열로 바꿔버린다. 즉, 첫 번째 문자열을 ', '로 놓고, 두 번째를 ''(빈칸)으로 놓으면 없어진다!!
    • Ex : str.replace(/,\s*$/, ""); => 쉼표와 그 뒤 공백 문자를 빈칸으로 교체.
    • str.slice(0,-1); => 마찬가지. 가장 마지막 문자열을 잘라줌.

오늘은 복습 위주로 다시 알던 내용들을 시험해 보았다.
문제 푸는 속도가 엄청 늘었다.
다양한 방식으로 같은 문제도 접근한다.
다양한 메서드들을 찾아 적용시켜서 다른 방식으로 같은 문제를 더 단순하게 풀어본다.

COMMENT
 
05
23

1. 나만의 소수 공략법

  • 소수를 이중 반복문을 이용해 구해본다.
  • 결괏값은 문자열 '-'로 연결되어 있다.
  • 분명, 효율적인 방법은 아니다. 하지만, 이렇게 하면 답은 나온다. 꼭 리펙토링 해보아야 한다.
function LisPrimes(num) {
    let result = '2'; //소수는 1과 자기 자신을 제외한 숫자를 몫으로 가지지 않는 수이다. 이때, 문자열 '-' 과 연결해야 함을 생각하면 항상 들어갈 소수인 2는 빼둔다.
    for(let i = 3; i <= num; i++) { //3부터 소수가 될 수 있으니 3부터 i를 준다.
      let isPrime = true; //일단은 isPrime으로 이 수가 소수가 될 수 있음을 선언한다.
        for(let j = 2; j < i; j++) { 
          if(i % j === 0) { //3이상부터 num까지의 모든 숫자를 서로서로 다 나눠본다.
          isPrime = false; //이때, 나눠진다면 2또는 자기 자신이외의 숫자로 나눠서 떨어진다는 이야기, 즉 소수가 아니게 되므로 false로 빼버린다.
          }
        } if(isPrime) { //그래서 그 수가 소수라면
          result = result + '-' + i; //result에 문자열 '-'와 붙여 넣어준다.
        }
    } return result; //끝으로 리턴한다.
}

2. 가끔 틀리는 타입별 계산

'스트링 + 다른 타입' 의 경우, 스트링 뒤의 어떤 타입이 오든, 스트링 타입으로 바꿔서 더해 버린다.

  • NaN는 과연 숫자일까?
    • 숫자이다. 생각해 보면 참 이상한 경우다. NaN 말 그대로 Not a Number이지만 typeof를 해보면,
      분명 number 타입이다. 숫자가 아니라는 숫자라는 것이다!
    • undefined는 undefined라는 타입이다. 아직 결정나지 않은 것이다.

3. 선언과 호출 사이

가끔 선언을 해놓고 호출을 똑바로 못 해서 결과 값이 틀리는 경우가 종종 있다.
혹은 문자를 빼버리려 한다던가...타입별 구분을 잘 못하거나 해서 헷갈리는 경우도 있다.

  • [] : 배열이다. 안에 있는 엘리먼트를 말할 수 있다.
  • () : 변수를 넣을 곳이다.
  • 그냥 스트링 혹은 숫자 : 선언이 되어 있다면 그것일 것이고, 중간에 타입이 바뀌는 경우도 있다.
COMMENT