NestJS같은 Typescript를 사용하는 프레임워크의 경우 프로젝트 셋업시에 모두 자동으로 처리되므로 별도로 타입스크립트 프로젝트 관련 설정을 해줄일이 딱히 없다. 하지만 기본 구성을 아는것은 중요하기때문에 프레임워크의 도움없이 tsconfig.json파일을 수정하고 직접 컴파일러를 통해 타입스크립트에서 자바스크립트로 컴파일되는 과정 등 타입스크립트를 사용하기위해 간단한 프로젝트 셋업 방법에 대해서 알아보자. 패키지 설치 우선 typescript 코드를 javascript 코드로 변환 해주기위해 typescript 컴파일러를 npm을 이용하여 설치한다. (개발 환경 전역적으로 사용하기 위해 global 옵션을 추가하였다) $ npm install -g typescript # typescript 컴파일러 명령어 사용은 tsc이고 기본적으로 tsconfig....
vcpkg 사용하기
C++기반 프로젝트를 개발할 때 오픈소스 라이브러리를 사용하기 위해서는 다양한 방법이 있다. 원하는 패키지의 소스 코드를 다운로드하여 직접 빌드 하는 방법 혹은 apt 같은 패키지 매니저를 통해 설치하는 방법 등 표준화된 방법은 없지만 python의 pip, golang의 mod, node등 다른 언어로 개발할 때 사용되는 종속성 설치 도구와 비교하면 다소 불편한 것은 사실이다. 이런 불편함을 해소하기 위해 Microsoft에서 오픈소스 프로젝트로 멀티 플랫폼에서 사용하능한 C++ 패키지 매니저를 제공하고 있다. 본 글에서는 vcpkg를 설치 및 사용하는 방법에 대해서 다룰것이다....
백준 1260 DFS와 BFS
문제 링크 문제 해결 별다른 조건이 없는 DFS, BFS 문제 입력으로 주어지는 정점은 key로 하고 각 간선들을 담는 리스트를 value로 하여 dictionary 자료형으로 구현하였다. 정석적인 방법으로 DFS는 초기 정점으로 시작하여 정점이 가지고있는 간선들을 순회하면서 재귀호출로 풀고, BFS는 간선들을 순회하면서 queue에 추가하는 방식으로 풀이하였다. 처음에 양방향의 조건을 못보고 단방향 그래프로 구현했다가 테케2번이 꼬여서 잠깐 헤맸다. 이전에 c++로 풀었던 풀이가 있어서 봤는데, 그래프를 key,value형태가 아닌 2차원 배열로 저장하여 풀었었다. 이 방법도 나중에 다시 파이썬 이중리스트로 구현해서 속도를 비교해봐야겠다....
프로그래머스 카펫
문제 링크 문제 해결 초기 접근은 너비(width)를 기준으로 1부터 최대길이까지 각 width에 맞는 height를 전부 탐색 현재 조건에서 brown + yellow = 높이 * 너비를 만족하면 정답 리턴 이런식으로 구현하였다가, 일부 케이스에서 실패 및 시간초과가 나왔다. 직사각형을 만들기 위해 리스트를 append하는 부분에서 효율적이지 못한 코드였다. 문제의 조건을 다시 보고, 특정 w,h에서 yellow와 brown이 만족하는 조건에 초점을 맞춰서 다시 구현하였다. 기존 풀이방법의 width를 기준으로 height를 순회하는 방법을 사용하되, 조건을 각 w,h일때 입력으로 주어진 brown,yellow가 되는조건을 검사하여 해결하였다....
백준 1261 알고스팟
문제 링크 문제 해결 bfs를 이용하여 풀었다. 현재위치 (1,1)에서 맵을 탐색해 나가면서 벽이 있으면 카운팅, 없으면 계속해서 탐색한다. 단, 최소한의 갯수로 벽을 부숴 도착지로 이동해야 하므로 경로좌표를 queue에 삽입할 때, 빈 공간이 있으면 해당 좌표를 우선순위로 삽입하여 불 필요한 벽을 카운팅하는 일이 없도록 해야한다. 코드 from collections import deque # move helper mx = [0, 0, -1, 1] my = [1, -1, 0, 0] def check_range(x, y: int): return x < m and y < n and x >= 0 and y >= 0 def solve(): paths = deque() paths....