전체 글
-
[BOJ] 20153 영웅이는 2의 거듭 제곱을 좋아해! - C++개발/알고리즘 & PS 2024. 3. 29. 23:27
https://www.acmicpc.net/problem/20153 20153번: 영웅이는 2의 거듭 제곱을 좋아해! 영웅이는 2의 거듭 제곱을 좋아해! 첫째 줄에 자연수 N (1 ≤ N ≤ 2,222,222)이 주어지고, 둘째 줄에는 N개의 자연수 A (1 ≤ A ≤ 2,222,222)가 주어진다. www.acmicpc.net 문제 해석 영웅이는 어떤 자연수 $A_n$을 2의 거듭제곱의 합으로 표현한다고 했는데 2진수로 나타내는 것과 같다. $A_n$ 중 최대 한 개의 자연수를 제외할 수 있다. 즉, 하나도 제외하지 않아도 된다. $2^x$가 홀수개면 $2^x$를 결과에 더한다. 즉, 2진수로 표현했을 때 1이 홀수개 존재하는 자리는 1, 짝수개라면 0이 되고 이 값의 최댓값을 찾아야 한다. 아이디어 ..
-
[BOJ] 14606 피자 (Small) - C++개발/알고리즘 & PS 2024. 3. 29. 14:08
https://www.acmicpc.net/problem/14606 14606번: 피자 (Small) 예제1의 입력이 1이므로, 게임 시작부터 갑이 분리할 수 있는 피자탑이 없습니다. 따라서 갑이 얻는 즐거움은 0입니다. 예제2의 정답 3은 다음과 같은 과정을 통해 얻어집니다. 먼저 놀이를 시작 www.acmicpc.net 아이디어 $n$개의 피자탑을 쪼갰을 때 가장 큰 즐거움을 얻으려면 짝수의 경우 $\frac{n}{2}$개, 홀수의 경우 $\frac{n}{2}$, $\frac{n}{2} + 1$개로 쪼개야 한다. 그리고 쪼개진 피자탑을 다시 쪼개서 $1$개가 될 때까지 얻을 수 있는 즐거움을 모두 더해주면 $n$개의 피자탑을 쪼갰을 때 얻을 수 있는 최대의 즐거움이다. $n$개의 피자탑을 쪼개 얻을 ..
-
[Spring Boot] Entity builder 설정하기개발/Spring Boot 2024. 1. 15. 03:05
Spring Boot에서 Entity를 만들면 id와 다른 여러 필드로 구성한다. repository에 save 할 때 Entity의 instance를 만들어야 하는데 Lombok의 @AllArgsConstructor를 통해서 객체를 만들 수 있지만 필드의 순서나 변경이 생기면 관련 로직이 모두 망가지는 문제가 있다. 또, id같이 직접 지정하지 않아도 되는 필드에 임의로 값을 넣어야 하는 불편함도 있다. JPA에 의해서 자동으로 id값이 변경되어 저장되긴 하지만 의도하지 않은 동작을 일으킬 우려가 있다. Lombok에서 제공하는 @Builder를 사용하면 이런 문제를 해결할 수 있다. User 엔티티 필자의 프로젝트인 portpolent의 user 엔티티의 스키마는 다음과 같다. 이름 타입 비고 id ..
-
[Portpolent] 회원가입개발/개발일지 2023. 12. 24. 12:41
유저 기능을 위한 회원가입을 구현한다. 스펙과 파일 구조는 아래와 같다. 데이터베이스는 MariaDB를 사용하고 세션은 나중에 바뀔 수도 있지만 메모리에 저장한다. 가입에 필요한 이메일, 핸들, 닉네임(유저네임), 비밀번호를 POST 요청으로 받아서 validation후 DB에 저장한다. 물론 비밀번호도 암호화 해야 한다. DTO public record SignUpDto( @NotBlank(message = "Email Required") @Email(message = "Email pattern mismatch") @Size(max = 100) String email, @Size(min = 4, max = 20) @Pattern(regexp = "[a-z0-9]{4,20}", message = "Han..
-
[Spring Boot] 에러 메세지 커스터마이징 하기개발/개발일지 2023. 12. 14. 23:53
스프링 부트 3이전의 구버전에서는 ResponseEntityExceptionHandler을 상속해서 아래의 메소드를 오버라이딩하는 방식으로 접근할 수 있었다.@Overrideprotected ResponseEntity handleMethodArgumentNotValid( MethodArgumentNotValidException ex, HttpHeaders headers, WebRequest request) { ...} 스프링 부트 3부터는 상속대신 어노테이션을 통해 접근하는 것으로 바뀌었지만 내부 구현 자체는 똑같다. 필자는 HTTP 응답을 일관적으로 data, message, status필드로 구성하고 있으므로 이 형식에 맞춰 구현했다. @ControllerA..
-
@NotNull, @NotEmpty, @NotBlank 차이개발/Spring Boot 2023. 12. 14. 23:13
Spring Validation의 NotNull, NotEmpty, NotBlank 등의 검증을 하게 되는데 저 셋의 차이를 잘 모르겠어서 찾아보고 정리한다. null "" " " NotNull X O O NotEmpty X X O NotBlank X X X 다만, @NotBlank를 사용한다고 해도 " hi" 같은 완벽하게 비어있지 않은 문자열은 걸러낼 수 없다. 이런 경우 Pattern을 통해 정규표현식을 사용하거나 다른 방법을 사용해야 한다. 에러 메세지 커스터마이징 하기 validation을 통과하지 못했을 때 반환되는 message는 Bad Request뿐이다. 어떤 필드가 문제가 있는지 알려주고 싶다. 에러 메세지를 커스터마이징 할 수 있는데 자세한 내용은 아래 글을 참고하시라. [Spring..
-
[Spring Boot] 값 검증하기 - Spring Validation개발/개발일지 2023. 12. 4. 15:46
프로젝트에서 회원가입을 구현하기 위해서 필요한 정보를 dto로 전송받고 있었다.signUp(@RequestBody SignUpDto dto) {public record SignUpDto( String email, String handle, String username, String password) {}코틀린에서는 String타입에 null이 들어갈 수 없기 때문에 모든 필드를 작성해야 하지만, 자바에서는 몇 필드가 없거나 null이어도 그대로 null값으로 전송된다. portpolent에서는 Entity의 설정에 nullable을 false로 해놨기 때문에 SQL Exception이 나고 결과적으로 500 Internal Error가 반환된다. 그렇다고..