티스토리 뷰
코트카타
직사각형 별찍기
문제
정답
fun main(args: Array<String>) {
val (n, m) = readLine()!!.split(' ').map(String::toInt)
for(i in 1..m){
for(j in 1..n){
print('*')
}
println()
}
}
2중 for문을 활용해서 풀 수 있는 문제이다.
n(가로 길이)만큼 반복해서 별을 출력한 뒤 반복문이 끝나면
개행을 하는것을 m(세로 길이)만큼 반복하면 된다.
다른 풀이
fun main(args: Array<String>) {
val (n, m) = readln().split(' ').map { it.toInt() }
repeat(m) {
repeat(n) {
print('*')
}
println()
}
}
readLine()!!은 readln()으로
map(String::toInt)는 map { it.toInt() }로 대체할 수 있다.
repeat(n)은 같은 동작을 n번 반복한다.
for문 대신 repeat함수를 써서 구현할 수도 있다.
최대공약수와 최대공배수
문제
정답
class Solution {
fun solution(n: Int, m: Int): IntArray = intArrayOf(gcd(n, m), lcm(n, m))
fun gcd(n: Int, m: Int): Int {
var r = n % m
if (r == 0) return m
else return gcd(m, r)
}
fun lcm(n: Int, m: Int): Int = n * m / gcd(n, m)
}
코틀린에 따로 최대공약수 및 최소공배수를 구해주는 함수는 따로 없어서
두 함수는 Int형 값을 반환하도록 하고 solution 함수에서 반환하는
배열의 요소를 두 함수의 반환값으로 지정하여 [최대공약수, 최대공배수]를 반환하도록 했다.
최대공약수 반환 함수
fun gcd(n: Int, m: Int): Int {
var r = n % m
if (r == 0) return m
else return gcd(m, r)
}
gcd(Greatest Common Divisor)는 최대공약수를 뜻하는 말이다.
2 ~ n 의 범위를 반복문을 돌려 두 수 모두 나누어떨어지는 수를 구할 수도 있지만
시간 복잡도의 문제 때문에 유클리드 호제법을 이용해서 구하였다.
호제법이란 두 수가 서로 상대방 수를 나누어서 원하는 수를 얻는 알고리즘이다.
두 자연수 n, m에 대해서 n를 m로 나눈 나머지를 r이라 하면
n와 m의 최대공약수는 m와 r의 최대공약수와 같다.
r이 0이 될 때까지 재귀함수를 호출하게 되면
최종적으로 반환되는 m의 값은 최대공약수가 된다.
최소공배수 반환 함수
fun lcm(n: Int, m: Int): Int = n * m / gcd(n, m)
lcm( Least Common Multiple)은 최소공배수를 뜻하는 말이다.
최소공배수는 두 수를 곱한 값에 최대공약수를 나누는 것으로 구할 수 있다.
함수 간결하게 작성하기
// n의 제곱수를 반환하는 함수
fun solution(n: Int): Int = n * n
함수에서 실행되는 코드가 한 줄을 넘어가지 않는다면
중괄호({})와 return을 생략하고 등호(=)를 이용해 간략하게 한 줄로 쓸 수 있다.
'내일배움캠프 > Android 사전캠프' 카테고리의 다른 글
사전캠프 TIL 10일차 (이상한 문자 만들기, 삼총사 - Kotlin | 로또 번호 생성기 UI 구현) (0) | 2024.05.07 |
---|---|
사전캠프 TIL 9일차 (3진법 뒤집기 - Kotlin | BMI 계산 기능 구현) (0) | 2024.05.04 |
사전캠프 TIL 7일차 (BMI 계산기 UI 구현) (1) | 2024.05.01 |
사전캠프 TIL 6일차 (안드로이드 개발환경 세팅) (0) | 2024.04.30 |
사전캠프 TIL 5일차 (음양 더하기, 핸드폰 번호 가리기, 없는 숫자 더하기, 제일 작은 수 제거하기 - Kotlin) (0) | 2024.04.29 |