[백준] 15903번: 카드 합체 놀이 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 풀이 모든 과정이 끝났을 때, 카드의 합을 최소화하려면 카드들 중에서 가장 작은 두 카드를 더해야 한다. 이를 위해 우선순위 큐를 사용하여 가장 작은 두 카드를 꺼내어 합을 구하고, 합한 값으로 변한 두 카드를 다시 우선순위 큐에 넣어주면 된다. 코드 import java.util.* fun main() { val br = System.`in`.bufferedReader() val bw = System.out.buffer..
[백준] 2670번: 연속부분최대곱 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 2670번: 연속부분최대곱첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나www.acmicpc.net 풀이 투 포인터 방식을 활용하여 해결할 수 있다. 먼저 시작 포인터와 끝 포인터를 사용해 연속된 구간의 곱을 계산한다. 현재까지 구한 곱을 최대값과 비교하며 갱신하고, 이 과정을 배열 끝까지 반복한다. 중요한 점은 곱이 1보다 작아지는 경우이다. 곱이 1 이하가 되면 이후에 어떤 값을 곱하더라도 결과가 커지기 어렵다. 따라서 해당 시점에서는 구간을 초기화하고 start와 end 포인터를 재설정하여 새로운 구간의 곱을 다시 계산한다. 이 과..
[백준] 11441번: 합 구하기 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 11441번: 합 구하기 첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는 www.acmicpc.net 풀이 입력받은 수의 누적 합을 sum 배열에 저장한다. 구간 [x, y]의 합은 sum[y]에서 sum[x-1]을 빼면 구할 수 있다. 코드 fun main() { val br = System.`in`.bufferedReader() val bw = System.out.bufferedWriter() val num = br.readLine().toInt() val arr = br.readLi..
[백준] 11047번: 동전 0 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 풀이 이 문제는 그리디 알고리즘을 사용하여 해결하는 문제다. 그리디 알고리즘이란 현재 상황에서 최선의 선택을 고르며 해답을 찾는 알고리즘이다. 유의할 점은 그리디 알고리즘은 항상 최적해를 보장하는 것이 아니라는 것이다. 예를 들어 어떤 경로 이동에서 매 순간 최적을 따라가면 1 - 1 - 1 - 100 순서로 이동하지만, 1 - 1 - 10 - 10 으로 움직이는 방법이 있을 수 있기 때문이다...
[백준] 5052번: 전화번호 목록 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 풀이 전화번호를 문자열로 입력받고 이를 정렬하여 번호를 비교하는 방식으로 해결할 수 있다. 예를 들어, 예제 입력1의 테스트 케이스인 911, 97625999, 91125426을 입력받은 경우, 이를 오름차순으로 정렬하면 911, 91125426, 97625999 가 된다. 여기서 startsWith() 함수를 사용하여 이전의 번호가 다음 번호에 포함되는지 여부를 확인할 수 있다. 이를 통해 전화번호 목록이 일관성 있는 목록인지 판단..