npm 명령어

내가 쓰는 명령어

1
2
3
4
5
6
7
8
9
10
npm i
npm i [패키지명]
npm i [패키지명] -D
npm i [패키지명] -g

npm start
npm run [script]

npm repo ; package.json에 있는 레포주소를 브라우저로 연다
npm version ; 버전업 명령어
  • 이렇게를 주로 쓴다
  • npm install aliases: npm i, npm add

짧게 쓰는 npm 명령어

  • npm i == npm install
  • npm i -D == npm i --save-dev
  • npm i -g == npm i --global

npm install option

  • -D ; 개발할때만 쓰이는 패키지를 설치할때 사용한다. 배포할때 포함되지 않는다
  • -g ; 패키지 전역 설치. hexo같은 cli에 바로 명령어를 치는 놈들을 보통 이렇게 설치한다

참고

  • npm i [패키지명] -S 이렇게 --save옵션을 줘야만 package.json에 들어갔는데, npm5부터 기본값이라 안적어도 된다

npm scripts

package.json
1
2
3
4
5
6
7
8
9
10
11
{
// ...
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"test": "hexo server",
"start": "hexo generate & hexo deploy & git add . & git commit -m "
}
// ...
}
  • 여기에 명령을 등록시켜놓고 npm run build 이런식으로 사용한다
  • 여기서 test, start 스크립트는 run을 생략하여 npm start, npm test 이런식으로 사용할 수 있다
  • 그 외에 stop, restart 를 run 없이 바로 사용할 수 있다

참고

hexo 커스텀 404 페이지 만들기

  • 루트 디렉터리에 404.html이 존재하면 기존 404 페이지를 대신해 보여준다

  • hexo에서 적용시키려면 source 디렉터리에 404.html을 만들면된다

  • 그런데 hexo에서 배포할때 자동으로 테마에 맞게 지정된 레이아웃으로 변환한다

  • 이를 막기 위해 404.html의 Front-matter 에 layout: false로 지정한다

source/404.html
1
2
3
4
5
---
layout: false
---

<!DOCTYPE html>

Front-matter

  • hexo에서 파일 최상단에 적는 yml을 Front-matter라고 한다
Front-matter
1
2
3
4
5
6
7
8
9
10
11
---
title: 커스텀 404 페이지 만들기
toc: true
category: blog
tags:
- hexo
- 404
- custom page
thumbnail: /images/커스텀-404-페이지-만들기20200921/preview.jpg
date: 2020-09-21 09:15:59
---

404 소스 출처

124 나라 숫자

124 나라 숫자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// https://programmers.co.kr/learn/courses/30/lessons/12899
function solution12909(n) {
var answer = [];
var arr = '';
var N = n;

var seq = ['4', '1', '2'];
// console.log(seq[seq.length - 1]);
while (true) {
var tmp = n % 3;

answer.push(tmp);
// if (n <= 2) {
// break;
// }

if (tmp == 0) {
n = (n - tmp - 3) / 3;
} else {
n = (n - tmp) / 3;
}

if (n == 0) {
break;
}
}

while (answer.length != 0) {
arr += seq[answer.pop()];
}

// console.log(answer);
// console.log(N, arr);
// console.log("------------");
return arr;
}

해설

  • 124라는 나라의 이상한 진법으로 변환해야 하는 문제이다
  • 10진법 124 나라 10진법 124 나라
    1 1 6 14
    2 2 7 21
    3 4 8 22
    4 11 9 24
    5 12 10 41
  • 이렇게 이상한 숫자로 변환시키는 문제이다
  • 3진법 같아 보이지만 여기에는 함정이 있다….
  • 3진법이 아닌데 3개 숫자로만 표현해야한다
  • 경험으로 알게된.. 자릿수가 바뀔때 이상하게 바뀐다는 건데..
  • 나머지가 0이 될 경우에 == n이 3의 배수의 경우에 추가로 처리해줘야한다
  • 이해?를 돕기위해 그림을 그렸다
  • 왼쪽이 일반적인.. 상식적인 3진수이고
  • 오른쪽이 124 나라의 수이다
  • 중간은 124 나라의 수인데, 3진수와 시작을 똑같이 하기 위해 조작한 것이다
  • 3진수와 중간을 비교해보면 중간중간 정신나간 부분이 보인다
  • 이런 특징? 때문에 124나라는 적은 자릿수로 더 많은 숫자를 표현할 수 있다

  • 이문제는 해결법을 짠하고 알아냈다기보다
  • 계속 해보면서 알게된 규칙들을 적용시키면서 풀린거라
  • 설명을 잘 못하겠다..

  • 숫자 때문에 헷갈려 죽을뻔..
  • 아무튼 정신나간 124 나라이다

가장 큰 정사각형 찾기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// https://programmers.co.kr/learn/courses/30/lessons/12905
// 가장 큰 정사각형 찾기
function solution(board) {
var answer = 1;

var lownum = board.length;
var colnum = board[0].length;
console.log(lownum, colnum);

if (lownum == 1 || colnum == 1) {
var maxRow = board.map(function (row) {
return Math.max.apply(null, row);
});
var max = Math.max.apply(null, maxRow);

return max;
}

var max = 0;

for (var q = 1; q < board.length; q++) {
for (var w = 1; w < board[0].length; w++) {
if (board[q][w] == 0) {
continue;
}
var arr = [board[q - 1][w - 1], board[q - 1][w], board[q][w - 1]];
board[q][w] = Math.min.apply(null, arr) + 1;
max = Math.max(max, board[q][w]);
}
}

answer = max * max;

// console.log(maxRow, max);
console.log(answer);
return answer;
}

해설

  • 2차원 배열이 입력으로 들어온다

  • 2차월 연속된 1 이 이루는 가장 큰 정사각형의 넓이를 반환해야 한다

  • 먼저 입력된 보드가 행과 열 어느 하나가 1인 경우 1또는 0을 반환한다

  • 이제 1이 아닌 경우에 복잡해 지는데..

  • 0과 1로만 이루어진 보드를 갱신해 나갈거다

  • board[1][1] 부터 시작해서 이전 3개를 살펴볼것이다

  • 이때 board[1][1]이 0 이면 패스한다. 1이면 ㄱㄱ

  • 위, 왼쪽, 왼쪽 대각선위를 살펴서 가장 작은 숫자를 찾는다

  • 그런다음에 board[1][1]에 가장 작은 숫자 + 1을 대입한다

  • board[1][2] 로 이동해서 같은 것을 반복한다

  • 그림으로 보면 이렇다

  • step1] board[1][1] 일때

  • step1] board[1][2] 일때

  • 반복…

  • 결과]

  • 위 처럼 계속 갱신하고 보드에 마지막에 도달하면 끝이 난다

  • 이후에 board 내에서 가장 높은 숫자를 찾는다. 그러면 3이라는 숫자를 얻을 수 있다

  • 넓이를 반환하고 했으니까 3*3 해서 9를 반환하면 된다

vscode 카테고리 생성

  • 갓갓 편집기 vs code에 관한 내용 올리기

git 카테고리 생성

  • git, github 공부한 내용 올리기

aws 카테고리 생성

  • aws 공부한 내용 올리기

완주하지 못한 선수

완주하지 못한 선수
1
2
3
4
5
6
7
8
9
10
11
12
13
// https://programmers.co.kr/learn/courses/30/lessons/42576
const solution = (participant, completion) => {
let objComletion = {};

completion.forEach((item) => {
!objComletion[item] ? (objComletion[item] = 1) : objComletion[item]++;
});

for (let i = 0; i < participant.length; i++)
if (!objComletion[participant[i]] || --objComletion[participant[i]] < 0)
return participant[i];
};
result = solution(['leo', 'kiki', 'eden'], ['eden', 'kiki']);
  • 효율성때문에 골치 아픈 문제

해설

  • solution(['leo', 'kiki', 'eden'], ['eden', 'kiki'])
  • 이런식으로 이름이 들어간 2개의 배열이 들어온다
  • 첫번째 배열은 참가자명단이고
  • 두번째 배열은 완주자명단이다
  • 완주하지 못한 사람을 반환하면 된다
  • 그런데 동명이인이 있을 수 있다
  • 중첩 반복문으로 풀다가 효율성에서 실패했다
  • 해쉬를 써서 풀라는데, 그러다 생각한데 객체를 만들어서 접근하는 방식이다..
  • objComletion라는 객체를 하나 생성하고
  • 반복분으로 objComletion.사람이름 으로 초기화한다
  • 초기화할때 멤버가 없으면 1로 초기화하고 이미 존재하면 ++해서 동명이인 처리를 했다
  • participant(참가자) 배열로 반목문을 돌면서 사람이름으로 다이렉트로 접근하니까 효율성이 엄청 좋아졌다
  • 멤버가 없거나, 0일경우 완주하지 못한 선수를 잡아낼 수 있다

잡담

  • 이 문제 풀면서 겉멋 코드에 맛들려서 안쓰던 화살표 함수도 쓰고…
  • 변수명 &, _ 이런거도 써봤다..ㅋㅋ
  • 효율성 획기적으로 줄여서 기분이 좋았다