[백준] 1929번: 소수 구하기 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 풀이 어떤 수가 소수인지 알기 위해서 아래 코드로 판별할 수 있지만, 범위 내에 모든 수를 아래와 같은 방법으로 판별한다면 비효율적이고 이 문제에서 시간초과가 발생한다. for(i in start .. end) { var cnt = 0 for(j in 1..i) { if(i%j==0) { cnt++ } } if(cnt==2) { println(i) } } 대신 에라토스테네스의 체를 이용하여 해결할 수 있다. 에라토스테네스의 체는 범위 내에서 소수의 배수는 모두 지워가는 방식이다. 2의 배..
[백준] 4673번: 셀프 넘버 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 풀이 반복문을 통해 1부터 10000까지 각 숫자들의 생성자들을 합한다. 합한 숫자가 10000 이하일 때, check 배열을 이용해 저장하고 출력한다. 코드 fun main() { val check = BooleanArray(10001) for(i in 1..10000) { var num = i var expression = i while(num>0) { expression += num % 10 num /..
[백준] 2839번: 설탕 배달 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 풀이 이 문제는 이중 반복문(3의 배수 + 5의 배수의 합)으로 해결할 수도 있지만, 효율적인 풀이를 위해 그리디 알고리즘과 DP를 이용할 수 있다. - 그리디 풀이 1. N이 5의 배수라면 답은 N/5 2. N이 5의 배수가 아니라면 3kg 에 한 번 담고(cnt++, N -= 3) 다시 반복문을 실행한다. 3. N이 0보다 작아지면 답은 -1 - dp 풀이 N이라는 숫자를 만들기 위해서 (N - 3) + 3 또는 (N - 5) + 5 의 경우로 나눠 볼 수 있다...
[백준] 1002번: 터렛 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다. www.acmicpc.net 풀이 이 문제는 두 원의 교점을 찾는 문제이다. 1. (x1, y1) == (x2, y2) 일 때, r1 과 r2 를 비교한다. - r1 == r2 이면 두 원이 같다. -> -1 - r1 != r2 이면 한 원이 다른 원에 포함된다. -> 0 2. (x1, y1) != (x2, y2) 일 때, 두 원 사이의 거리 d1 = $ \sqrt{(x1-x2)^2 + (y1-y2)^2} $ 반지름의 합 d2 = r1 + r2 반지름의 차 d3 = $ \vert r1 - r2 \vert $ 를 비교한다. - d1 > ..