#12940
๐ Question ?
https://school.programmers.co.kr/learn/courses/30/lessons/12940
class Solution {
fun solution(n: Int, m: Int): IntArray {
var answer = intArrayOf()
return answer
}
}
๐งฉ Thought Process
- ์ต๋ ๊ณต์ฝ์ variable์ gcd(Greatest Common Divisor์ ์ฝ์) ๋ก ์ ์ฅํด์ฃผ๊ณ ์ด๊ธฐ๊ฐ์ 1๋ก ํ๋ค.
- ์ต๋๊ณต์ฝ์ ์ฐพ๊ธฐ ๊ฐ์ฅ ๋จผ์ m์ด๋ n ์ค ํฐ์๋ฅผ ์์์๋ก ๋๋์ด๋ณด๊ธฐ ! ๋๋์ด์ง๋ฉด ์์ ์๊ฐ ์ต๋๊ณต์ฝ์์ด๋ค!
- ๋ง์ฝ ๋๋์ด์ง์ง ์๋๋ค๋ฉด ์์ ์์ ๊ฐ์ 1์ฉ ์ค์ฌ๊ฐ๋ฉฐ ํฐ์๋ฅผ ๋๋์ด์ค๋ค. ๋๋์ด ๋จ์ด์ง๋ ์๊ฐ ์ต๋๊ณต์ฝ์ !
- ์ต์ ๊ณต๋ฐฐ์ variable ์ lcm(Least Common Multiple ์ ์ฝ์)๋ผ๊ณ ๋๊ณ ์ด๊ธฐ๊ฐ์ผ๋ก 1์ ๋ถ์ฌํ๋ค.
- ๊ฐ m ๊ณผ n์ ์ต๋๊ณต์ฝ์๋ก ๋๋์ด์ฃผ๊ณ lcm์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ณฑํด์ค๋ค.
- ์ต๋ ๊ณต์ฝ์์ ๊ฐ์ 1์ฉ ์ค์ฌ๊ฐ๋ฉด์ ์ด๋ฏธ ์ต๋๊ณต์ฝ์๋ก ๋๋์ด์ง m๊ณผ n์ ๊ฐ์ ๋๋์ด๋ณด๊ณ ๋๋ค ๊ณตํต์ผ๋ก ๋๋์ด์ง๋ ๊ฒฝ์ฐ์๋ m๊ณผ n์ ๊ฐ์ ์ค์ ๋ก ๋๋์ด์ฃผ๊ณ ๊ทธ ๊ฐ์ lcm์ ๊ณฑํด์ค๋ค.
- ๋๋๋ ๊ฐ์ด 2๊ฐ ๋ ๋๊น์ง ๋๋์ด๋ณด๊ณ ๋จ์ n๊ณผ m์ ๊ฐ์ lcm์ ๋๋ค ๊ณฑํด์ฃผ๋ฉด ์ต์๊ณต๋ฐฐ์๋ฅผ ์ฐพ์ ์ ์๋ค!!
- ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์๋ฅผ intArray์ ๋ฃ์ด ์ ์ฅํด์ฃผ๊ณ ๋ฆฌํดํ๋ค!
import kotlin.math.*
class Solution {
fun solution(n: Int, m: Int): IntArray {
var gcd = 1
var lcm = 1
var N = n
var M = m
// ์ต๋๊ณต์ฝ์ ์ฐพ๋ ์ฝ๋
if (m%n == 0 || n%m == 0) {
gcd = minOf(n, m)
} else {
for(i in 1 until minOf(n, m)-1) {
if (maxOf(m, n)%(minOf(m, n)-i) == 0) {
gcd = minOf(n, m) - i
break
}
}
}
// ์ต์ ๊ณต๋ฐฐ์ ์ฐพ๋ ์ฝ๋
for (j in 0 until gcd) {
if ((M % (gcd - j) == 0) && (N % (gcd - j) == 0)) {
N /= (gcd - j)
M /= (gcd - j)
lcm *= (gcd - j)
}
}
lcm = lcm*M*N
return intArrayOf(gcd, lcm)
}
}
ํ ์คํธ ๋ ์คํจ ํ๋น 25์ ์ด ๋ชจ์ผ...ใ
another try:
import kotlin.math.*
class Solution {
fun solution(n: Int, m: Int): IntArray {
var answer = mutableListOf<Int>()
if (n - m == 0) {
answer.add(n)
} else {
var Max = maxOf(n, m)
var Min = minOf(n, m)
if (Max % Min == 0) {
answer.add(Min)
} else {
for (i in 1 until Min) {
if (Max % (Min - i) == 0) {
answer.add(Min - i)
break
}
}
}
}
answer.add(n*m/answer[0])
return answer.toIntArray()
}
}
minOf์ maxOfํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ ์ ๋ค์ด๊ฐ๋ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๋ฐ์ง์ง ์์์ด์ ๊ทธ ๊ฒฝ์ฐ๋ฅผ ์ถ๊ฐํ๋ ์๋ฌ๊ฐ ์ค์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ ํ ๋ง์ ์ด ์๋์๋ค. ๊ฒฐ๊ตญ ๋ต ํ์ธ...
๐ Answer
ํด์ค #1 ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์ด์ฉ
https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ๊ฐ๋จ ์ค๋ช : ์ต๋๊ณต์ฝ์ ๊ณ์ฐ ๋ฒ. n๊ณผ m์ ์ต๋๊ณต์ฝ์๋ n์ m (n>m)์ผ๋ก ๋๋์์ ๋ ์ ๋๋จธ์ง r๊ณผ m์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค. ๊ทธ ๋ค์ m๊ณผ r์ ์ต๋๊ณต์ฝ์๋ m์ r๋ก ๋๋ ๋๋จธ์ง์ r์ ์ต๋๊ณต์ฝ์์ ๊ฐ์ ๊ฒ์ด๋ค.
// ๋ ๊ฐ a์ b๋ฅผ ์ธํํ์ ๋ ์ต๋๊ณต์ฝ์๋ฅผ ๊ณ์ฐํด์ฃผ๋ ํจ์ ์ ์
fun gcd(a: Int, b:Int): Int = if(b != 0) gcd(b, a % b) else a
// b๊ฐ 0์ด ์๋ ๊ฒฝ์ฐ ํจ์ gcd๊ฐ ๋ฐ๋ณต๋๋๋ก ์ง์ฌ์๋ค.
fun main(args : Array<String>) {
var x = 4
var y = 10
println("์ต๋ ๊ณต์ฝ์ : ${gcd(x, y)}")
println("์ต์ ๊ณต๋ฐฐ์ : ${x * y / gcd(x, y)}")
x = 28
y = 16
println("์ต๋ ๊ณต์ฝ์ : ${gcd(x, y)}")
println("์ต์ ๊ณต๋ฐฐ์ : ${x * y / gcd(x, y)}")
}
์ ํ์ด๋ฅผ ์์ฉํด์ ๋ด ๋ฐฉ์๋๋ก ๋ฌธ์ ๋ฅผ ํ์ดํด๋ณด์๋ค
class Solution {
fun solution(n: Int, m: Int): IntArray {
var answer = intArrayOf(gcd(maxOf(n, m), minOf(n, m)), n*m/gcd(maxOf(n, m), minOf(n, m)))
return answer
}
fun gcd(a: Int, b: Int): Int = if(b != 0) gcd(b, a % b) else a
}
๐ Result
https://github.com/eun-24k/Algorithm/blob/main/Programmers/kotlin/12940.kt
๐ Comment
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ๋ฐฐ์ ๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ด์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค๊ณ ํ๋๋ฐ ์ ๋์ง ์์๋ค. ๋ค์์ ๊ธฐํ๋๋ฉด ํ๋ฒ ์๋ํด๋ณด๋ฉด ์ข์ ๊ฑฐ ๊ฐ๋ค.
'Algorithm > Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค โข ์ฝํ๋ฆฐ] ์์ ์ํธ #12926 (0) | 2023.11.28 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค โข ์ฝํ๋ฆฐ] ์ต์์ง์ฌ๊ฐํ #86491 (1) | 2023.11.27 |
[ํ๋ก๊ทธ๋๋จธ์ค โข ์ฝํ๋ฆฐ] ์ง์ฌ๊ฐํ ๋ณ์ฐ๊ธฐ #12969 (0) | 2023.11.18 |
[ํ๋ก๊ทธ๋๋จธ์ค โข ์ฝํ๋ฆฐ] ํ๋ ฌ์ ๋ง์ #12950 (0) | 2023.11.17 |
[ํ๋ก๊ทธ๋๋จธ์ค โข ์ฝํ๋ฆฐ] ๋ฌธ์์ด ๋ค๋ฃจ๊ธฐ ๊ธฐ๋ณธ # 12918 (0) | 2023.11.07 |