공부 57

IntelliJ에서 Lombok 사용하기

자바 개발할때 어노테이션으로 간단하게 기능들을 설정할 수 있는 Lombok이라는 라이브러리가 있다. 이 라이브러리를 인텔리제이에서 설정하여 간단하게 사용하는 방법이다. 1. 의존성 설정 maven repository에서 롬복을 검색하여 최신 버전을 클릭하면 maven, gradle을 이용한 의존성 추가 방법이 나온다. gradle // https://mvnrepository.com/artifact/org.projectlombok/lombok providedCompile group: 'org.projectlombok', name: 'lombok', version: '1.18.16' maven org.projectlombok lombok 1.18.16 provided 위와 같은 방법으로 의존성을 추가해준다...

공부/IntelliJ 2020.11.29

PHP 8.0 출시! 새로운 기능 알아보기

php 8.0 버전이 정식 릴리즈 되었다. php 8.0 버전으로 큰 변화들에 대해서 몇가지만 간단하게 정리해 두었다. 1. JIT just in time 컴파일로 인하여 속도 향상이 예상된다. 간단하게 설명하면 런타임 중에 코드를 파싱하여 반복적인 작업의 성능을 향상하는 것이라고 한다. 2. Union types 자료형을 명시 할 때 다중타입이 가능해진다. nullable도 ? 혹은 |null로 표기 할 수 있다. 두 경우 모두 자바에선 불가능한 경우이다. (대신 옵셔널이나 제네렉으로 타입을 동적으로 사용하거나 null을 컨트롤 하는 방법이 있다) public function foo(Foo|Bar $input): int|float; public function foo(Foo|null $foo): voi..

공부/PHP 2020.11.29

[백준] 2231번 분해합

문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. 풀이 모든 경우를 확인하는 브루트 포스 알고리즘으로 풀 수 있다. 10까지는 없기 때문에 1..

공부/알고리즘 2020.11.29

[백준] 1541번 잃어버린 괄호

문제 세준이는 양수와 +, -, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 입력 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 출력 첫째 줄에 정답을 출력한다. 풀이 이 문제는 숫자의 더하기 식에서 괄호를 이용하여 최소값을 구하는 문제이다. 최소값을 구하기 위한 괄호는 빼기 연산이 나왔을 때 그..

공부/알고리즘 2020.11.28

[백준] 11399번 ATM

문제 인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다. 사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다..

공부/알고리즘 2020.11.26

[백준] 1931번 회의실배정

문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거..

공부/알고리즘 2020.11.24

[백준] 11047번 동전 0

문제 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 출력 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 풀이 동전을 어떻게 사용하여도 나누어 떨어지기 때문에 그리디 알고리즘을 사용하여 풀 수 있다. 그리디 알고리즘은 매 순간 최선의 선택을 하는 것을 말한다. (마치 매..

공부/알고리즘 2020.11.23

[백준] 2798번 블랙잭

문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 주어졌을 때, ..

공부/알고리즘 2020.11.22

Spring Data Rest 알아보기

개요 hateoas에 대해 관심을 갖고 찾던 중 spring-data-rest와 spring-data-jpa로 간단하게 crud가 가능하다는 것을 알게 되었다. (hateoas도 적용된다) 그래서 어떤것인지 확인해 보기 위해 간단하게 살펴 보았고 그 내용을 공유한다. 레이어가 간단하다. controller와 service 레이어가 없다. entity와 repository만으로 rest api가 생성된다.! 이 두개만 있으면 끝이다. 소스도 간단하다 package com.byeongukchoi.springdatarestexample.domain; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import o..

공부/Spring 2020.11.20

옵셔널(optional)과 람다(lambda)를 이용하여 JpaRepository에서 예외 처리하기

spring에서 JpaRepository의 findById를 이용하면 Optional 타입으로 반환이 된다. 처음에는 불편하기만 하였으나 이제 많이 편해져서 혹시라도 아직 불편하게 사용하는 사람들을 위해서 그 방법을 공유한다. 아래 4가지의 코드는 같은 로직을 가독성이 좋게 코드를 조금씩 수정한 것이다. 가나다 많이 이상하고 불편했던 경우 Optional optinalUser = userRepository.findById(id); // check for null if(optinalUser.isPresent()) { User user = optinalUser.get(); } else { throw new ResourceNotFoundException(); } 옵셔널 타입이 아닌 일반 객체로 받았을 경우 U..

공부/Spring 2020.11.17
728x90
반응형