목록개발 (304)

Spring boot 강의를 따라가다가, 구태여 강의에서 얘기하는 H2 데이터베이스를 사용하고 싶지 않았다.때문에 기존에 익숙한 docker를 사용하여 개발 환경을 구축하려 시도했는데,그 과정에서 gradle로 패키지가 병합되지 않는 문제가 발생했다. (./gradlew clean build가 동작하지 않았음) 문제가 발생한 패키지는 JPA. 해당 문제를 해결하기 위해, gpt의 힘을 빌려 해당 문제를 야기할 수 있는 내용들을 훑었다.이를 테면, build.gradle의 dependecies에 제대로 패키지를 삽입했는지부터, import 방식 자체가 잘못되었는지까지. 물론 이 단계에서 에러는 풀리지 않았고, 구글을 서칭함으로써 문제를 해결할 수 있었다.먼저, 인텔리제이 우측 상단에 있는 코끼리 모양을 ..

패키지가 정상 빌드되지 않는 원인을 찾다가, java의 버전 문제라는 것을 알게 되었다.분명 17버전을 설치했던 기억이 있는데, 아래와 같이 11버전이라니.openjdk version "11.0.19" 2023-04-18 LTSOpenJDK Runtime Environment Zulu11.64+19-CA (build 11.0.19+7-LTS)OpenJDK 64-Bit Server VM Zulu11.64+19-CA (build 11.0.19+7-LTS, mixed mode) 이를 해결하고자 셀 스크립트를 수정했다. 예전에 node도 비슷한 경우로 버전을 올려야 하는 경우가 있었기에, 이번엔 다소 쉬웠다. 셀 스크립트를 수정하는 이유는 다음과 같다. 이 곳(macOS Linux, zsh) 세션이 시작될 때,..
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 문제 풀이 방식 먼저 각 노드 별로 어떤 노드와 연결되어 있는지 객체 테이블에 저장해두는 것이 시작. 다음 문제를 푸는 것에 있어, 시작 노드에서 출발해 연결된 노드를 순회할 때 시작 노드에 도달할 수 있는지가 중요했다. 따라서, 깊이우선탐색(재귀로 접근)으로 탐색하는 과정에 있어, 시작점을 기억하기 위해, 시작점을 재귀함수에 전달인자로 전달할 필요가 있었다. (물론 전역 변수로 저장해도 상관 없다.) 재귀 함수는 다음과 같이 구현했다. 다음 노드를 방문한 적이 있는지 확인했고, 방문한 적이 없다면 다시 재귀 함수로 진입. 만약 다음 노드가 방문한 적이 있고 시작점과 같다면, 이를 결괏값에 추가시켰다. (만약 위 두 조건을 만족하지 못할 ..