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

Kotlin152

[Kotlin] 백준 12789 : 도키도키 간식드리미 문제 링크 12789번: 도키도키 간식드리미 인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두 www.acmicpc.net 문제 해설 스택을 사용하여 문제를 해결할 수 있다. 간식을 받기 위해서는 1번부터 순서대로 간식 받는곳으로 이동해야 한다. 그런데 줄이 뒤죽박죽 섞여있어서 왼쪽에 있는 1열의 공간을 이용하여 줄을 순서대로 간식을 받을 수 있게 해야한다. 이 1열의 공간을 일종의 스택으로 취급하여 문제를 해결하면 된다. 입력받은 학생 번호 순서대로 아래와 같이 간식 받기를 시도한다. 만약 현재 간식을 받아야 할 번호와 줄 맨 앞의 학생 번호가 일치하지 않는다면 대기 공.. 2023. 8. 9.
[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.
[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.
[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.
[Kotlin] 백준 14943 : 벼룩 시장 문제 링크 14943번: 벼룩 시장 벼룩시장에서 사람들이 벼룩을 사고 판다. 놀랍게도 각 사람들이 사려고 하는 벼룩의 합과 파는 벼룩의 합은 같다. 벼룩을 사거나 파는 사람들은 서로 일렬로 길게 서 있으며, 인접한 가게 사이 www.acmicpc.net 문제 해설 각 사람들이 사려고 하는 벼룩의 합과 파는 벼룩의 합이 같다는 점이 문제 풀이에 큰 도움이 된다. 벼룩을 가장 저렴하게 배달하려면 결국 가장 가까운 사람들에게 벼룩을 배달해야 한다. 문제에서 양수는 벼룩을 파는 사람, 음수는 벼룩을 사는 사람이라는 조건이 있다. 사려고 하는 벼룩의 합이 파는 벼룩의 합과 같고, 벼룩을 가장 저렴하게 배달하려면 가장 가까운 사람에게 배달해야 하기 때문에 시작점에서 출발하여 각 지점의 모든 벼룩을 배달할 벼룩에 추.. 2023. 5. 15.