전체 글 139

백준 No.1520 내리막 길- JAVA

문제 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 짖머을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으며, 각 지점 사이의 이동은 지도에서 상하좌우 이웃한 곳끼리만 가능하다. 현재 제일 왼쪽 위 칸이 나타내는 지점에 있는 세준이는 제일 오른쪽 알 칸이 나타내는 지점으로 가려고 한다. 그런데 가능한 힘을 적게 들이고 싶어 항상 높이가 더 낮은 지점으로 만 이동하여 목표 지점까지 가고자 한다. 지도가 주어질 때 이와 같이 제일 왼쪽 위 지점에서 출발하여 제일 오른쪽 아래 지점까지 항상 내리막길로만 이동하는 경로의 개술르 구하는 프로그램을 작성하시오, 풀이 DFS를 이용해야하는데 여기서 DP배열을 통해 값을 미리 구한 ..

알고리즘 2023.04.24

백준 No.1967 트리의 지름- JAVA

문제 트리는 사이클이 없는 무방향 그래프이다. 트리에서는 어떤 노드를 선택해도 둘 사이에 경로가 항상 하나만 존재하게 된다. 트리에서 어떤 두 노드를 선택해서 양쪽으로 쫙 당길 때, 가장 길게 늘어나는 경우가 있을 것이다. 이럴 때 트리의 모든 노드들은 이 두 노드를 지름의 끝 점으로 하는 원 안에 들어가게 된다. 이런 두 노드 사이의 경로의 길이를 트리의 지름이라고 한다. 정확히 정의하자면 트리에 존재하는 모든 경로들 중에서 가장 긴 것의 길이를 말한다. 입력으로 루트가 있는 트리를 가중치가 있는 간선들로 줄 때, 트리의 지름을 구해서 출력하는 프로그램을 작성하시오. 아래와 같은 트리가 주어진다면 트라의 지름은 45가 된다. 풀이 해당 문제를 조금 다르게 보면 9번 노드에서 12번 노드로 향하는 가중치..

알고리즘 2023.04.21

백준 No.2644 촌수계산- JAVA

문제 우리 나라는 가족 혹은 친척들 사이의 관계를 촌수라는 단위로 표현하는 독특한 문화를 가지고 있다. 이러한 촌수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자식 사이를 1촌으로 정의하고 이로부터 사람들 간의 촌수를 계산한다. 예를 들면 나와 아버지, 아버지와 할아버지는 각각 1촌으로 나와 할아버지는 2촌이 되고, 아버지 형제들과 할아버지는 1촌 나와 아버지 형제들과 3촌이 된다. 여러 사람들에 대한 부모 자식들 간의 관계가 주어졌을 때, 주어진 두 사람의 촌수를 계산하는 프로그램을 작성하시오 입력 사람들은 1,2,3,. 의 연속된 번호로 각각 표시 된다. 입력파일의 첫째 줄에는 전체 사람의 수 N이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진다. 그리고 셋..

알고리즘 2023.04.20

백준 No.14425 문자열 집합- JAVA

문제 총 N개의 문자열로 이루어진 집합 S가 주어지낟. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오 입력 첫째 줄에 문자열의 개수 N과 M이 주어진다. 다음 N개의 주렝는 집합 S에 포함되어 있는 문자열ㄷ르이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다. 입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다. 풀이 HashSet에 N만큼을 담고 M만큼을 순회하며 contains가 true이면 count에 1씩 추가했다. import java.io.BufferedReader; import java.io.IOException; ..

알고리즘 2023.04.20

Spring Security - UserDetails 대신 다른 객체 넣기

Security로 설정을 구성하다 보면 항상 자연스럽게 Authentication 객체에 Principal은 당연히 UserDetails였다. 물론 지원해주는 거니 문제 없게 사용하지만 한 번 바꿔보고 싶은 마음에 인증 절차 Provider랑 Token이랑 바꿔봤다. 애초에 인증 절차는 http.formLogin()을 활성화할 경우 UsernamePasswordAuthenticationFilter가 작동한다. 그리고 SSR 방식에서 세션을 사용하는 경우라면 거의 웬만하면 해당 FIlter로 처리하는게 적당하다고 생각하기 때문에 해당 필터를 사용한 인증방식을 그대로 사용한다. 간단한 인증 절차는 이렇다.application/x-www-form-urlencoded 1. 사용자가 application/x-ww..

Spring Security 2023.04.19

백준 No.2583 영역 구하기- JAVA

문제 눈금의 간격이 1인 MxN크기의 모눈종이가 있다. 이 모눈종이 위에 눈금에 맞추어 K개의 작사각형을 그릴 때, 이들 K개의 직사각형의 내부를 제외한 나머지 부분이 몇 개의 분리된 영역으로 나누어진다. 예를 들어 M=5,N=7인 모눈 종이 위에 과 같이 직사각형 3개를 그렸다면, 그 나머지 영역은 와 같이 3개의 분리된 영역으로 나누어지게 된다. M,N과 K 그리고 K개의 직사각형의 좌표가 주어질 때, K개의 직사각형 내부를 제외한 나머지 부분이 몇 개의 분리된 영역으로 나누어지는지, 그릭 분리된 각 영역의 넓이가 얼마인지를 구하여 이를 출력하는 프로그램을 작성하시오 5 7 3 0 2 4 4 1 1 2 5 4 0 6 2 풀이 visited 배열을 생성해서 하려했는데 굳이 필요가 없을 거 같아 다시 지..

알고리즘 2023.04.19

백준 No.10026 적록색약- JAVA

문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 NxN인 그리드의 각 칸에 R, G, B중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또 , 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은 색상이라 한다) 예를 들어, 그림이 아래와 같은 경우에 RRRBB GGBBB BBBRR BBRRR RRRRR 적록색양이 아닌 사람이 봤을 때 구역의 수는 총 4개이다. (빨강 2, 파랑 1, 초록 1) 하지만, 적록색약인 사람은 구역을 3개 볼 수 있다 그림이 입력으로 주어졌..

알고리즘 2023.04.18

백준 No.2468 안전 영역- JAVA

문제 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 안전한 영역이 최대로 몇 개가 만들어 지는 지를 조사혀라고 한다. 이때, 문제를 간단하게 하기 위하여, 장마철에 내리는 비의 양에 따라 일정한 높이 이하의 모든 지점은 물에 잠긴다고 가정한다. 어떤 지역의 높이 정보는 행과 열의 크기가 각각 N인 2차원 배열 형태로 주어지며 배열의 각 원소는 해당 지점의 높이를 표시하는 자연 수이다. 예를 들어, 다음은 N=5인 지역의 높이정보이다. 이제 위와 같은 지역에 많은 비가 내려서 높이가 4이하인 모든 지점이 물에 잠겼다고 하자. 이 경우에 물에 잠기는 지점을 회색으로 표..

알고리즘 2023.04.17

백준 No.11725 트리의 부모 찾기- JAVA

문제 루트 없는 트리가 주어진다. 이떄 트리의 루트를 1이라고 정했을 떄 각 노드의 부모를 구하는 프로그램을 작성하시오 7 1 6 6 3 3 5 4 1 2 4 4 7 풀이 주어진 노드들을 연결해보면 원을 막 뒤엉키게 되는데 루트를 1로 보면 이진트리로 볼 수 있다. 그렇게 보면 결국 주어진 값에서 루트 노드 1에 연결된 그래프는 4와 6이다. 이 두 값에 노드는 부모는 1인 걸 알 수 있다. 이 말을 보자마자 bfs로 풀면 금방 풀 수 있을 거 같았는데 dfs 로 한 번 도전해봤다. parent ,visited , graph 배열을 통해 값들을 받는데 핵심은 static void dfs(int index){ visited[index] = true; //1이 들어오면 1을 방문처리하고 그의 자식들을 탐색한..

알고리즘 2023.04.15

AWS - 배포와 기록(Spring boot)

우리 프로젝트 배포는 AWS EC2와 S3 만 사용했고 Spring Boot (gardle) 로 배포진행 그리고 ubuntu 사용함 일단 먼저 겪었던 문제점들 1. Ubuntu는 맨 앞에 / 를 인식하지 못한다. -> 컨트롤러에서 view 이름을 보낼때 앞에 / 가 있으면 해당 경로를 인식하지 못하고 파일을 못 찾는다는 말이 나오게 된다 컨트롤러에서 view 이름에 / 는 제거가 필요하다. 2. 메모리는 2기가 이상 서버를 유지해야한다. -> 테스트를 위해 t2.nano(0.5) 테스트 했을 때 docker 이미지를 다운 받는 과정에서 바로 서버가 터졌다. t2.micro(1) 로 다시 올려서 진행했는데 docker 이미지를 다운받는 거 까지와 openjdk를 다운 받는거 까지는 문제가 없었다. 여기서 ..

Spring 2023.04.14