개발
-
[BOJ] 11508 2+1 세일 - C++개발/알고리즘 & PS 2024. 4. 1. 13:16
https://www.acmicpc.net/problem/11508 11508번: 2+1 세일KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두www.acmicpc.net아이디어최소한의 값을 지불하려면 무료로 받는 제품의 가격을 최대한 크게 만들어야 한다. 다만, 무료로 받을 수 있는 제품은 3개 중 가장 싼 제품이기에 다른 두 제품이 비쌀수록 큰 할인을 받을 수 있다. 따라서, 내림차순으로 정렬한 후 3개씩 묶어 사면된다. 코드#include #include using namespace std;int main() { cin.tie(nullptr); ..
-
[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이 되고 이 값의 최댓값을 찾아야 한다.아이디어$A_n$을 각..
-
[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 엔티티필자의 user 엔티티의 스키마는 다음과 같다.이름타입비고idintPRIMARY KEYemailString..
-
[BOJ] 17532 여러분의 다리가 되어 드리겠습니다! - C++개발/알고리즘 & PS 2024. 1. 13. 23:20
https://www.acmicpc.net/problem/17352 17352번: 여러분의 다리가 되어 드리겠습니다!선린월드에는 N개의 섬이 있다. 섬에는 1, 2, ..., N의 번호가 하나씩 붙어 있다. 그 섬들을 N - 1개의 다리가 잇고 있으며, 어떤 두 섬 사이든 다리로 왕복할 수 있다. 어제까지는 그랬다. "왜 다리www.acmicpc.net아이디어n개의 섬이 n-1개의 다리로 모두 이어져 있다가 하나가 끊어졌으므로 2개의 그룹으로 섬을 분류할 수 있다. 각 그룹에서 섬을 하나씩 뽑아 서로 이으면 모든 섬을 다닐 수 있다.여러 섬이 서로 이어져있는지 확인하기 위해 Union-Find를 사용한다. 단계이어진 다리에 대해 Union-Find 수행서로 다른 그룹인 두 섬을 출력하면 되는데 아무 경우..
-
[Spring Boot] 에러 메세지 커스터마이징 하기개발/개발일지 2023. 12. 14. 23:53
스프링 부트 3이전의 구버전에서는 ResponseEntityExceptionHandler을 상속해서 아래의 메소드를 오버라이딩하는 방식으로 접근할 수 있었다.@Overrideprotected ResponseEntity handleMethodArgumentNotValid( MethodArgumentNotValidException ex, HttpHeaders headers, WebRequest request) { ...} 스프링 부트 3부터는 상속대신 어노테이션을 통해 접근하는 것으로 바뀌었지만 내부 구현 자체는 똑같다. 필자는 HTTP 응답을 일관적으로 data, message, status필드로 구성하고 있으므로 이 형식에 맞춰 구현했다. @ControllerA..
-
[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가 반환된다. 그렇다고..
-
Spring boot 초기 세팅 및 DB 연결개발/개발일지 2023. 12. 3. 20:43
portpolent의 백엔드를 위해 Spring Boot와 DB를 설정하고 연결해 HTTP 요청을 잘 처리하는지 확인한다. IntelliJ Ultimate와 MariaDB를 사용한다.Spring Boot 프로젝트 시작하기인텔리제이에 spring boot프로젝트를 바로 만들 수 있는 기능이 있어서 그걸 사용했지만 https://start.spring.io/ 에서 생성해도 동일하다. 자바는 17 버전, Gradle은 Kotlin, 프로젝트 언어는 자바, 스프링 부트 3.2 버전을 사용한다. 개발에 필요한 여러 의존성도 같이 추가한다.WebMariaDB DriverJPAValidationSecurityLombok DB 연결하기JPA를 추가하고 스프링 프로젝트를 실행하면 오류와 함께 바로 종료된다. DB와 연..