모든 npm 패키지에는 보통 프로젝트 루트에 package.json이라는 파일이 들어 있다. 이 파일에는 프로젝트와 관련된 다양한 메타데이터가 저장되어 있다. 이 파일은 프로젝트의 종속성(dependencies)을 처리할 뿐만 아니라 프로젝트를 식별할 수 있는 정보를 npm에 제공하는 데 사용된다. 또한 프로젝트 설명, 특정 배포의 프로젝트 버전, 라이선스 정보, 구성 데이터 등과 같은 다른 메타데이터도 포함할 수 있으며, 이 모든 메타데이터는 npm과 패키지의 최종 사용자에게 필수적일 수 있다. package.json 파일은 일반적으로 Node.js 프로젝트의 루트 디렉터리에 위치한다.

 

 

Node.js 자체는 패키지의 다음의 두 필드만 인식한다.

{
  "name" : "프로젝트 이름",
  "version" : "0.0.0",
}

 

- name : 해당 프로젝트의 이름을 작성해주면 된다.

- version : 올바른 버전의 패키지가 설치되고 있는지 확인하기 위해 npm에서 사용한다.

일반적으로 major.minor.patch의 형태를 취하는데, major, minor, patch는 major, minor, patch는 매 신규 출시 후 증가하는 정수다.

 

 

 

{
  "name" : "underscore",
  "description" : "JavaScript's functional programming helper library.",
  "homepage" : "http://documentcloud.github.com/underscore/",
  "keywords" : ["util", "functional", "server", "client", "browser"],
  "author" : "Jeremy Ashkenas <jeremy@documentcloud.org>",
  "contributors" : [],
  "dependencies" : [],
  "repository" : {"type": "git", "url": "git://github.com/documentcloud/underscore.git"},
  "main" : "underscore.js",
  "version" : "1.1.6"
}

 

 

보시다시피 프로젝트의 설명(description) 및 키워드(keywords) 필드가 있다. 이것은 당신의 프로젝트를 찾은 사람들이 그것이 무엇인지 단 몇 마디 말로 이해할 수 있게 해준다. 작성자(author), 기고자(contributors), 홈페이지(homepage), 리포지토리(repository) 분야는 모두 프로젝트에 기여한 사람들을 신용하고, 작성자/유지인에게 연락하는 방법을 보여주며, 추가 참조를 위한 링크를 제공하는 데 사용할 수 있다.

 

main 필드에 나열된 파일은 라이브러리의 주요 진입점이며, 누군가 require(<library name>) 으로 실행하려면 require(<package.json:main>) 식으로 호출해 라이브러리를 사용할 수 있다. dependencies 필드는 npm에서 사용할 수 있는 프로젝트의 모든 dependencies을 나열하는 데 사용된다. 누군가가 npm을 통해 당신의 프로젝트를 설치하면, 나열된 모든 dependencies 또한 설치될 것이다. 또한 다른 사용자가 프로젝트의 루트 디렉토리에서 npm 설치를 실행하면 ./node_modules에 모든 dependencies을 설치하게 된다.

 

devDependencies 필드를 package.json에 추가할 수도 있다. 이러한 종속성은 정상 작동에 필요한 것이 아니라 프로젝트를 패치하거나 수정하려는 경우 필수/권고 사항이다. 예를 들어, 테스트 프레임워크를 사용하여 장치 테스트를 작성한 경우 devDependency 필드에 사용한 테스트 프레임워크를 넣는 것이 적절할 것이다. 프로젝트의 devDependencies를 설치하려면 npm 설치를 사용할 때 --dev 옵션을 넣으면된다.

반응형

 

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

 

<내 코드>

from collections import deque
n = int(input())
nums = deque()

for i in range(1, n+1):
    nums.append(i)


def que():
    cnt = 0
    while(len(nums) >= 1):
        cnt += 1
        if(len(nums) == 1):
            return nums[0]

        if(cnt % 2 == 1):
            nums.popleft()

        elif(cnt % 2 == 0):
            nums.append(nums.popleft())


print(que())

처음에 deque 사용하지 않고 pop() 2개를 사용했더니 역시나 시간 초과가 났다.. 

카운트를 이용해 홀수, 짝수 순서에 따라 카드 제거 & 카드 뒤로 이동을 구현했다.

반응형

 

 

18258번: 큐 2

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

<내 코드>

import sys
from collections import deque

n = int(sys.stdin.readline())
deque = deque()


def push(queque, x):
    deque.append(x)


def pop(deque):
    if(not deque):
        return -1
    else:
        return deque.popleft()


def size():
    return len(deque)


def empty():
    if(not deque):
        return 1
    else:
        return 0


def front():
    if(not deque):
        return -1
    else:
        return deque[0]


def back():
    if(not deque):
        return -1
    else:
        return deque[-1]


for i in range(n):
    oper = sys.stdin.readline().split()

    if (oper[0] == "push"):
        push(deque, oper[1])
    elif(oper[0] == "pop"):
        print(pop(deque))
    elif(oper[0] == "size"):
        print(size())
    elif(oper[0] == "empty"):
        print(empty())
    elif(oper[0] == "front"):
        print(front())
    elif(oper[0] == "back"):
        print(back())

 

이 문제는 시간 복잡도가 O(1)이 되어야 하는데, 일반적인 리스트의 pop() 함수를 사용하면 첫 번째 요소를 pop 할 때는 O(n)의 시간이 소요된다. 그래서 collections의 deque를 사용했다. pop 부분에서 popleft를 이용해 시간을 단축시킬 수 있다. deque는 스택과 큐를 합친 자료구조이다.

반응형

 

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

<내 코드>

n = int(input())
stack = []
oper = []
cnt = 1
temp = ""
for i in range(n):
    num = int(input())

    while(cnt <= num):
        stack.append(cnt)
        oper.append("+")
        cnt += 1
    if(stack[-1] == num):
        stack.pop()
        oper.append("-")
    else:
        temp = False

if(temp == False):
    print("NO")
else:
    for i in oper:
        print(i)

 

처음에 무슨 문제인지 이해하는데 오래 걸렸다. 이 문제는 입력으로 주어진 수들의 수열을 push, pop으로 만들 수 있는지 확인하는 문제이다. 여기서 중요한 건 '스택 구조'이고 push를 오름차순으로 숫자가 들어간다는 것이다. 따라서 스택의 마지막 수가 비교하려는 입력의 수열의 수와 다르다면 해당 수열을 만들 수 없게 되는 코드다.

반응형

 

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 �

www.acmicpc.net

 

<내 코드>

 

import sys
n = int(sys.stdin.readline())
nums = []


def push(x):
    nums.append(x)


def pop():
    if(nums):
        return nums.pop()
    else:
        return -1


def size():
    return len(nums)


def empty():
    if(not nums):
        return 1
    else:
        return 0


def top():
    if(nums):
        return nums[-1]
    else:
        return -1


for i in range(n):
    inputOper = sys.stdin.readline().split()
    if (inputOper[0] == "push"):
        push(inputOper[1])
    elif(inputOper[0] == "pop"):
        print(pop())
    elif(inputOper[0] == "size"):
        print(size())
    elif(inputOper[0] == "empty"):
        print(empty())
    elif(inputOper[0] == "top"):
        print(top())
반응형

 

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 �

www.acmicpc.net

 

<내 코드>

 

n = int(input())
info = []

for i in range(n):
    age,name = input().split()
    age = int(age)
    info.append([age, name])

info.sort(key=lambda x: x[0])

for i in info:
    print(*i)

 

lambda 함수를 이용해서 age변수를 기준으로 오름차순으로 정렬하고, age 값이 같다면 인덱스(즉, 여기선 등록순) 순서로 정렬되게 된다. 그리고 출력을 할 때 언패킹을 통해 리스트 요소 값을 출력한다.

반응형

 

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

 

<내 코드>

 

n = int(input())
words = set()
for i in range(n):
    words.add(input())

sortWords = sorted(words, key=lambda x: (len(x), x))

for i in sortWords:
    print(i)

 

단어의 중복을 제거하기 위해 set() 집합을 사용했다. 입력값으로 들어오는 문자열들을 집합에 넣고, sorted 함수를 이용해 각 문자열을 1차로 길이에 따라 정렬하고, 길이가 같다면 2차로 사전의 오름차순으로 정렬하게 코드를 작성했다.

반응형

 

 

11651번: 좌표 정렬하기 2

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

 

<내 코드>

 

n = int(input())
dots = []
for i in range(n):
    dots.append(list(map(int, input().split())))

dots = sorted(dots, key=lambda x: (x[1], x[0]))

for i in dots:
    print(*i)
반응형

+ Recent posts