분류 전체보기
-
백준 알고리즘 풀이 (Gold) 1753번, 1655번알고리즘 2023. 7. 25. 13:16
1. 최단 경로 (1753번) 단방향 간선과 간선에 대한 가중치가 주어졌을 때, 시작점에서 다른 정점으로의 최단 경로를 출력하는 문제입니다. 정점에서 다른 정점으로 이동하는 최단 거리를 구하는 문제로 다익스트라 알고리즘을 활용했습니다. 첫 번째 시도 기존의 최단 거리를 구하는 문제들처럼 dfs와 정점까지의 가중치의 합을 저장하기 위한 dp배열을 선언하여 문제를 풀어주었습니다. stack = [[K,0]] dp[K] = 0 while stack: node,weight = stack.pop() for v,w in edges[node]: if weight+w
-
Spring boot todo list 만들기백엔드 2023. 7. 21. 18:28
이번 포스팅은 스프링부트에 대한 정확한 이해가 동반되지 않은 상태에서 작성된 글입니다. 잘못된 부분에 대해서 댓글 남겨주시면 수정하도록 하겠습니다. spring boot를 제대로 배워보기 전에 todolist를 먼저 만들어보게 되었습니다. spring을 이용한 백엔드의 프로젝트 구조에 대해 많이 궁금했었는데 이번을 계기로 어느정도 파악해볼 수 있었습니다. 우선 백엔드의 구조는 model, repository, service, controller 이렇게 4가지 층이 있습니다. model 실제 데이터베이스에서 사용하는 데이터 Entity입니다. 개발 도메인에 활용되는 각각의 오브젝트입니다. repository 데이터베이스와 데이터를 주고 받기 위한 메서드를 명시한 인터페이스입니다. 데이터를 주고 받는 메서드..
-
백준 DP 문제 풀이 (Silver) 11053번, 1932번, 1912번, 9461번 python알고리즘 2023. 7. 21. 15:03
1. 가장 긴 증가하는 부분 수열 (11053번) 숫자 수열이 주어질 경우 가장 길게 증가하는 부분 수열의 길이를 구하는 문제입니다. 예시) {10,20,10,30,20,50} 인 경우 가장 긴 증가하는 부분 수열은 {10,20,30,50}이고 길이는 4입니다. 앞에서부터 차례로 자신을 포함하는 가장 긴 부분 수열을 구하면 됩니다. 자신을 포함한 가장 긴 수열을 구하는 방법은, 자신보다 앞에 위치하면서 자신보다 작은 숫자 중 현재 가장 긴 증가하는 부분 수열을 가지는 숫자에 자신을 붙이면 됩니다. 위의 예시 중 4번째 인덱스의 30을 포함한 부분 수열을 구하는 예를 들어보겠습니다. 30보다 앞에 위치한 숫자 중 30보다 작은 10,20,10 중 증가하는 부분 수열 중 가장 긴 숫자는 20입니다. 그러므로..
-
자바 데코레이터 패턴, 쓰레드, 멀티 쓰레드 프로그래밍언어/Java 2023. 7. 16. 16:23
데코레이터 패턴 객체에 동적으로 새로운 기능을 제공해 줄 수 있어 상속보다 유연한 구현이 가능합니다. 전체 클래스에 새로운 기능을 추가할 필요는 없지만, 각 객체에 새로운 기능을 추가해줘야 할 경우 사용합니다. 자신이 추가하려는 인터페이스를 포함하고 있으므로, 클라이언트에게 감춰진 형태로 사용 가능합니다. 데코레이터는 다른 데코레이터나 컴포넌트를 포함해야 합니다. 자바의 입출력 스트림은 decorator pattern입니다. Component : 동적으로 추가할 가능성이 있는 객체에 대한 인터페이스입니다. Concrete Component : 추가적인 기능이 실제로 구현되어야 하는 클래스입니다. Decorator : 기능을 추가할 Component를 구성요소로 가지면서 Component 인터페이스를 구현..
-
자바 스트림, reduce, 예외 처리, logging언어/Java 2023. 7. 14. 18:17
스트림 자료의 대상과 관계없이 동일한 연산을 수행합니다. 배열과 컬렉션을 대상으로 연산을 수행합니다. 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 합니다. 한 번 생성하고 사용한 스트림은 재사용할 수 없습니다. 스트림 연산은 기존 자료를 변경하지 않습니다. 중간 연산과 최종 연산으로 구분됩니다. 중간 연산은 여러 개의 연산이 적용될 수 있지만, 최종 연산은 마지막에 한 번만 적용됩니다. 최종 연산이 호출되어야 중간 연산에 대한 수행이 이루어지고 결과가 만들어집니다. 중간 연산에 대한 결과를 연산 중에는 알 수 없습니다.(이를 지연 연산이라고 합니다.) 스트림 생성 int[] arr = {1,2,3,4,5}; int sum = Arrays.stream(arr).sum(); long count = Ar..
-
자바 내부 클래스, 람다식, 함수형 프로그래밍, 함수형 인터페이스언어/Java 2023. 7. 13. 23:46
내부 클래스(inner class) 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 연관된 경우이거나, 다른 외부 클래스에서는 사용하지 않을 경우 선언됩니다. 중첩 클래스라고도 합니다. 인스턴스 내부 클래스 내부적으로 사용할 클래스를 선언하여 사용합니다. (private으로 선언하는 것이 권장됩니다.) 외부 클래스가 생성된 후 생성됩니다. 정적 변수나 정적 메서드 선언이 불가합니다. (클래스가 정적 클래스가 아니므로 인스턴스 변수, 메서드만 사용 가능합니다.) class Outer { int outerMember; private Inner innerMember; public Outer(){ innerMember = new Inner(); } public useInner(){ inne..
-
자바 자료구조, 제네릭, 컬렉션언어/Java 2023. 7. 11. 10:49
자료구조 프로그램에서 사용할 많은 데이터를 메모리 상에서 관리하는 여러 구현 방법들입니다. 효율적인 자료구조가 성능 좋은 알고리즘의 기반이 됩니다. 자료의 효율적인 관리는 프로그램의 수행속도와 밀접한 연관이 있습니다. 여러 자료 구조 중에서 구현하려는 프로그램에 맞는 최적의 자료구조를 활용하기 위해 다양한 자료구조에 대한 이해가 필요합니다. 배열(Array) 동일한 데이터 타입을 순서에 따라 관리하는 자료 구조입니다. 정해진 크기가 있습니다. 요소의 추가와 제거 시 다른 요소들의 이동이 필요합니다. 배열의 i번째 요소를 찾는 인덱스 연산이 빠릅니다. jdk 클래스로는 ArrayList와 Vector가 있습니다. 연결 리스트(Linked List) 동일한 데이터 타입을 순서에 따라 관리하는 자료구조입니다...
-
자바 Object, Class언어/Java 2023. 7. 10. 20:01
java.lang 패키지 import 하지 않아도 자동으로 import 됩니다. 많이 사용하는 기본 클래스들이 포함된 패키지입니다. String, Integer, System, ... Object 클래스 java.lang.Object 모든 클래스는 Object 클래스를 상속 받습니다(모든 클래스의 최상위 클래스). Object 클래스의 메서드 중 일부를 재사용해서 사용할 수 있다. 클래스 선언 시 컴파일러가 자동으로 extends Object를 추가합니다. toString() 메서드 객체의 정보를 String으로 바꾸어서 사용할 때 쓰입니다. String, Integer 클래스에 이미 재정의 되어 있습니다. 일반 클래스에 재정의해 사용할 경우 System.out.print() 출력 시 해당 리턴 값이 출..