본문 바로가기

전체 글

(224)
백준 14925 목장 건설하기 (Java) 1. 문제랜드 씨는 퇴직금으로 땅을 사서 목장을 지으려 한다.  그가 사려고 소개받은 땅은 직사각형이고 대부분 들판이지만, 여기저기에 베기 어려운 나무와 치울 수 없는 바위가 있다.그는 목장을 하나의 정사각형으로 최대한 크게 지으려 하는데, 그 안에 나무나 바위는 없어야 한다. 땅의 세로 길이가 M미터, 가로 길이가 N미터일 때, 1미터 간격의 격자로 된 땅의 지도를 M x N행렬로 표현하자. 이때, 행렬의 원소 0은 들판, 1은 나무 그리고 2는 돌을 의미한다.  랜드씨의 땅에서 지을 수 있는 가장 큰 정사각형 목장의 한 변의 크기 L을 출력하시오.입력M NM x N 행렬1 1 출력L2. 풀이dp 배열을 다음과 같이 정의해보자.dp[i][j]: (i, j)를 마지막으로 하는 정사각형 중 가장 큰 것gr..
Trouble Shooting - Spring Security 프로젝트에 비로그인으로 접속 시 1. 개요해당 프로젝트에서 회원 가입 시 발생했던 문제를 정리한다. 배포 준비를 위해 회원 entity에서 미사용 필드를 제거하고 Auditing 로직을 넣은 후 다음과 같은 오류가 발생했다.  문자열을 UserPrincipal(implements UserDetail)로 캐스팅하려 했다는 것이다. 이런 코드가 있었나? 바로 디버깅을 돌려봤다.2. 해결 과정소셜 로그인 클래스의 140번째 줄에서 예외가 터진 것이고이는 회원 저장 메서드였다.Auditor에서 생성자를 찾는 과정에서 authentication.getPrincipal()을 캐스팅하였고, 여기서 오류가 발생했다. 이 프로젝트에서는 JWT를 사용하여 인증 및 인가를 진행한다. 회원 가입시에는 토큰을 발급받지 않은 상태이므로 위 조건문에서 걸렸어야 ..
백준 7453 합이 0인 네 정수 (Java) https://www.acmicpc.net/problem/7453 1. 문제정수로 이루어진 크기가 같은 배열 A, B, C, D가 있다.A[a], B[b], C[c], D[d]의 합이 0인 (a, b, c, d) 쌍의 개수를 구하는 프로그램을 작성하시오.입력첫째 줄에 배열의 크기 n (1 ≤ n ≤ 4000)이 주어진다. 다음 n개 줄에는 A, B, C, D에 포함되는 정수가 공백으로 구분되어져서 주어진다. 배열에 들어있는 정수의 절댓값은 최대 2^28이다.출력합이 0이 되는 쌍의 개수를 출력한다.2. 풀이네 개의 배열을 모두 탐색하면 최대 O(400^4)로 시간초과가 날 수 있으므로 두 개씩 묶어서 계산한다. int idx = 0; for (int i = 0; i 우선 입력받은..
Trouble Shooting - docker compose vs docker-compose 1. 개요해당 포스팅의 제목이 Tripot 프로젝트를 진행하면서 발생한 오류의 원인이 되었다. 이번에는 두 명령어 간의 차이를 알아보고, 해당 실수가 어떤 결과를 초래하였는지 정리해보자.2. docker compose vs docker-compose 본론으로 들어가서 두 명령어가 어떤 차이점이 있는 지 정리해보자. 처음 이를 학습할 때는 둘 중 어떤 명령어를 사용해도 up 명령어가 정상적으로 동작하기에 차이가 없다 생각하고 넘겼었다. 하지만 다음과 같은 차이점이 존재한다. Compose V2Compose V1명령어docker composedocker-compose개발 언어pythongoword separator-(hyphen)_(underscore)scale 옵션docker compose up --sca..
Intellij - 테스트 커버리지 확인하기 1. 개요이번에는 테스트 커버리지를 인텔리제이를 통해 확인해보고, 검증하지 않은 코드에 대한 테스트를 작성해보고자 한다. 그 전에 하나 짚고 넘어가야 할 것이 있다.테스트 커버리지가 높아야, 극단적으로 100%여야만 좋은 테스트임을 나타내는 것은 아니다.  이 포스트는 단순히 커버리지를 확인하고, 이를 채우는 방법을 찾는 과정에 불과하다. 필자는 아직 좋은 테스트를 작성하는 기준을 세우지 못했기에 가장 쉽게 잡을 수 있는 기준인 커버리지를 활용하는 것 뿐이다. 2. 방법 간단하다. 테스트 코드를 실행할 때 with Coverage를 클릭하면 테스트를 실행함과 동시에 커버리지를 계산하여 보여준다. 위와 같이 클래스, 라인, 메서드 별로 커버리지가 얼마인지 계산하여 준다. 위 내용은 서비스 계층의 단위 테스..
백준 12015 가장 긴 증가하는 부분 수열 2 (Java) https://www.acmicpc.net/problem/12015 1. 문제수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.입력첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다.둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000)출력첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.2. 풀이기존에 사용하던 LIS 코드는 다음과 같다.for(int i=1;i 이렇게 구현하면 시간복잡도는 O(n^2)가 된다...
백준 1600 말이 되고픈 원숭이 (Java) https://www.acmicpc.net/problem/1600 1. 문제동물원에서 막 탈출한 원숭이 한 마리가 세상구경을 하고 있다. 그 녀석은 말(Horse)이 되기를 간절히 원했다. 그래서 그는 말의 움직임을 유심히 살펴보고 그대로 따라 하기로 하였다. 말은 말이다. 말은 격자판에서 체스의 나이트와 같은 이동방식을 가진다. 다음 그림에 말의 이동방법이 나타나있다. x표시한 곳으로 말이 갈 수 있다는 뜻이다. 참고로 말은 장애물을 뛰어넘을 수 있다. x x x   x  말  x   x x x 근데 원숭이는 한 가지 착각하고 있는 것이 있다. 말은 저렇게 움직일 수 있지만 원숭이는 능력이 부족해서 총 K번만 위와 같이 움직일 수 있고, 그 외에는 그냥 인접한 칸으로만 움직일 수 있다. 대각선 방향은 ..
무중단 배포 - 스크립트 작성하기 1. 개요이전까지 무중단 배포를 위한 기초적인 설정을 마쳤다. 이제 이를 기반으로 배포 시 작동하는 스크립트 코드를 작성해보고자 한다.2. git action yml //프로젝트 빌드 및 docker push ... - name: Deploy to ec2 uses: appleboy/ssh-action@master with: host: ${{ secrets.EC2_HOST }} # EC2 퍼블릭 IPv4 DNS username: ubuntu key: ${{ secrets.PRIVATE_KEY }} port: 22 script: | ..