타입스크립트, 그리디 알고리즘

김민준·2023년 7월 28일
0
  1. 타입스크립트란?
  2. 타입스크립트 개발환경 구축
  3. 그리디 알고리즘이란?
    프로그래머스

공부하며 느낀 점
참조한 사이트

1. 타입스크립트란?

  • 타입 스크립트의 등장
    정적언어에서 자바스크립트로 넘어온 사람들은 불편함을 느꼈다. 컴파일이 아니라 런타임에서 타입이 결정되기 때문이다.
    단순한 불편의 문제가 아니라 개발자도 버그를 찾아내기 힘든 결점이었고, 그래서 MS가 그것을 해결하기 위해 타입스크립트를 만들었다고한다.

  • 타입 스크립트의 특징

  1. 자바스크립트의 기능을 모두 가진다.
  2. 컴파일 시에 타입체크를 한다.
  3. 컴파일 시에 정의 되지 않은 프로퍼티를 걸러낸다.
  4. 자바스크립트에서는 외부에서 클래스 내의 속성을 건드릴 수 있지만, 타입스크립트에서는 private라는 접근 제어자가 있어서 불가능하다.
  • 배워야하는 이유
  1. 여러 프로젝트에서 순수 자바스크립트보다 더 선호한다.
  2. 생산성과 안정성이 올라간다.
  3. 정적타입, 객체지향, 디자인 패턴 등을 자연스럽게 익힐 수 있다.
  4. 안정성이 높기 때문에 테트코드가 줄어든다.

2. 타입스크립트 개발환경 구축

맥 MAC 환경

아래의 두 가지 중 하나를 골라서 node.js를 설치한다.
1. node.js 공식 홈페이지 LTS버전 설치
2. NVM 설치
Node Version Manager : node.js의 여러 버전을 쉽게 설치하고 바꿀 수 있는 역할을 하는 패키지이다.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash

위의 두 명령어중 편한 것을 터미널에 입력하면 된다. wget의 경우 Mac이면 기본으로 깔려있다고 한다. 설치가 끝나면 터미널에서 nvm이라는 명령어가 정상 작동하는지 확인하자.

nvm install 12
node.js 12 버전을 설치하는 명령어이다. 18을하면 18이 설치된다.(18버전 추천)

node -v
설치된 node.js의 버전을 확인한다.

npm i typescript -g
타입스크립트를 글로벌로 설치한다. 설치 완료 후 tsc(타입 스크립트의 컴파일러를 터미널에서 실행해서, 설치가 잘 되었는지 확인한다.

윈도우 Windows 환경

아래의 두 가지 중 하나를 골라서 node.js를 설치한다.
1. node.js 공식 홈페이지 LTS버전 설치
2. NVM Windows 설치
Node Version Manager : node.js의 여러 버전을 쉽게 설치하고 바꿀 수 있는 역할을 하는 패키지이다.
만약 node.js가 이미 깔려있다면 완전히 삭제하고, 다음 링크에서 최신으로 nvm을 설치한다.
윈도우 사용자들에게 가장 익숙할 .exe 파일 다운로드를 추천한다.

power shellnvm을 타이핑해서 제대로 설치 되었는지 확인하다.

nvm install <설치버전>으로 원하는 버전의 node.js를 설치한다.(12이상으로 18버전 추천)

nvm ls로 설치된 노드.js의 버전을 확인할 수 있다.
nvm use node.js <사용할버전>으로 원하는 버전을 활성화 시킨다.
npm -v로 npm이 제대로 깔렸는지 확인한다.

파워쉘을 종료하고, cmd(명령 프롬프트)를 실행한다.

npm install typescript -g로 타입스크립트를 글로벌로 설치한다.
tsc를 실행하여 제대로 설치되었는지 확인한다.(안되면 cmd를 한번 껐다켜보자)

3. 그리디 알고리즘이란?

  • 현재상황에서 가장 좋은 것을 고르는 알고리즘
    즉, 전체적인 판단을 하지 않기 때문에, 빠르지만 항상 최적의 결과를 낼 수 는 없다.

그리디 알고리즘을 합리적으로 쓰기 위해서는, 그러한 조건을 만들어 줘야한다.

  1. 가치나 비용이 큰것을 먼저 고르는 상황
  2. 투입할 수 있는 비용을 고려하지 않아도 되는 상황

등이 있겠다.

프로그래머스

짝수와 홀수

그냥 2로 나누고 올림하기 전/후 가 같은 값인지 보면 될 듯하다.

나의 풀이

function solution(num) {
    var answer = '';
    const halfOfNum = num/2;
    const ceilOfHalf = Math.ceil(halfOfNum)
    
    if (halfOfNum === ceilOfHalf){
        return answer = "Even"
    } else {
        return answer = "Odd"
    }
}

다른 사람의 풀이

function evenOrOdd(num) {
  return num % 2 ? "Odd" : "Even"
}

나머지가 0이면 false임을 이용한 삼항 연산자이다.

짝수와 홀수에 대한 개념 자체는 내 것과 같지만, 더 간결하게 표현하였다.

편지

나의 풀이

function solution(message) {
    var answer = 0;
    
    answer = message.length * 2
    
    return answer;
}

단순히 글자수를 세고 2를 곱하면 된다.

평행

점 그냥 하나하나 다 기울기를 구하면 될것같다.

그런데 갑자기 하나 헷갈리는 것이 -5/4 와 5/-4 모두 -1.25 인데 실제로 같은 기울기였던가?...

초중고대학생때였다면 고민도 안했을건데 헷갈린다...

그림으로 그려보니 맞는것같다. 아니면, 유클리드나 피타고라스한테가서 따지자. 아니다 평면이 아니라도 맞을라나? 수학 몰라요 ㅠㅠ

dots = [
  [1, 4],
  [9, 2],
  [3, 8],
  [11, 6],
];

function solution(dots) {
  var answer = 0;
  let num = 0;
  const n = dots.length;

  var gradients = [];

  let xAxis;
  let yAxis;

  while (num < n) {
    // console.log(n, num);
    for (let i = num + 1; i < n; i++) {
      xAxis = dots[i][0] | -dots[num][0];
      yAxis = dots[i][1] - dots[num][1];
      gradient = xAxis / yAxis;
      gradients.push(gradient);
      // console.log(num, gradients);
    }
    num++;
  }

  const getElCount = (arr) =>
    arr.reduce((ac, v) => ({ ...ac, [v]: (ac[v] || 0) + 1 }), {});

  const test = getElCount(gradients);
  console.log(test);

  const valuesOfTest = Object.values(test);

  console.log(valuesOfTest.length);

  for (let i = 0; i <= valuesOfTest.length; i++) {
    if (valuesOfTest[i] > 1) {
      return (answer = 1);
    }
  }

  return answer;
}

solution(dots);

자꾸 안된다...

미친척하고 gradient = xAxis / yAxis;를 절대값으로 하거나, x축 y축 변화량을 제곱도해보고 별짓 다했는데도 안된다...

오늘은 포기하고 나머지 공부부터하자...

공부하며 느낀 점

수학적 안목을 키워야겠다.

참조한 사이트

배열의 값을 비교하기 1
배열의 값을 비교하기 2
자바스크립트 절대 값 구하기

[알고리즘] 그리디(Greedy) 알고리즘과 예제 (파이썬)
탐욕(그리디) 알고리즘(greedy algorithm)

profile
node 개발자

0개의 댓글

관련 채용 정보