본문 바로가기

Algorithm21

BOJ(2609) - Kotlin 문제 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다. 출력 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. 나의 접근방법 최대공약수를 위한 알고리즘 중에 '유클리드 호제법'이라는 알고리즘이 있다. 이 알고리즘을 구현해 문제를 풀려고 했다. 최대공약수를 구하기만 하면 최소공배수는 각 수를 최대공약수로 나눈 몫 X 최대공약수 이기 때문에 이 알고리즘을 구현하는게 가장 중요한 문제였다. '유클리드 호제법'이 무엇인지 궁금하다면 구글링을 해보시기 바란다. 여기서 간단하게 설명하자면 두 수를 .. 2022. 6. 7.
BOJ(1436) - Kotlin 문제 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2.. 2022. 6. 3.
BOJ(1181) - Kotlin 문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 입력 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다. 나의 접근방법 동일한 문자열이 들어오는 것을 없애주기 위해서 Set 자료구조를 사용했다. 그리고 먼저 사전순서로 정렬을 해놓고 문자열 길이를 비교하기 위해서 sorted() 함수를 사용했다. 코드 import java.io.Buffe.. 2022. 6. 2.
BOJ(11050) - Kotlin 문제 자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) 출력 \(\binom{N}{K}\)를 출력한다. 나의 접근방법 이항계수가 아예 생각나지 않아서 구글링을 했다. 이항계수의 공식은 \(\frac{n!}{r!(n-r)!}\)이였다. 공식에서 팩토리얼을 많이 사용하기 때문에 팩토리얼 함수를 만들고 공식을 그대로 대입시켜 풀었다. 코드 /* 이항 계수 1 */ import java.util.Scanner fun main() = with(Scanner(System.`in`)) { val n = nextInt() val r.. 2022. 5. 31.