분류 전체보기221 [Kotlin] 백준 31882 : 근수 문제 링크 : https://www.acmicpc.net/problem/31882문제 해설주어진 문자열에서 연속된 2로만 이뤄진 부분 문자열(이하 근수)들을 추출하여 점수를 구해야합니다. 근수들은 문자열 전체를 순회하면서 현재 숫자가 2라면 현재까지 구해진 부분 문자열에 2를 추가하고, 그 외의 경우에는 현재까지 구해진 부분 문자열을 리스트에 추가한 후 부분 문자열을 초기화하는 방법으로 구할 수 있습니다. 문자열을 모두 순회한 후 구해놓은 부분 문자열이 있다면 리스트에 추가해줍니다.for (num in s) { if (num == '2') { sb.append(2) continue } if (sb.isEmpty()) continue list.add(sb) .. 2024. 8. 22. [Spring/Spring Boot] 파일 다운로드와 multipart/form-data 업로드 컨트롤러 메소드 테스트 코드를 작성해보자 목차들어가기 전에최근에 파일을 다운로드 받는 컨트롤러 메소드와 파일을 업로드해서 처리하는 컨트롤러 메소드를 작성하면서 해당 컨트롤러 메소드가 제대로 돌아가는지 확인하려고 테스트 코드를 작성할 일이 있었습니다. 평소에 작성하는 테스트 코드는 평범한 요청과 응답을 가지는 로직에 대한 테스트 코드 뿐이었다 보니 파일 업로드/다운로드와 관련된 테스트 코드를 작성한다는게 상당히 생소했는데 나중에 까먹지 않으려고 기록해두려고 합니다. 본문상의 코드는 모두 코틀린으로 작성되어 있긴 하지만 가장 중요한 파일 업로드나 다운로드 검증 부분은 자바도 별반 다르지 않습니다.파일 업로드 테스트일반적으로 파일을 업로드하는 로직은 MultipartFile을 사용하는 경우가 많습니다. 이를 테스트하기 위해 스프링에서는 Multipa.. 2024. 8. 14. [Spring Data JPA] Java의 record 객체를 @EmbeddedId로 사용할 때 Could not set value of type 문제가 발생하는 경우 목차들어가기 전에자바로 프로젝트를 진행하다 보면 불변 객체를 쉽게 만들고 equals와 hashcode를 바로 만들어주면서 일반 클래스와 구분하기가 좋다는 점에서 값 객체 클래스를 만들 때는 레코드 클래스를 애용하고 있습니다. 그러다보니 엔티티 클래스에서 복합 기본키를 갖게 될 때 record 객체를 @EmbeddedId로 사용하려고 했는데 레포지토리에 엔티티를 저장하는 과정에서 오류가 발생해서 관련 내용을 정리해보려고 합니다. 레코드 클래스에 대한 내용은 이전에 어느정도 정리를 해놨습니다. [Java] Java 14부터 추가된 Record 타입과 Kotlin의 Data Class 비교목차 들어가기 전에 자바 14부터 코틀린의 Data 클래스와 유사한 Record라는 클래스가 추가되어 자바 16에서 정식.. 2024. 8. 2. [Spring] Spring REST Docs를 사용해서 API 명세서를 작성해보자 들어가기 전에기존에 진행했던 프로젝트들의 API 명세서를 작성할 때는 어노테이션만으로 API 요청 및 응답 정보를 생성할 수 있고, Postman 등의 툴 없이 API를 실행할 수 있다는 장점이 있어서 OpenApi에서 제공하는 Swagger-UI를 사용하고 있었습니다. 하지만 스웨거의 경우 어노테이션을 통해 API 문서를 생성하다보니 API가 변경되었을 때 어노테이션의 내용도 수정하지 않으면 실제 API 사양과 스웨거 문서 상의 API 사양이 일치하지 않는 문제가 있어 API 문서를 완전히 자동으로 생성할 수는 방법이 필요했습니다. 그렇게 자동으로 API 문서를 생성하는 방법에 대해 찾아보던 중 스프링에서 제공하는 Spring REST Docs라는 도구가 있다는 사실을 알게되어 해당 방법을 도입해보기로.. 2024. 7. 8. [MockMvc] MockMvc 테스트 시 한글이 깨져서 테스트에 실패하는 문제 목차문제의 상황Spring REST Docs를 공부해보기 위해 이전에 작성했던 코드의 컨트롤러 테스트 코드를 MockMvc를 사용해서 작성하고 있었다.@SpringBootTest@AutoConfigureMockMvc@AutoConfigureRestDocsclass AdminControllerTest @Autowired constructor( private val tokenProvider: TokenProvider, private val memberRepository: MemberRepository, private val mockMvc: MockMvc, private val objectMapper: ObjectMapper = ObjectMapper()) { @Test fun.. 2024. 6. 19. [Kotlin] 백준 6523 : 요세푸스 한 번 더! 문제 링크 : https://www.acmicpc.net/problem/6523문제 해설일종의 구현 문제. 따로 특별한 알고리즘이 필요하진 않다. 문제에서 각 사람들은 두번째에 걸렸을 때 술을 마시게 되고, 누구든 세 번 걸린다면 모두 집에 간다는 내용이 있다. 술을 마시지 않고 집으로 가는 사람의 수를 출력해야 하기 때문에 누군가 두번째 걸렸을 때 술을 마신 사람의 수를 더하고, 세번째 걸린다면 해당 테스트 케이스를 종료하면 된다. 각 사람들이 걸린 횟수를 기록하기 위해 HashMap을 사용한다. 정수배열을 사용해서 기록할 수도 있겠으나, 크기가 최대 10억인 정수배열을 선언하게 되어 어마어마한 메모리를 차지하게 되는 문제가 있어서 사용할 수 없다. 현재 사람의 번호가 \(x\)일 때 다음 사람의 번호.. 2024. 6. 10. [Kotlin] 백준 14715 : 전생했더니 슬라임 연구자였던 건에 대하여 (Easy) 문제 링크 : https://www.acmicpc.net/problem/14715문제 해설나름 간단한(?) 수학 문제. 별다른 알고리즘이 필요하진 않다. 슬라임은 2 이상의 에너지를 갖는 슬라임으로 계속 분할할 수 있다. 분할할 수 있는 슬라임이 존재하지 않을 때까지 슬라임을 분할한다는 것은 모든 슬라임의 에너지가 소수가 된다는 것이고, 모든 슬라임의 에너지가 소수가 되도록 분할한다는 것은 다시 말해 최초의 슬라임을 소인수분해하면 된다는 뜻이 된다. 문제에서 구해야 하는 값은 슬라임의 흠집 개수 = 슬라임을 분할한 횟수가 된다. \(K=7200\)인 경우를 생각해보자. \(K\)를 소인수분해하면 \(7200=2\times 2 \times 2 \times 2 \times 2 \times 3 \times 3.. 2024. 5. 31. [Kotlin] 백준 17612 : 쇼핑몰 문제 링크 : https://www.acmicpc.net/problem/17612문제 해설일종의 정렬 문제. 계산대를 우선순위 큐로, 빠져나온 고객을 리스트로 생각해볼 수 있다. 고객을 정렬해야 하니 고객 정보를 어떻게 할지 생각해보자. 각각의 고객은 회원번호와 계산해야 할 물건의 개수를 갖고 있다. 그리고 계산해야 할 물건의 개수는 계산에 걸리는 시간과 같다. 우선 계산대에 들어가는 순서부터 생각해보면 가장 시간이 적게 걸리는 계산대에 먼저 들어가고, 같은 시간이 걸리는 계산대는 번호가 빠른곳부터 들어가게 된다. 모든 고객은 계산대에 들어가게 되니 각 고객 번호와 계산에 걸리는 시간에 더불어 들어간 계산대 번호를 속성으로 넣어주고, 시간과 계산대 번호를 정렬 기준으로 정해준다.private class .. 2024. 5. 22. 이전 1 2 3 4 5 ··· 28 다음