[백준] 10828번: 스택 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 풀이 이 문제는 자바에서 기본적으로 제공하는 Stack을 이용해 풀이 할 수 있지만, 이번에는 배열과 포인터 역할을 하는 변수를 이용하여 구현해 보았다. 입력받은 N크기의 stack 배열을 생성하고, 사용자의 입력에 맞게 함수를 처리한다. push(n) 함수는 ptr을 1 증가시키고 stack[ptr]에 n을 저장한다. pop() 함수는 ptr이 -1이면 -1을 반환하고, 아니라면 stack[ptr]을 반환하고 ptr을 1 빼준다. size..
[백준] 1065번: 한수 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 풀이 한수는 각 자리수가 등차수열이 만들어지는 숫자다. 예를 들어 123은 자리수가 1 씩 증가하는 등차수열이므로 한수이다. 입력된 숫자 N이 100 미만이라면 모두 한수이므로 출력할 cnt는 N이다. 입력된 숫자 N이 100 이상인 경우에는 백의 자리: i/100, 십의 자리 : (i/10)%10, 일의 자리 i%10를 비교한다. 각 자리수를 비교하여 차이가 같다면 한수이므로 cnt를 1 증가시켜준다. 코드 fun main() { val br = System..
[백준] 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 > ..