Processing math: 100%
본문 바로가기
  • 개발하는 곰돌이

Kotlin162

[Kotlin] 백준 14277 : 등차 수열과 등비 수열 문제 링크 14277번: 등차 수열과 등비 수열 예제 4의 경우에 4, 20, 100, 452, 476, 500, 524, 548, 572, 596이 정답이다. www.acmicpc.net 문제 해설 문제만 보면 "그냥 등차 수열과 등비 수열을 set에 저장하고 크기를 출력하면 되는게 아닌가?" 싶지만 입력 범위에 함정이 있다. u의 범위가 1012까지, 즉 1조라는 큰 숫자이기 때문에 a와 b가 1이고 u가 1012이라면 등차 수열을 구하는데만 10,000초의 시간이 걸리게 될 뿐만 아니라 1조개의 Long타입을 set에 저장하게 되므로 7TB가 넘는 엄청난 양의 메모리를 차지하게 된다. 그렇기 때문에 좀 더 수학적인 방법의 접근이 요구된다. 등차 수열에 포함되는 1 이상, u.. 2022. 12. 21.
[Oracle] Spring Boot 프로젝트에서 Mybatis 세팅하기 with Kotlin 목차 기본 환경 IntelliJ Ultimate 2022.3 Spring Boot 2.7.6 Kotlin 1.7.21(JDK 11) Oracle 11g Swagger 3.0.0 mybaitis 2.3.0 Spring Boot 프로젝트에 Swagger 3.0.0을 적용하는 방법은 아래 포스트를 참고하면 된다. 2022.12.06 - [Spring Boot] - Kotlin 기반 Spring Boot 프로젝트에 Swagger 3.0.0 적용하기 Mybatis는 무엇인가? Mybatis는 Java에서 관계형 데이터베이스를 사용하는 개발을 더욱 수월하게 해주는 프레임워크로, 기존의 JDBC를 사용한 코드를 별도의 XML 파일로 분리하여 자바 코드상의 SQL을 모두 제거하고 관리를 편하게 해준다는 장점을 갖는다... 2022. 12. 20.
[Kotlin] 백준 9935 : 문자열 폭발 문제 링크 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 문제 해설 스택을 사용하여 해결할 수 있다. 문제 해결 과정은 다음과 같다. 먼저 문자열을 앞에서부터 순회하면서 스택에 문자를 삽입한다. 스택에 문자를 삽입하는 도중에 폭발 문자열의 마지막 글자가 나타나면 폭발 문자열의 길이만큼 스택에서 문자를 제거하여 폭발 문자열인지 체크할 문자열을 만든다. 이 때 스택에서 현재 스택의 크기가 폭발 문자열의 길이보다 작을 수 있기 때문에 EmptyStackException을 방지하기 위한 체크 로직을 .. 2022. 12. 19.
투 포인터(Two Pointer) with Kotlin 투 포인터(Two Pointer) 투 포인터(Two Pointer) 알고리즘은 배열이나 리스트에서 두 개의 점을 이동시키면서 원하는 결과를 얻어내는 알고리즘이다. 예를 들어 부분합을 구하는 문제에서 배열과 부분합을 구할 특정 인덱스가 주어지는 것이 아니라 특정 값이 주어지고 부분합이 주어진 값과 일치하는 구간의 수 또는 구간의 최대/최소 길이를 구해야 하는 경우를 생각해볼 수 있다. 이 경우에 누적합이 계산된 배열이 있어도 단순히 이중 반복문으로 답을 찾게 되면 O(n2)의 시간 복잡도를 갖게 되어 배열의 크기가 10만 정도만 되더라도 100억회의 연산을 해야하기 때문에 굉장히 비효율적이다. 이럴 때 투 포인터를 사용하는 것이 대안이 될 수 있다. 투 포인터는 각각 구간의 시작과 끝을 가리키.. 2022. 12. 18.
[Kotlin] 백준 1806 : 부분합 문제 링크 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 문제 해설 부분합과 투 포인터가 결합된 문제다. 부분합에 대한 내용은 아래 포스트를 참고하면 좋다. 링크 : 누적합(Prefix Sum)과 부분합(Partial Sum) with Kotlin 누적합을 저장할 크기가 n+1인 배열을 선언하고 1번째 인덱스부터 누적합을 저장해나간다. 이후 투 포인터를 사용해서 배열 위를 이동하기 시작한다. start부터 end까지의 합이 S 이상이라면 기존 구간 길이의 최소값과 현재 구간 길이.. 2022. 12. 17.
누적합(Prefix Sum)과 부분합(Partial Sum) with Kotlin 누적합(Prefix Sum) 일반적으로 배열의 n번째 인덱스까지의 합을 구할 땐 아래와 같이 반복문을 사용하여 계산하게 된다. fun sumOfArray(arr: IntArray, n: Int): Int { var sum = 0 for (i in 0..n) { sum += arr[i] } return sum } 이 경우는 합을 한 번만 구할 때는 문제없이 사용할 수 있으나, N=[n1,n2,n3,,nm]와 같은 m 개의 경우에 대해 각 n번째 인덱스까지의 합을 구하는 경우엔 n만큼의 연산을 m 번 반복하게 된다. 즉, 총 시간 복잡도는 O(nm)이 된다. 누적합은 배열의 요소가 변하지 않는다는 점을 이용한다. 원본 배열.. 2022. 12. 17.
Kotlin 기본 문법 9 : Kotlin의 다양한 클래스(Data Class, Enum Class, Sealed Class) 목차 개요 Kotlin에는 기본적인 클래스, 추상 클래스, 인터페이스 외에도 Data Class, Enum Class, Sealed Class가 존재한다. 물론 Enum Class는 Java에도 존재하는 개념이지만 Data Class와 Sealed Class는 Java에는 존재하지 않는 Kotlin만의 특별한 클래스이다. 이번 포스트에서는 이러한 Kotlin의 특별한 클래스에 대해 정리한다. Data Class Data Class는 주로 DB를 다루는 앱을 개발할 때 각 DTO(Data Transfer Object)나 VO(Value Object)를 작성할 때 사용할 수 있는 특수한 클래스이다. Java에서 DTO나 VO를 작성할 때 getter, setter를 비롯하여 equals(), hashCode.. 2022. 12. 16.
[Kotlin] 백준 25916 : 싫은데요 문제 링크 25916번: 싫은데요 6번째 구멍부터 8번째 구멍까지 막으면 총 9의 부피를 소모하고, 최대값인 9를 출력한다 www.acmicpc.net 문제 해설 부분합의 최대치 중 M 이하인 값을 구하는 문제다. 문제에 햄스터가 막을 구멍은 반드시 연속되어야 한다는 제한이 있기 때문에 투 포인터를 이용하여 풀 수 있다. 투 포인터는 이름 그대로 두 개의 점이 배열 위를 이동하면서 주어진 조건에 맞는 답을 찾아가는 방법이다. 본 문제에서는 독의 첫 번째 구멍부터 마지막 구멍까지 햄스터가 계속 몸을 늘리거나 줄여가면서 답을 찾을 수 있다. 주어진 예제를 그림으로 표현해보자. 그림을 보면 현재 햄스터가 막은 구멍 크기의 합계가 조건보다 작은 경우엔 햄스터가 오른쪽으로 늘어나고, 햄스터가 막은 .. 2022. 12. 16.