전체 글 244

플로이드-워셜(Floyd-Warshall) 알고리즘

플로이드-워셜 알고리즘 가중치 그래프에서 만들 수 있는 모든 두 정점 사이의 최단 거리를 구하는 알고리즘이다. 이 그래프를 사용하기 위해선 가중치가 음이 아니여야 한다.(음수이면 무한정으로 음수를 더함) 플로이드 워셜 알고리즘은 최단 거리를 구하기 위해 동적 프로그래밍 방식을 사용한다. 먼저 그래프에서 모든 노드로 가는 최단 거리를 2차원 배열로 만든다. 이때 자기 자신(1 -> 1)으로 가는 최단 거리는 0이다. 또한 갈수 없는 노드는 무한으로 표현한다. 프로그램에서는 무한대 표현이 불가능함으로 무한대를 나타낼 수 있는 충분히 큰 수로 대체한다. 2차원 배열을 모든 정점의 개수가 n개일 때 n * n형태의 배열이 만들어진다. 1 2 3 4 5 1 0 1 3 - - 2 1 0 4 7 - 3 3 4 0 -..

알고리즘 2023.08.17

[Spring] Controller와 RestController의 차이

@Controller 스프링의 전통적인 컨트롤러 @Component의 구체적인 버전이다. MVC 패턴에서의 Controller 역할임을 알려준다. classpath scanning을 통해 구현된 클래스를 자동으로 인식할 수 있게 해준다. -> 좀 더 공부 필요 주로 @controller와 @RequestMapping을 조합하여 요청 관련 메소드에 사용한다. @Controller를 사용하는 요청 관련 메소드에 @ResponseBody를 달아서 HttpResponse로 돌려주도록 만든다. @RestController 스프링 4.0버전에서 처음 소개됐으며, RESTful 웹 서비스를 쉽게 만들수 있도록 해줌 @Controller의 구체적인 버전이다. @RestController는 @Controller와 @Re..

Java/Spring 2023.08.17

스프링 3.0과 스프링 시큐리티 6에 대한 정보

스프링부트 3.0이상 Spring Security 기본 세팅 (스프링 시큐리티) - Nahwasa 스프링부트 3.0이상 Spring Security 기본 세팅 (스프링 시큐리티) 목차 [수정 사항] 2023-03-29 : 커스텀 어노테이션 적용하는 부분에서 소스코드에 잘못 들어간 코드가 있어서 삭제 1. 시작하기 전에 1.1 설정 이해 보다는 당장 시큐리티 설정 복붙이 필요한 분들에 nahwasa.com 여기 블로그를 참조해보자!

Java/Spring 2023.08.15

[자바 디자인 패턴] 싱글톤 패턴

문제 지금 게임의 환경 설정에 대한 부분을 구현하고 있다. 환경 설정은 그래픽, 소리와 같이 게임의 전반적인 요소에 대한 정보를 가지고 있기 때문에 모든 영역에서 환경 설정에 대한 정보를 제공할 수 있어야 한다. 또한 여러 개의 환경설정이 동시에 존재하면 일관성에 문제가 생기기 때문에 환경 설정은 한 개만 존재해야한다. 이를 해결하려면 어떻게 해야 할까? 싱글톤 패턴이란? 싱글톤 패턴이란 클래스에 인스턴스가 하나만 존재하게 만드는 것이다. 일반적으로 클래스를 생성한다는 것은 여러 개의 인스턴스를 생성하려는 목적으로 만들지만 데이터베이스에 접속하기 위한 클래스를 만든다고 가정했을 때 여러 인스턴스가 동시에 데이터베이스에 접근하도록 한다면 문제가 생길 것이다. 이런 문제를 해결하기 위해 오직 하나의 인스턴스..

[JAVA] 프로그래머스 멀리 뛰기

프로그래머스 멀리 뛰기 문제를 잘 보면 재미있는 규칙이 나온다. k가 1과 2로 이루어진 배열일 때 f(k)는 k 배열 속에 있는 1과 2를 나열하는 함수라고 해보자. 이때 동일한 숫자끼리 자리가 바뀌어도 하나의 경우의 수로 본다. 그러면 n = 1일 때, f([1]) = 1 n = 2일 때, f([2]) + f[1] = 2 n = 3일 때, f([1, 1, 1]) + f[1, 2] = 1 + 2 = 3 n = 4일 때, f([1, 1, 1, 1]) + f[1,1, 2] + f[2, 2] = 1 + 3 + 1 = 5 n = 5일 때, f([1, 1, 1, 1, 1]) + f[1,1, 1, 2] + f[1, 2, 2] = 1 + 4 + 3 = 8 n = 6일 때, f([1, 1, 1, 1, 1, 1]) +..

Java 2023.08.10

[JAVA] 최대 공약수와 최소 공배수 구하기

알고리즘 문제를 풀다보면 최대 공약수와 최소 공배수를 가끔 볼 때가 있는데 이에 대해 정리를 좀 해보려고 한다. 먼저 최대 공약수 자바코드는 다음과 같다. public int GCD(int a, int b) { while(true) { if(a % b == 0) return b; int r = a % b; a = b; b = r; } } 여기서 최대 공약수를 구하기 위해 유클리드 호제법을 사용했는데 위키백과에 따르면 유클리드 호제법은 다음과 같다. 즉 a mod b를 했을 때 나머지를 r이라고 하면 a, b의 최대 공약수는 b와 r의 최대 공약수와 같고 r = 0이면 b가 최대 공약수라는 것이다. 이걸 코드로 표현하면 위와 같은데 여기서 a ≥ b라는 조건때문에 크기를 비교하여 a, b를 설정하는 코드를..

Java 2023.08.09

[JAVA] String과 char

프로그래머스 문제를 풀다 String과 char의 성능에 대한 문제를 발견했다. Char를 이용한 비교 class Solution { boolean solution(String s) { boolean answer = true; int index = 0; char ch = ' '; if(s.charAt(0) == ')') return false; for(int i = 0; i < s.length(); i++) { ch = s.charAt(i); if(ch == '(') index++; else index--; if(index < 0) return false; } if(index == 0) return true; return false; } } String을 이용한 비교 class Solution { boo..

Java 2023.08.07

[JAVA] Comparator와 람다함수를 이용한 정렬

프로그래머스 문제를 풀면서 Comparator, lambda 함수를 이용하여 HashMap을 정렬할 때가 있는데 이때 항상 내림차순으로 정렬하되 값이 같으면 오름차순으로 정렬하는 문제가 나올 때가 있다. 그런 문제는 어김없이 Comparator나 lambda 함수를 이용해 정렬을 시도하는데 정렬하는 내용을 보면 내림차순에 대한 정렬기준은 있지만 오름차순에 대한 정렬기준은 없다. 그래서 어떤 방식으로 정렬되는지 실험을 좀 해보았다. import java.util.*; public class Main { public static void main(String[] args) { Map map = new HashMap(); map.put("A", 10); map.put("C", 10); map.put("B", ..

Java 2023.08.03

[JSP&Servlet] intellij에서 new servlet 문제

대부분 JSP&Servlet 책을 보면 eclipse를 이용해서 하지만 필자는 intellij에서 하고 싶어서 환경 세팅을 하는 중 2일간의 삽질 끝에 재미있는 사실을 알아냈다. 먼저 영상에서는 java enterprise나 web application 등으로 만드는데 필자가 사용하는 버전은 2023.1버전으로 여기서는 jakarta EE로 만들면 우리가 원하는 환경을 만들 수 있다. (jakarta EE로 만드는 법은 검색하면 잘 나옴) 또한 저렇게 한 후 new servlet을 통해 서블릿 파일을 만드는 경우가 많이 있는데 2023.1 버전에서는 지원을 하지 않는다. 그러므로 만약 사용하고 싶다면 내가 메뉴를 만들어 줘야 한다. 그 예시는 아래 링크로 걸어놓는다. Cannot create servle..

Java/JSP&Servlet 2023.06.29

[Node.js] 폴더 구조

node.js를 공부하다가 public폴더의 역할과 폴더 구조가 궁금해서 조금 알아보았다. 일단 폴더 구조를 사진으로 먼저 보자! 일반 public폴더의 의미는 클라이언트에게 줄 static파일들을 모아둔 곳이다. static file은 자바스크립트 파일이나 이미지 파일, css 파일과 같은 파일을 말한다. 여기에 있는 파일은 주소를 이용해서 접근이 가능하다. 이때 주소는 파일경로에서 public을 빼고 들어가면 된다. 예를 들어 아래와 같은 경우 원래 경로는 localhost:8001/public/main.css이지만 접속은 public을 제외한 localhost:8001/main.css로 접속하면 파일을 볼 수 있다. views폴더에는 html을 넣는다. 여기서 html도 같이 pulbic에 두면 안..

node.js 2023.06.23