[백준] 1755번: 숫자놀이 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1755번: 숫자놀이정수 M, N(1 ≤ M ≤ N ≤ 99)이 주어질 때 M 이상 N 이하의 수들을 십의 자리 및 일의 자리 각각을 영어 단어로 읽었을 때의 사전순으로 정렬해 출력하는 문제이다.www.acmicpc.net 풀이 이 문제는 숫자를 영어 단어로 변환한 뒤, 사전순으로 정렬하여 출력하는 문제다. 각 숫자를 대응하는 영어 단어로 바꾸고, 문자열 기준으로 정렬하면 해결할 수 있다. 숫자(num)와 영어 표현(eng)을 함께 저장할 수 있는 Number 클래스를 정의한다. Comparable 인터페이스를 구현하여, 영어 문자열 기준으로 비교하도록 한다. 입력받은 범위 [n, m]의 각 숫자를 문자열로 변환하고, 각 자리수를 영어로 치환하여 하나의 문자열로 만든다. 변환된 Number..
[백준] 2870번: 수학숙제 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 2870번: 수학숙제종이에 적힌 문자열에서 연속된 숫자를 찾아 모두 추출한 뒤, 비내림차순으로 정렬해서 출력하는 문제이다.www.acmicpc.net 풀이 문자열 속에 포함된 숫자들을 추출해 정렬하는 문제로 BigInteger를 사용해 해결했다. 입력받은 문자열을 순회하면서 숫자인 경우에 tmp 변수에 이어 붙인다. 숫자가 아닌 문자를 만나면 지금까지의 tmp를 하나의 수로 간주하여 list에 추가하고 초기화한다. 마지막에 남은 tmp도 잊지 않고 추가해준다. 이후 list를 정렬하고 출력해주면 된다. 코드 import java.math.BigIntegerfun main() { val list = mutableListOf() repeat(readln().toInt()) { ..
[백준] 1308번: D-Day - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1308번: D-Day첫째 줄에 오늘의 날짜가 주어지고, 두 번째 줄에 D-Day인 날의 날짜가 주어진다. 날짜는 연도, 월, 일 순이며, 1년 1월 1일부터 9999년 12월 31일까지 범위이다. 캠프가 천 년 이상 지속될 경우 ‘gg’를 출력하는 조건이 있다.www.acmicpc.net풀이 이 문제는 두 날짜의 차이를 계산하여 D-Day를 구하는 문제로 기준일과 목표일을 모두 0년 1월 1일을 기준으로 일수로 환산한 뒤, 그 차이를 구하는 방식으로 해결할 수 있다. 목표 날짜가 현재 날짜로부터 1000년을 넘으면 "gg"를 출력한다. 아니라면 0년 1월 1일을 기준으로 해당 날짜까지의 총 일수를 계산한다. 날짜를 계산 할 때 윤년을 반영하여 2월의 일수를 조정한다. 4의 배수이면서 100의 ..
[백준] 13699번: 점화식 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 13699번: 점화식다음의 점화식에 의해 정의된 수열 t(n)을 생각하자: t(0)=1; t(n)=t(0)*t(n−1)+t(1)*t(n−2)+…+t(n−1)*t(0). 입력으로 0 ≤ n ≤ 35가 주어질 때 t(n)을 출력하는 문제이다.www.acmicpc.net 풀이 주어진 점화식을 그대로 따라가면 쉽게 해결할 수 있으며 DP를 이용해 카탈란 수(Catalan Number)를 구할 수 있다. 카탈란 수는 조합론에서 사용되는 특정한 구조를 만들 수 있는 경우의 수를 나타낸다. 수열 C₀, C₁, C₂, … 을 카탈란 수라고 하며, 첫 몇 개는 다음과 같다:C₀ = 1, C₁ = 1, C₂ = 2, C₃ = 5, C₄ = 14, C₅ = 42, …카탈란 수 Cₙ은 다음 점화식으로 정의된다.$..
[백준] 1402번: 아무래도이문제는A번난이도인것같다 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1402번: 아무래도이문제는A번난이도인것같다어떤 정수 A와 B가 주어졌을 때, A가 B로 변할 수 있는지 판별하는 문제이다. (A = a₁·a₂·…·aₙ 이고 A’ = a₁ + a₂ + … + aₙ이라면 A는 A’로 변할 수 있다.)www.acmicpc.net 풀이 소인수 분해로 구현하여 제출하면 시간초과가 발생한다. 하지만 사실 입력받는 모든 경우의 수가 성립하기 때문에 yes를 출력해주면 된다. 모든 경우의 수가 성립하는 이유는 다음과 같다. 1. 곱은 유지하면서 합을 자유롭게 조정할 수 있다. 곱이 A가 되도록 하면서도, 1을 곱하는 것은 곱에 영향을 주지 않는다. 예를 들어 5 = 5 × 1 × 1 × 1 × 1 × 1 이라면 곱은 여전히 5이고, 합은 5 + 1 + 1 + 1 + 1 +..