목록전체 글 (306)
gcp 에 인스턴스 배포 후 Docker를 사용하던 과정에서 1.29.2 버전이라는 것을 알게 되었다.그리고 해당 버전은, 내가 쓰는 2.15.1버전과 다소 상이하여 업데이트를 할 필요가 느꼈고, 이 과정에서 사용한 명령어를 미래의 나에게 남기려한다. docker 가 설치되지 않은 경우 아래 명령어를 선행한다.// 루트 폴더 진입 & docker & docker compose 설치sudo apt install docker.io sudo apt install docker-compose 이후 명령어// 폴더 새로 생성mkdir -p ~/.docker/cli-plugins/ Docker 다운로드 (원하는 버전으로 설치가 가능)// 예시curl -SL https://github.com/docker/compose..

GCP 버킷을 세팅하는 방법은 구글에 많이 나와 있으니, Nest.js 환경에서 GCP storage keyFile 을 활용하여 파일을 업로드 하는 방법을 다룬다.필요한 라이브러리yarn add multer @nestjs/platform-express @google-cloud/storageyarn add -D @types/multermulter // 파일 업로드 처리 미들웨어 라이브러리@nestjs/platform-express // nest.js 환경에서 express의 모든 기능을 사용하게 해주는 라이브러리 소스 코드 길이가 짧지 않으므로, 필요한 설명은 주석으로 대체한다. // file.controller.tsimport { Controller, Post, UploadedFiles, Us..

https://www.acmicpc.net/problem/21938 문제 풀이 방식 먼저 픽셀 값에 따른 물체의 유무를 저장하기 위한 이차원 배열을 만들었다. 이후 반복문으로 순회하며 rgb값의 평균값을 구하고 해당 값이 경계값을 넘는다면, 이차원 배열의 해당 위치를 'true'로 설정하여 물체가 있음을 저장하였다. 다음으로는 너비우선탐색 알고리즘을 활용하여, 분리된 '물체'가 총 몇개인지 누산하는 방식으로 문제를 해결하였다. 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt") .toString() .trim() .split("\n"); f..

https://www.acmicpc.net/problem/9047 문제 해결 방식 문제 해결 아이디어는 문제에서 제시된대로 구현하면 되는 문제라 크게 어렵지 않다. 다만, 내림차순 정렬과 오름차순 정렬의 차이를 구한 뒤, 해당 값이 4자릿수가 아닌 경우가 나타날 수 있고 이 부분에 대한 에러처리가 온전히 되지 않으면, 시간 초과로 오답을 받을 수 있다. (예를 들어, 초깃값이 1000 인 경우, 1000 => 999(1000 - 1) 이므로, 이 경우엔 '0999'로 수정해야 한다는 것.) 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt")..

https://www.acmicpc.net/problem/16139 문제 해결 방식 해당 문제의 경우는, 특정 질문에서 a~b 구간의 특정 알파벳 등장 횟수를 출력하는 문제다. 이때, a~b 구간에서 등장한 모든 알파벳의 갯수를 매 쿼리마다 구하는 것은 시간 복잡도에서 불리하다. 따라서 문자열 길이에 맞는 테이블을 구현 후, 각 인덱스마다 특정 알파벳이 몇번 등장했는지 기록하는 자료 구조를 구현했다. 이를 활용할 경우, b 인덱스까지 등장한 알파벳의 갯수와 a 인덱스까지 등장한 알파벳의 갯수의 차가 곧 우리가 구해야 할 값이 된다. 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? ..

https://www.acmicpc.net/problem/2668 문제 풀이 방식 먼저 각 노드 별로 어떤 노드와 연결되어 있는지 객체 테이블에 저장해두는 것이 시작. 다음 문제를 푸는 것에 있어, 시작 노드에서 출발해 연결된 노드를 순회할 때 시작 노드에 도달할 수 있는지가 중요했다. 따라서, 깊이우선탐색(재귀로 접근)으로 탐색하는 과정에 있어, 시작점을 기억하기 위해, 시작점을 재귀함수에 전달인자로 전달할 필요가 있었다. (물론 전역 변수로 저장해도 상관 없다.) 재귀 함수는 다음과 같이 구현했다. 다음 노드를 방문한 적이 있는지 확인했고, 방문한 적이 없다면 다시 재귀 함수로 진입. 만약 다음 노드가 방문한 적이 있고 시작점과 같다면, 이를 결괏값에 추가시켰다. (만약 위 두 조건을 만족하지 못할 ..

https://www.acmicpc.net/problem/21316 문제 해결 방식 별 'Spica'와 연결된 노드는 총 3개며, 연결된 각 노드는 1, 2, 3개의 노드와 연결되어 있다는 특징을 발견하면 어렵지 않은 문제. 그리고 이와 같은 특징은 spica가 유일하기에, 위 조건을 만족하는 노드를 답으로 출력하였다. (문제에서는 6번 노드가 1개와 연결 | 8번 노드가 2개와 연결 | 3번 노드가 3개와 연결되어 있다.) 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt") .toString() .trim() .split("\n"); fu..

https://www.acmicpc.net/problem/18111 문제 해결 방식 문제에서 중요한 힌트는 땅의 높낮이는 256 이하라는 것에서 착안해, 0부터 256까지의 자연수 x를 대입했을 때의 '걸리는 시간'을 모두 구하는 식으로 접근했다. (여기서, 박스의 갯수도 체크해야 하는데, 해당 자연수 x로 모든 땅을 고르게 만들 때의 박스가 부족한 경우는 Infinity 를 반환토록 하여 정답에서 배제하였다.) 이후, 256개의 원소를 담을 수 있는 공간에 해당 값들을 저장한 뒤, 가장 시간이 짧게 걸린 값을 찾았다. (이때, 최소 '걸리는 시간'이 같은 경우가 있을 때는, 가장 땅 높이가 높은 값을 추출해야 하므로, lastIndexOf 메서드를 활용하였다.) 전체 소스 코드 const fs = re..