Kotlin162 [Kotlin] 백준 27315 : 틀리는 건 싫으니까 쉬운 문제에 올인하려고 합니다 문제 링크 27315번: 틀리는 건 싫으니까 쉬운 문제에 올인하려고 합니다 첫 번째 줄에 두 정수 $N$, $M$이 공백으로 구분되어 주어진다. ($1\leq M\leq N\leq 500\,000$) 다음 $N$개의 줄에 $D_i$ $P_i$ $T_i$ $E_i$의 네 정수로 각각 문제의 아이디어 난이도, 구현 난이도와 데이터 소유 www.acmicpc.net 문제 해설 기본적으로 틀렸습니다를 최소로 줄이려면 한별이의 아이디어 능력(이하 \(HD\))보다 작거나 같은 아이디어 난이도(이하 \(D\))를 가진 문제 중에서 구현 난이도(이하 \(P\))가 낮은 문제부터 해결해야 한다. 틀렸습니다의 개수는 각 문제마다 \(P\)와 한별이의 구현 능력(이하 \(HP\))의 차이이고, 문제를 풀 때마다 \(HP\.. 2023. 2. 18. [Kotlin] 백준 21939 : 문제 추천 시스템 Version 1 문제 링크 21939번: 문제 추천 시스템 Version 1 tony9402는 최근 깃헙에 코딩테스트 대비 문제를 직접 뽑아서 "문제 번호, 난이도"로 정리해놨다. 깃헙을 이용하여 공부하시는 분들을 위해 새로운 기능을 추가해보려고 한다. 만들려고 하는 명령 www.acmicpc.net 문제 해설 정렬과 탐색을 동시에 빠르게 하기 위해서 TreeSet을 사용하여 풀었다. 문제의 번호를 인덱스로 하여 문제의 난이도를 배열로 따로 관리했고, 문제 번호는 TreeSet에서 난이도가 높은 순으로, 난이도가 같다면 문제 번호가 큰 순서대로 정렬되도록 Comporator를 구현했다. 그 후 주어지는 문제의 정보를 저장한 후 명령어별로 분기를 수행하면 된다. recommend : \(x\)가 \(1\)이면 TreeSe.. 2023. 2. 14. [Kotlin] 빌더 패턴과 코틀린, 그리고 Default Parameter와 Named Argument를 이용하여 코틀린에서 빌더 패턴의 효과를 내보기 Builder Pattern 이펙티브 자바(조슈아 블로크 著)에서는 생성자의 파라미터가 많다면 빌더를 고려하라는 내용이 있다. 클래스의 필드가 많아져서 생성자의 파라미터가 많아질수록 파라미터의 순서를 뒤바꾸거나 엉뚱한 값을 집어넣는 실수를 하기 쉬워지고, 이는 파라미터의 타입과 파라미터의 개수만 같다면 컴파일 시점에는 아무 문제가 없기 때문에 런타임에 예상치 못한 에러를 유발할 수 있다. 이런 문제를 해결하기 위해 나온 디자인 패턴이 바로 빌더 패턴(Builder Pattern)이다. 빌더 패턴은 일반적으로 클래스 내부에 해당 클래스의 필드를 그대로 갖는 Builder라는 정적 클래스를 생성한 후 객체를 생성하고자 하는 클래스에서 builder() 메소드로 빌더를 생성한다. 이후 각 파라미터마다 값을 삽.. 2023. 2. 13. [Kotlin] 백준 14698 : 전생했더니 슬라임 연구자였던 건에 대하여(Hard) 문제 링크 14698번: 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) 각 테스트 케이스마다 슬라임을 끝까지 합성했을 때 청구될 비용의 최솟값을 1, 000, 000, 007로 나눈 나머지를 출력한다. 전기 에너지가 전혀 필요하지 않은 경우엔 1 을 출력한다. www.acmicpc.net 문제 해설 각 테스트 케이스마다 구해야 하는 총 비용은 매 합성 단계마다 필요한 전기 에너지, 즉 매 합성 단계마다 합성되는 슬라임의 에너지들을 모두 곱한 값과 같다. 이 값을 최소로 하기 위해서는 매 합성마다 에너지가 가장 낮은 슬라임 둘을 합성해야 하는데, 예제의 경우를 그림으로 표현하면 다음과 같다. 따라서 우선순위 큐를 사용하면 문제를 수월하게 풀 수 있다. 입력받은 모든 슬라임을 우선순위 큐에 삽입한다... 2023. 2. 12. [Java/Kotlin] 자바 Stream을 통해 리스트의 요소를 특정 key 기준으로 grouping하여 다른 객체로 합치기 및 코틀린으로 변경해보기 목차 Stream이란? 자바의 Stream은 자바 8버전에 새로 추가된 기능으로, 컬렉션 객체에서 요소들을 순회하면서 람다 함수를 통해 이 요소들을 가공하거나 요소의 특정 필드를 추출, 또는 컬렉션 객체의 요소들을 토대로 한 새로운 객체를 생성하는 것 외에도 다양한 방법으로 활용할 수 있는 강력한 기능이다. 다양한 기능들이 있지만 map()과 filter()정도만 해도 다채롭게 사용할 수 있다. 이 포스트에서는 업무 중 마주했던, 리스트의 요소들을 특정 key를 기준으로 한 새로운 객체로 병합하여 이 새로운 객체들의 리스트로 변환한 내용과 스트림을 통해 이 코드들을 개선해나간 내용, 나아가서 이렇게 개선된 코드를 코틀린으로 표현하면 어떻게 되는지에 대해 정리할 것이다. 문제의 시작 DB에 위와 같은 형태.. 2023. 2. 9. [Kotlin] 백준 11637 : 인기 투표 문제 링크 11637번: 인기 투표 각 테스트 케이스는 첫 번째 줄부터 순서대로 출력된다. 최다 득표자가 과반수 득표를 했을경우에는 "majority winner R", 절반 이하의 득표를 하였을 경우엔 "minority winner R"가 되며, 최다 득표자가 없 www.acmicpc.net 문제 해설 간단한 구현 문제이다. 각 테스트 케이스마다 매 입력으로 주어지는 득표 수 중 최대치와 득표 수의 합계를 구한다. 최대 득표 수의 개수가 1이 아니면(= 최다 득표자가 2명 이상이면) "no winner"를 출력한다. 최대 득표 수의 개수가 1이라면 득표 수의 합계를 2로 나눈 값과 최대 득표 수를 비교하여 "majority winner R" 또는 "minority winner R"를 출력한다. Code.. 2023. 2. 8. [Kotlin] 백준 12931 : 두 배 더하기 문제 링크 12931번: 두 배 더하기모든 값이 0으로 채워져 있는 길이가 N인 배열 A가 있다. 영선이는 다음과 같은 두 연산을 수행할 수 있다. 배열에 있는 값 하나를 1 증가시킨다. 배열에 있는 모든 값을 두 배 시킨다. 배열 B가 주www.acmicpc.net문제 해설문제는 모든 값이 0으로 채워진 배열을 입력으로 주어진 배열로 만드는 것이지만, 역으로 생각해보면 입력으로 주어진 배열의 모든 값을 0으로 만들기 위한 연산의 최소 횟수를 구하는 문제라는 것을 알 수 있다. 역으로 접근하면 된다는 것을 알았으니 어떻게 연산을 진행할 지 생각해보자. 배열의 모든 값을 반으로 나누는 것이 값 하나를 1 감소시키는 것보다 훨씬 효율적이다. 그런데 홀수는 반으로 나눌 수 없으니 1 .. 2023. 2. 5. [Kotlin/Java] 개인적인 Enum 활용기 목차 클린 코드(로버트 C. 마틴 著)를 읽거나 개발 강의를 듣다 보면 리터럴 대신 Enum을 사용하는 것을 권장하는 경우가 많다. 최근 프로젝트를 진행할 때 Enum을 사용하면서 느낀 점에 대해서 정리해보고자 한다. Enum? Enum이란 관련된 요소들을 모아놓은 집합 또는 단어 의미 그대로 열거해 놓은 것이라고 볼 수 있다. 사실 자바를 처음 배울 당시에만 해도 Enum에 대한 내용은 뭔가 잘 와닿지 않았다. 대부분 Enum에 대해서는 짧고 간단하게 다루는 경우가 많았고, 심지어 아예 Enum을 다루지 않은 책들도 있었다. 그러던 도중 배민 기술 블로그에서 Enum을 다룬 글과 최근 수강한 Spring Boot 강의에서 Enum을 활용하는 것을 보고 어떻게 Enum을 활용할 수 있을지 와닿은 점이 있.. 2023. 2. 4. 이전 1 ··· 6 7 8 9 10 11 12 ··· 21 다음