[백준] 20291번: 파일 정리 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 20291번: 파일 정리친구로부터 노트북을 중고로 산 스브러스는 바탕화면에 정리되지 않은 파일들이 가득했다. 이 파일들을 확장자별로 정리한 뒤, 각 확장자의 개수를 사전순으로 출력하는 문제이다.www.acmicpc.net 풀이 각 파일 이름은 "이름.확장자" 형태로 주어진다. split('.')을 이용해 이름(f)과 확장자(e)를 나누고, 해시맵(HashMap)에 확장자명을 키(key)로, 빈도수를 값(value)으로 저장한다. 이미 존재하는 확장자인 경우 +1, 처음 등장한 확장자는 1로 초기화한다. toSortedMap()을 이용하면 키(확장자명) 기준으로 자동 정렬된 Map이 만들어진다. 이후 forEach를 통해 확장자명과 등장 횟수를 출력한다. 코드 fun main() { val..
[백준] 19939번: 박 터뜨리기 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 19939번: 박 터뜨리기N개의 공을 K개의 바구니에 빠짐없이 나눠 담되, 각 바구니는 1개 이상의 공이 있어야 하고 담긴 공의 개수가 모두 달라야 한다. 이 조건을 만족할 경우, 가장 많이 담긴 바구니와 가장 적게 담긴 바구니의 공 개수 차이를 최소로 하는 값을 출력하며, 불가능할 경우 -1을 출력하는 문제.www.acmicpc.net 풀이 서로 다른 자연수를 가진 k개의 바구니에 n개의 공을 나누어 담으려 한다. 즉, 바구니에 담긴 공의 개수가 모두 달라야 한다.서로 다른 k개의 자연수의 최소 합은 1 + 2 + 3 + ... + k = k(k+1)/2이다. 이 값(sum)을 기준으로 다음과 같이 경우를 나눌 수 있다. sum이 n보다 큰 경우, n개의 공으로는 1, 2, ..., k를 ..
[백준] 11508번: 2 + 1 세일 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 11508번: 2+1마트에서 물건을 3개 사면 가장 싼 1개는 무료로 준다. 구매하고자 하는 N개의 물건 가격이 주어질 때, 최대한 혜택을 받았을 때 지불해야 하는 금액의 합을 구하는 문제.www.acmicpc.net 풀이 문제에서 주어진 조건은 "유제품을 세 개 사면, 가장 싼 하나를 무료로 받을 수 있다" 이다. 따라서, 최대한 비싼 제품에 대해 할인을 적용하려면 비싼 제품들끼리 묶는 것이 가장 유리하다. 즉, 유제품의 가격을 내림차순으로 정렬한 뒤, 세 개씩 묶었을 때 세 번째 제품을 무료로 처리하면 된다. 코드 fun main() { var ans = 0 val cost = IntArray(readln().toInt()) { readln().toInt() }.sortedDesc..
[백준] 2635번: 수 이어가기 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 2635번: 수 이어가기다음과 같은 규칙에 따라 수들을 만들려고 한다. 먼저 첫 번째 수로 양의 정수가 주어진다. 두 번째 수는 양의 정수 중에서 하나를 선택한다. 세 번째부터 이후에 나오는 모든 수는 전의 전의 수에서 전의 수를 빼서 만든다. 예를 들어 첫 번째 수가 9, 두 번째 수가 3인 경우 그 다음 수는 9 - 3 = 6이 된다.www.acmicpc.net풀이 이 문제는 앞의 앞의 수에서 앞의 수를 빼서 새로운 수를 만드는 규칙을 따른다. 따라서 두 번째로 올 수 있는 수는 입력값의 절반 이상부터 탐색하면 충분하다. 각 후보 값에 대해 규칙에 따라 수열을 생성하고, 음수가 나오는 순간 반복을 종료한다. 그 중 가장 긴 수열을 만든 경우를 찾아 해당 배열을 출력한다. 코드 fun main..
[백준] 1758번: 알바생 강호 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1758번: 알바생 강호강호는 알바를 하며 팁을 받지만, 팁 기록을 조작할 수 없고, 팁이 많은 사람에게 먼저 팁을 받는다. 주어지는 팁 액수들로 받을 수 있는 최대 팁의 합을 구하는 문제.www.acmicpc.net 풀이 음수인 팁은 받을 수 없기 때문에, 가장 많은 팁을 주려는 사람부터 순서대로 받는 것이 전체 팁의 합을 최대로 만드는 방법이다. 따라서 손님들이 제시한 팁 금액을 내림차순으로 정렬한 뒤, 순서에 따라 실제 받을 수 있는 팁을 계산한다. 이때 계산 결과가 0보다 작으면 팁을 받을 수 없으므로 제외하고, 모든 가능한 팁의 합을 더해 최종 결과를 구한다. 코드 fun main() { val arr = IntArray(readln().toInt()) { readln().toIn..