본문 바로가기
  • 개발하는 곰돌이

분류 전체보기204

[Kotlin] 백준 13305 : 주유소 문제 링크 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 문제 해설 그리디 입문 문제. 문제의 내용 중에 기름통의 크기가 무제한이라는 언급이 있다. 기름을 무한정 축적할 수 있기 때문에 문제를 쉽게 해결할 수 있다. 마지막 도시까지 이동하는 최소 비용을 구하기 위해서는 다음 도시로 이동해가면서 현재 도시까지의 가장 저렴한 기름값과 남은 거리를 계산하여 더해주면 된다. 각 도시마다 주유소가 있다고 되어있지만 마지막 도시가 곧 도착지점이기 때문에 계산 과정에 포함되지 않아서 굳이 입력받을 필요는 없.. 2023. 7. 27.
[JWT] Access Token의 한계와 Refresh Token의 필요성 [수정사항] 2023-08-20 : 자바 코드의 TokenProvider 클래스에서 리프레시 토큰이 일치하는지 검사하는 메소드가 누락된 부분 수정 목차 들어가기 전에 이전에 스프링 시큐리티와 JWT를 이용한 사용자 인증을 구현한 프로젝트에 대한 글에서 리프레시 토큰을 언급한 적이 있다. 그래서 리프레시 토큰에 대해 다뤄보면서 기존에 JWT로 사용자를 검증하던 프로젝트에 리프레시 토큰을 적용해보려고 한다. 다만 리프레시 토큰의 구현 방법에 대해 깊게 이해하고 있는 것이 아니기 때문에 틀린 내용이 있을 수 있다. Access Token? Refresh Token? 액세스 토큰은 사용자에 대한 정보를 담고 있어서 서비스에 접근(Access)할 수 있는 토큰을 의미한다. 이전 예제 프로젝트에서 사용자 검증을 위.. 2023. 7. 19.
[Kotlin] 백준 1021 : 회전하는 큐 문제 링크 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 문제 해설 덱의 양방향 삽입, 삭제 연산을 통해 회전하는 큐를 구현할 수 있다. 수를 뽑아내기 위한 인덱스는 항상 가장 앞으로 고정되어 있으므로 주어진 입력의 순서대로 수를 뽑으려면 원소들을 좌우로 이동시키면서 주어진 수가 가장 앞으로 오게 만들어야 한다. 예제 2의 경우는 아래 그림과 같은 과정을 거치게 된다. 이 때 뽑아낼 수가 큐의 가장 앞에 오려면 왼쪽 또는 오른쪽 중에 더 가까운 쪽으로 \(x\)번 수를 이동시켜야 한다. 이 방향은 큐에서.. 2023. 7. 11.
[WebClient] Spring WebClient로 HTTPS 통신하기(sun.security.provider.certpath.SunCertPathBuilderException 해결) 목차 시작하기 전에 이전에 Spring WebClient로 HTTPS를 사용하는 웹사이트에 연결을 시도할 때 SunCertPathBuilderException이 발생하는 것을 해결하기 위해 자바에서 신뢰하는 인증서 목록에 해당 서버의 인증서를 추가하는 것으로 해결하는 글을 작성한 적이 있다. 그 당시에는 WebClient를 사용하는 방법에 익숙치 않다보니 서버마다 인증서를 추출해서 신뢰하는 인증서 목록에 추가하는 비효율적인 방법을 사용했는데, 모든 환경에서 이런 복잡한 절차 없이 WebClient를 사용한 HTTPS 통신이 가능하다는 것을 알게 되어 정리하려고 한다. 주의사항 : 이 방법은 검증 없이 모든 인증서를 신뢰하게 만들기 때문에 실제 제품에서 함부로 사용하면 안된다. 아무 설정을 하지 않은 경우.. 2023. 7. 6.
[Kotlin] 백준 2485 : 가로수 문제 링크 2485번: 가로수 첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가 www.acmicpc.net 문제 해설 각 가로수의 거리 간격이 동일해지도록 새로운 가로수를 심어야한다. 단순히 생각하면 각 가로수 사이의 거리를 구해서 거리의 최소값 간격으로 심으면 될 것 같지만 예제 2번의 경우가 반례가 된다. 이 경우에는 각 가로수 사이의 거리가 4, 6, 6이 되어 최소 거리가 4가 된다. 이렇게 되면 2부터 4의 간격으로 나무를 심게 되면 [2, 6, 10, 12, 14, 18]이 되기 때문에 각 가로수 사이의 거리가 일치하지 않는다. 이 문제는.. 2023. 7. 5.
[Spring] WebClient로 외부 API를 호출하여 받은 JSON을 객체로 역직렬화할 때 대문자 필드가 바인딩되지 않는 문제 문제의 배경 기존에 WebClient로 외부 API를 호출하여 받은 JSON을 Gson 라이브러리를 통해 JsonObject로 받아서 사용하고 있던 것을 좀 더 객체지향스럽게(?) 변경하기 위해 자바 객체로 받아서 처리하도록 리팩토링하는 작업을 하고 있었다. 아래는 API의 응답으로 받는 JSON과 기존에 JSON을 JsonObject로 받아서 사용하던 코드의 일부이다. { "status": "success", "error": null, "listData": [ { "CLIENT_CODE": "123456", "DATE": "2023-06-01", "AMOUNT": 12345 }, ... ] } public Mono apiResponse(Map params) { MultiValueMap formData .. 2023. 6. 29.
[Kotlin] 백준 1002 : 터렛 문제 링크 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 문제 해설 2개의 점과 각 점에서 류재명까지의 거리가 주어지고 이를 이용하여 류재명이 있을 수 있는 좌표의 수를 구하는 문제이다. 문제를 잘 보면 조규현과 백승환의 좌표를 각각 A, B라고 했을 때, A가 중심이고 반지름이 r1인 원과 B가 중심이고 반지름이 r2인 원이 만나는 점의 개수를 구하는 문제라는 것을 알 수 있다. 이제 각 경우에 대해 그림을 보면서 생각해보자. 1. 두 원의 접점이 무수히 많은 경우 두 원의 중심과 반지름의 길이가 모두 같은 경우는 곧 두 원이 일치하는 경우이다. 문제의 입력.. 2023. 6. 22.
[Java] Java 14부터 추가된 Record 타입과 Kotlin의 Data Class 비교 목차 들어가기 전에 자바 14부터 코틀린의 Data 클래스와 유사한 Record라는 클래스가 추가되어 자바 16에서 정식으로 지원되기 시작했다. 그동안 자바에서 DTO 등의 클래스를 만들 때는 Lombok의 도움을 받아 @Data 어노테이션을 붙이는 경우가 많았지만 Record 클래스가 추가되어 이러한 필요성이 줄어들게 되었다. 하지만 자바의 Record 클래스와 코틀린의 Data 클래스는 비슷하지만 다른 점이 있다. 이에 대해 정리해본다. Record 클래스의 기본 구조와 사용법 Record 클래스는 아래와 같은 구조로 선언된다. public record Member( String account, String name, int age ) { ... } 클래스 명 뒤에 소괄호로 메소드의 파라미터를 지정하.. 2023. 6. 14.