목록전체 글 (73)

Java 프로젝트를 할때 필수적으로 Optional을 사용할 수 밖에 없었다. JPA 에서 findById와 같은 메서드가 Optional 값을 반환하기도 하고, NPE를 피하기 위해서 또한 optional을 적극적으로 사용했다. Kotlin + Spring 으로 프로젝트를 만들다가 이제 JPA Repository를 사용해야 할 때가 되었는데, 당연히 CRUDRespository 에서 제공하는 findById를 사용하니 java와 동일하게 Optional을 사용하여 반환을 하게 된다. 이렇게 되면 testRepository.findById(testId).orElseThrow(() -> new DataNotFounExeption)과 같이 Optional의 메서드들을 사용해야 한다. Kotlin은 nulla..

백앤드 서버의 API를 편하게 문서화 할 수 있는 툴들이 제공된다. JavaDoc과 같은 툴들이 기본적이지만, 좀 더 예쁜 UI를 제공하고, 실제로 API를 사용하게 도와주는 swagger ui가 많이 사용된다. springboot + kotlin에 swagger를 적용해본다. / 기본 구성 / SDK 17 springboot 3.1.4 kotlin 예전에는 springfox를 기반으로 한 swagger가 제공되었다. 하지만 2020년 이후로 더이상 버전업이 이루어지지 않고 있다. 여기서는 springdoc을 기반으로 해서 swagger를 적용한다. build.gradle.kt 의 dependencies 추가 dependencies { ... implementation("org.springdoc:spri..
Java와 Kotlin은 유사한듯 다른 생성자 형태를 가지고 있다. 이번에 작성한 Entity를 살펴보자. @Entity @Getter class Memo(title: String, description: String) : BaseEntity(){ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private val id: Long? = null @Column(nullable = false) private var title: String = title @Column(nullable = false) private var description: String = description @ManyToOne(fetch = FetchType.LAZY) @JoinCo..

코프링 공부를 하기 위해 사이드 프로젝트를 시작했다. 프로젝트 생성은 다른 블로그들이 많이 생략하고... 엔티티 생성부터 시작한다. 프로젝트의 기본 구조는 자기 자신을 부모로 들고 있으며, 자기 자신 여러개를 자식으로 들고 있는 메모장 형태이다. createDate와 lastModifiedDate는 모든 곳에서 기본적으로 사용할 예정이므로, BaseEntity 라는 이름의 abstact Class로 빼서 사용한다. @MappedSuperclass @EntityListeners(AuditingEntityListener::class) abstract class BaseEntity { @CreatedDate @Column(nullable = false, updatable = false) var createdD..

가장 간단한 브루트포스 문제. import kotlin.math.max fun main(){ val (n, m) = readln().split(" ").map { it.toInt() } val arr = readln().split(" ").map { it.toInt() } val sol: Solver = Solver() println(sol.solver(n, m, arr)) } class Solver{ fun solver(n: Int, m: Int, arr: List): Int{ var result = 0 for(i in 0 until n){ for(j in i+1 until n){ for(k in j+1 until n){ val sum = arr[i] + arr[j] + arr[k] if(sum

회사에서 intellij Ultimate를 사용하고 있어 springboot 시작이 쉬웠지만, 집에서 사용하는 community 버전으로 설정하려고 하니 잘 되지 않아 글을 정리한다. intellij community 에서는 pulgin을 통해 springboot를 설정 할 수 없어 https://start.spring.io/ 를 통해 springboot 프로젝트를 만들어야 한다. 이런 식으로 원하는 설정을 넣은 후 generate를 하면 zip 파일로 프로젝트를 받을 수 있다. 원하는 위치에서 압축을 푼 뒤, intellij에서 open을 하면 Community 버전에서 springboot 프로젝트를 사용할 수 있다.

간선의 cost 합을 최소화 하고, 각 집 사이에 경로가 항상 존재해야 한다는 조건이므로 MST를 사용하는 문제이다. https://00rigin.tistory.com/59 MST (Minimum Spanning Tree) 최소 신장 트리 MST 즉 최소신장트리 (최소 스패닝 트리)는 간선에 weight가 있는 그래프를 tree로 만들어 문제를 해결할때 유용하게 사용할 수 있다. 그래프를 최소 비용 간선을 가진 tree로 만드는 방법을 MST 라고 00rigin.tistory.com 단, 조건은 마을을 2개로 만들면서, 도로의 유지비를 최소화 해야하는 것이다. 따라서, MST로 마을을 재구성 한 후에, 가장 도로 유지비가 비싼 집 하나를 정하고, 그 집을 2번째 마을로 설정한다. 이렇게 할 경우, 두개의..

MST 즉 최소신장트리 (최소 스패닝 트리)는 간선에 weight가 있는 그래프를 tree로 만들어 문제를 해결할때 유용하게 사용할 수 있다. 그래프를 최소 비용 간선을 가진 tree로 만드는 방법을 MST 라고 한다. MST를 만들 조건은 1. 그래프 간선에 weight가 있을 경우 2. Cycle이 없어야 할 경우 라고 할 수 있다. MST는 kruskal 알고리즘을 사용하여 tree를 구성하는데, 아래와 같이 동작한다. 1. 가장 weight가 적은 간선을 선택 2. 선택된 간선에 연결된 두 노드가 같은 tree인지 확인한다. 3-1. 두 노드가 서로 다른 tree인 경우 같은 tree로 만들고 1로 돌아간다. 3-1. 두 노드가 같은 tree인 경우 1로 돌아간다. 이것을 반복할 경우, weigh..